그림자 맵이란 무엇입니까? 그림자 맵은 텍셀이 간단한 질문에 답변하는 텍스처입니다. 텍셀이 나타내는 방향을 따라 빛으로부터 어느 거리에서 빛이 가려 집니까? 텍스처 좌표는 특정 그림자 매핑 알고리즘에 따라 다양한 투영 텍스처링 수단을 사용하여 생성됩니다.
프로젝션 텍스쳐링은 단순히 오브젝트를 텍스처의 공간으로 변형시키는 방법입니다. 섀도 매핑 알고리즘은 여러 가지 다른 종류의 변환을 사용합니다. 그러나 궁극적으로 이것은 한 공간에서 다른 공간으로의 변환입니다.
그림자 맵을 렌더링 할 때 지오메트리의 꼭짓점을 가져 와서 표준 렌더링 파이프 라인을 통해 변환합니다. 그러나 카메라 및 프로젝션 매트릭스는 뷰 위치 및 방향이 아닌 조명 위치 및 방향에 맞게 설계되었습니다.
그림자 맵을 사용하여 정방향 렌더링을 수행 할 때 정점을 뷰 카메라 공간으로 그리고 뷰 영사 매트릭스를 통해 변환하여 객체를 정상적으로 렌더링합니다. 그러나 라이트 카메라와 프로젝션 매트릭스를 통해 정점을 변환하여 버텍스 당 데이터로 프래그먼트 셰이더에 전달합니다. 투영 텍스처링을 통해 그림자 텍스처에 액세스합니다.
중요한 점은 다음과 같습니다. 투영 텍스처 액세스는 텍스처에서 액세스하는 위치가 표면의 해당 지점 (조각 쉐이더에서 렌더링하는 지점)과 조명 사이의 방향을 나타내도록 설계되었습니다. 따라서 렌더링되는 조각에 대해 오 클루 전이 발생하는 깊이를 나타내는 텍셀을 가져옵니다.
그러나이 파이프 라인 에는 특별한 것이 없습니다 . 꼭짓점 위치를 그림자 질감으로 변환 할 필요는 없으며 조각 쉐이더에 전달할 필요가 있습니다. 월드 스페이스 버텍스 위치를 프래그먼트 셰이더로 전달한 다음, 프래그먼트 셰이더가 그림자 텍스처의 투영 공간으로 변환하도록 할 수 있습니다. 물론, 동일한 텍스처 좌표를 얻을 수 있기 때문에 많은 성능을 버릴 것입니다. 그러나 수학적으로 실행 가능합니다.
실제로 뷰 카메라 공간 정점 위치를 프래그먼트 셰이더로 전달할 수 있습니다. 그런 다음 월드, 라이트 카메라 공간, 투영 그림자 텍스처 공간으로 변환 할 수 있습니다. 그림자 투영 알고리즘에 따라 모든 변환을 하나의 행렬로 넣을 수 있습니다. 다시 말하지만, 이전과 정확히 동일하게 제공되므로 앞으로 렌더링 할 때는 그럴 이유가 없습니다.
그러나 지연 렌더링에서는 뷰 카메라 공간 정점 위치 가 이미 있습니다 . 그렇지 않으면 조명을 할 수 없습니다. 버퍼에 쓰면서 많은 메모리와 대역폭을 낭비했거나 깊이 버퍼와 다양한 수학을 사용하여 똑똑하고 재 계산했습니다 (여기서는 들어 가지 않지만 온라인으로 다룹니다).
어느 쪽이든 카메라 공간 위치를 볼 수 있습니다. 위에서 언급 한 바와 같이, 우리는 매트릭스를 적용하여 뷰 카메라 공간에서 그림자 투영 텍스처 공간으로 변환 할 수 있습니다. 그러니까 ... 그런 다음 그림자 맵에 액세스하십시오.
문제 해결됨.