Unity는 씬의 로드 및 언로드 방식에 따라 라이트 프로브 데이터를 다르게 업데이트합니다.
Unity는 LightProbes C# 오브젝트를 사용하여 현재 로드된 모든 씬에 대한 라이트 프로브 데이터를 저장합니다. LightProbes
오브젝트에는 사면체화된 테셀레이션이라는 내부 데이터 구조가 들어 있습니다. Unity는 사면체화된 테셀레이션을 사용하여 라이트 프로브가 게임 오브젝트에 조명을 비추는 방식을 결정하기 위한 계산을 수행합니다.
씬을 로드하거나 언로드하면 Unity는 현재 로드된 모든 씬의 모든 라이트 프로브에 대한 포지션과 계수를 포함하도록 LightProbes
오브젝트를 자동으로 업데이트합니다. 하지만 Unity가 사면체화된 테셀레이션을 업데이트하는지 여부는 씬의 로드 또는 언로드 방식에 따라 다릅니다.
LoadSceneMode.Single을 사용하여 씬을 로드하면 Unity는 로드 프로세스의 일부로 사면체화된 테셀레이션을 자동으로 업데이트합니다. LoadSceneMode.Additive를 사용하여 씬을 로드하거나 UnloadSceneAsync를 사용하여 씬을 언로드하면 Unity는 사면체화된 테셀레이션을 업데이트하지 않습니다.
Unity가 최신이 아닌 사면체화된 테셀레이션을 사용하여 계산을 수행하면 해당 결과에 새로 로드되거나 언로드된 라이트 프로브가 반영되지 않습니다. 즉 라이트 프로브가 정상적으로 게임 오브젝트에 조명을 비추지 않으며, LightmapSettings.lightProbes.CalculateInterpolatedLightAndOcclusionProbes() 또는 LightmapSettings.lightProbes.GetInterpolatedProbe() 호출이 예기치 못한 결과를 반환할 수 있습니다.
Unity가 사면체화된 테셀레이션을 업데이트하도록 강제로 지정하려면 LightmapSettings.lightProbes.Tetrahedralize() 또는 LightmapSettings.lightProbes.TetrahedralizeAsync()를 호출하십시오. 이러한 함수는 Unity가 현재 로드된 모든 씬의 모든 라이트 프로브에 대한 데이터로 사면체화된 테셀레이션을 업데이트하도록 만듭니다.
사면체화된 테셀레이션을 업데이트하는 작업은 CPU 부하가 높으며, 라이트 프로브 개수가 많을수록 CPU에 미치는 영향이 증가합니다. 여러 개의 씬을 로드하거나 언로드할 때 사면체화된 테셀레이션의 업데이트로 인해 성능이 저하가 발생한다면 특정한 양의 콘텐츠를 로드하거나 언로드할 때까지 또는 CPU 부하가 애플리케이션 성능에 영향을 주지 않을 때까지 업데이트를 미루는 것이 좋습니다.