그림자 매핑은 깊이 버퍼를 사용하여 그림자를 그려야하는 위치를 계산합니다.
내 문제는 빌보드 트리와 같이 그림자를 드리 우기 위해 반투명 질감 쿼드를 원한다는 것입니다. 심도 값은 보이는 부분뿐만 아니라 모든 쿼드에 걸쳐 설정되므로 쿼드 섀도우를 투사합니다.
섀도 매핑을 사용하여 투명 쿼드를 올바른 그림자로 투사하려면 어떻게해야합니까?
그림자 매핑은 깊이 버퍼를 사용하여 그림자를 그려야하는 위치를 계산합니다.
내 문제는 빌보드 트리와 같이 그림자를 드리 우기 위해 반투명 질감 쿼드를 원한다는 것입니다. 심도 값은 보이는 부분뿐만 아니라 모든 쿼드에 걸쳐 설정되므로 쿼드 섀도우를 투사합니다.
섀도 매핑을 사용하여 투명 쿼드를 올바른 그림자로 투사하려면 어떻게해야합니까?
답변:
문제는 1 비트 알파로 렌더링을 해결합니다. 이는 렌더링되지 않은 소스 텍스처의 알파 (대부분 0.5)를 지정한다는 의미입니다.
빛으로부터 깊이를 저장하고 명령을 사용하려면 자신의 셰이더를 작성해야합니다 discard
. 폐기는 hlsl, glsl 및 cg에도 있습니다. 픽셀 / 조각 셰이더에만 존재하며 렌더링에서 backBuffer 및 z- 버퍼로 현재 조각을 버립니다.
if (texSample.a < 0.5)
discard;
장점은 2 차 패스 렌더링을 변경할 필요가없고 빛의 깊이 만 렌더링한다는 것입니다. 또한 나는 그것이 작동한다는 것을 증명했습니다.
여러 투명 오브젝트에 대해 올바른 그림자를 렌더링하려면 깊이 필링을 사용하여 렌더링 된 깊이 및 불투명도 정보와 함께 여러 깊이 텍스처를 사용해야합니다. 연기, 머리카락 등의 경우에는 불투명도 또는 푸리에 불투명도 맵이 가장 좋습니다 (주로 푸리에 불투명도 맵 권장)
편집 : 방금 크레딧을 추가하는 것을 잊었다는 것을 깨달았습니다. 언제나 그렇듯이 트리 모델은 loopix 프로젝트 에서 가져온 것으로, 일부 독점 성, 하나의 질감 및 무료 식생 모델을 찾고 있다면 아주 좋습니다.
프로그래밍 가능한 파이프 라인을 사용하면 @notabene의 지시에 따라야합니다. 그러나 셰이더를 작성하지 않고도 고정 파이프 라인으로 쉽게 작업 할 수 있습니다. OpenGL에서 glAlphaFunc는 당신이 원하는 것입니다. 예를 들면 다음과 같습니다.
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5f);