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