Version: Unity 6.0 (6000.0)
언어 : 한국어
라이트 프로브에서 광원을 사용하도록 게임 오브젝트 설정
런타임 시 라이트 프로브 이동

여러 씬에서 라이트 프로브 로드

Unity는 씬의 로드 및 언로드 방식에 따라 라이트 프로브 데이터를 다르게 업데이트합니다.

Unity는 현재 로드된 모든 씬에 대한 라이트 프로브 데이터를 저장하기 위해 LightProbes C# 오브젝트를 사용합니다. LightProbes 오브젝트에는 사면체 테셀레이션이라는 내부 데이터 구조가 포함되어 있습니다. Unity는 사면체 테셀레이션을 계산에 사용하여 라이트 프로브가 게임 오브젝트에 조명을 비추는 방식을 결정합니다.

씬을 로드하거나 언로드할 때 Unity는 현재 로드된 모든 씬에 있는 모든 라이트 프로브의 위치와 계수를 포함하도록 LightProbes 오브젝트를 자동으로 업데이트합니다. 하지만 Unity가 사면체 테셀레이션을 업데이트하는지 여부는 씬을 로드하거나 언로드하는 방식에 따라 다릅니다.

LoadSceneMode.Single을 사용하여 씬을 로드하면 새로운 라이트 프로브 데이터가 이전 라이트 프로브 데이터를 완전히 대체하기 때문에 로드 프로세스의 일환으로 사면체 테셀레이션을 자동으로 업데이트합니다.

LoadSceneMode.Additive를 사용하여 씬을 로드하거나 UnloadSceneAsync를 사용하여 씬을 언로드할 때 Unity는 사면체 테셀레이션을 자동으로 업데이트하지 않습니다. 새로 만들거나 제거된 라이트 프로브 데이터를 다시 계산해야 하므로 계산에 리소스 소모가 많고 이 작업 후에 로드 또는 언로드할 후속 씬이 있을 수 있기 때문입니다.

따라서 Unity는 새 라이트 프로브 데이터를 다시 사면체화할 시기를 결정할 수 있도록 needsRetetrahedralization 이벤트를 제공합니다. 예를 들어 5개의 새로운 씬을 추가로 로드하는 경우, 각 씬이 로드된 후 5번씩 데이터를 다시 사면체화하지 않으려 할 것입니다. 대신, 5개의 씬이 모두 로드되고 새 라이트 프로브 데이터가 모두 준비된 후에만 데이터를 다시 사면체화하려고 할 수 있습니다.

Unity가 오래된 사면체 테셀레이션을 사용하여 계산을 수행하는 경우 결과는 새로 로드되거나 언로드된 라이트 프로브를 고려하지 않습니다. 따라서 라이트 프로브가 게임 오브젝트에 예상대로 조명을 비출 수 없으며, LightProbes.CalculateInterpolatedLightAndOcclusionProbes() 또는 LightProbes.GetInterpolatedProbe() 호출은 예기치 않은 결과를 반환할 수 있습니다.

Unity가 사면체 테셀레이션을 강제로 업데이트하려면 LightProbes.Tetrahedralize 또는 LightProbes.TetrahedralizeAsync()를 호출하십시오. 이러한 함수를 사용하면 Unity가 현재 로드된 모든 씬에 대한 모든 라이트 프로브의 데이터로 사면체 테셀레이션을 업데이트합니다.

사면체 테셀레이션을 업데이트하는 데는 CPU가 많이 사용되며, CPU에 대한 영향은 라이트 프로브 수에 따라 증가합니다. 여러 개의 씬을 로드하거나 언로드할 때 사면체 테셀레이션의 업데이트로 인해 성능 저하가 발생한다면 특정한 양의 콘텐츠를 로드하거나 언로드할 때까지 또는 CPU 부하가 애플리케이션 성능에 영향을 주지 않을 때까지 업데이트를 미루는 것이 좋습니다.

라이트 프로브에서 광원을 사용하도록 게임 오브젝트 설정
런타임 시 라이트 프로브 이동