그림자가 카메라로부터 멀리 떨어져 있으면 깜박일 수 있습니다. 자세한 내용은 뷰 절두체 이해를 참조하십시오.
그림자가 월드 공간 원점보다 카메라에 더 가까운 경우 카메라 관련 컬링을 활성화합니다. Unity는 월드 공간 원점 대신 카메라를 그림자 계산의 상대적 위치로 사용하여 깜박임을 줄입니다.
카메라 관련 컬링을 활성화하려면 다음 단계를 따르십시오.
실시간 그림자를 렌더링하면 성능에 큰 영향을 미칩니다. 그림자를 드리울 수 있는 모든 게임 오브젝트는 먼저 섀도우 맵으로 렌더링됩니다. 그런 다음 해당 맵을 사용하여 그림자를 받을 수 있는 오브젝트를 렌더링합니다.
소프트 섀도우는 하드 섀도우보다 렌더링하는 데 리소스가 더 많이 사용되지만, GPU에만 영향을 미치고 추가 CPU 작업은 많이 유발하지 않습니다.
복잡한 지오메트리에 대한 실시간 그림자를 렌더링하기에 비용이 너무 많이 드는 경우 낮은__ LOD__디테일 수준(LOD)을 참조하십시오.
See in Glossary 메시나 기본을 사용하여 그림자를 드리우는 방법도 좋습니다.
이 작업이 리소스를 너무 많이 소모하는 경우 캐릭터 아래의 간단한 메시나 쿼드에 적용된 흐릿한 텍스처를 사용하여 그림자를 진짜처럼 보이게 하거나 커스텀 셰이더가 있는 블롭 섀도우를 만들 수 있습니다.
광원이 직접 비춘 표면은 종종 그림자에 부분적으로 표시될 수 있습니다. 섀도우 맵에서 지정된 거리에 정확하게 존재해야 하는 픽셀이 종종 멀리 있는 것으로 간주되기 때문입니다(섀도우 맵에 저해상도 이미지나 섀도우 필터링을 사용한 결과). 그 결과 비춰질 때 그림자에서 임의 패턴의 픽셀들이 나타나며 ’섀도우 애크니’로 알려진 시각적 효과가 발생합니다.
그림자 바이어스 값을 조정하면 섀도우 애크니, 그림자 분리(피터 패닝이라고도 함), 빛 번짐 효과, 셀프 섀도잉과 같은 그림자 결함을 줄이거나 제거할 수 있습니다.
빌트인 렌더 파이프라인에서는 그림자가 활성화된 경우 광원 인스펙터 창의 Bias 및 Normal Bias 프로퍼티로 이 값을 설정할 수 있습니다.
그림자를 드리우는 게임 오브젝트 근처의 영역이 가끔 잘못 조명을 받기 때문에 Bias 값을 너무 높게 설정하지 마십시오. 너무 높게 설정하면 그림자가 연결 해제되어 게임 오브젝트가 지면 위로 날아가는 것처럼 보입니다.
이와 유사하게, Normal Bias 값이 너무 높게 설정되면 게임 오브젝트의 그림자가 매우 좁게 표시됩니다.
경우에 따라 Normal Bias 로 인해 근처 지오메트리의 광원이 그림자가 드리워져야 하는 영역으로 번지는 빛 번짐 효과가 원치 않게 발생할 수 있습니다. 잠재적인 해결 방법은 게임 오브젝트의 Mesh Renderer를 열고 Cast Shadows 프로퍼티를 Two Sided 로 변경하는 것입니다. 이 방법은 도움이 될 수도 있지만 더 많은 리소스가 필요하고, 씬을 렌더링할 때 성능 오버헤드가 증가할 수 있습니다.
원하지 않는 효과가 발생하지 않도록 하려면 광원용 바이어스 값을 미세 조정해야 합니다. 일반적으로 계산하기보다 눈대중으로 적절한 값을 찾는 편이 더 수월합니다.
섀도우 애크니를 방지하기 위해 Unity는 섀도우 팬케이킹 이라는 기법을 사용하고 있습니다. 이 기법은 광원의 방향과 나란히 섀도우 맵을 렌더링할 때 사용되는 광원 공백의 범위를 줄인다는 개념에 바탕을 두고 있습니다. 이렇게 하면 섀도우 맵의 정밀도가 높아져 섀도우 애크니가 감소합니다.
위 다이어그램에서:
섀도우 캐스터를 최적화된 공백(버텍스 셰이더 내)의 근거리 클립 평면에 고정시켜야 합니다. 이 방법은 일반적으로 효과적이지만, 근거리 클립 평면을 지나는 매우 큰 삼각형에 결함이 생길 수 있습니다.
이 사례에서는 파란색 삼각형의 버텍스 하나만 근거리 클립 평면 뒤에 있고 이 평면에 고정됩니다. 하지만 이렇게 하면 삼각형 모양이 변하여 올바르지 않은 그림자가 생길 수 있습니다.
이 문제를 피하기 위해 Quality 창에서 Shadow Near Plane Offset 프로퍼티를 미세 조정할 수 있습니다. 이렇게 하면 근거리 클립 평면이 뒤로 당겨집니다. 하지만 이 값을 매우 높게 설정하면 섀도우 맵이 광원 방향에서 처리해야 하는 범위가 증가하기 때문에 결국에는 섀도우 애크니가 발생합니다. 그 대신 그림자를 드리우는 문제가 있는 삼각형을 바둑판 모양으로 만들 수도 있습니다.
하나 이상의 오브젝트가 그림자를 캐스트하지 않는다면 다음 사항을 확인해야 합니다.
실시간 그림자는 Quality 창에서 완전히 비활성화할 수 있습니다. 정확한 품질 레벨이 활성화되었고 해당 설정에서 그림자가 켜졌는지 확인해야 합니다.
씬의 모든 메시 렌더러는 Receive Shadows 및 _Cast Shadows_를 올바르게 설정해야 합니다. 둘 다 기본적으로 활성화되지만 의도치 않게 비활성화되지 않았는지 확인하십시오.
불투명한 오브젝트만 그림자를 드리우고 받으므로 빌트인 투명 또는 파티클 셰이더를 사용하는 오브젝트는 그림자를 드리우거나 받지 않습니다. 울타리, 초목 등과 같이 ‘간극’이 있는 오브젝트에는 투명 컷아웃 셰이더를 대신 사용할 수 있습니다. 커스텀 셰이더는 픽셀 조명을 받으며 지오메트리 렌더 대기열을 사용해야 합니다.
VertexLit 셰이더를 사용하는 오브젝트는 그림자를 받을 수 없지만 드리울 수는 있습니다.
Unity는 ‘언릿’ 유형의 셰이더가 포함된 머티리얼이 있는 게임 오브젝트에 대해서는 그림자를 계산하지 않습니다. Unity는 조명을 지원하는 셰이더가 포함된 머티리얼의 그림자만 계산할 수 있습니다.
빌트인 렌더 파이프라인에서 포워드 렌더링 경로를 사용하는 경우(특히 4.x 버전 이후의 Unity 빌트인 셰이더를 사용하는 경우), 일부 셰이더는 가장 밝은 방향 광원만 그림자를 드리울 수 있도록 허용합니다. 그림자를 드리우는 광원을 두 개 이상 사용하려면 대신 디퍼드 셰이딩 렌더링 경로를 사용해야 합니다. fullforwardshadows 표면 셰이더 지시문을 사용하여 자체 셰이더가 ’전체 그림자’를 지원하도록 설정할 수 있습니다.