섀도 매핑 및 투명 쿼드


10

그림자 매핑은 깊이 버퍼를 사용하여 그림자를 그려야하는 위치를 계산합니다.

내 문제는 빌보드 트리와 같이 그림자를 드리 우기 위해 반투명 질감 쿼드를 원한다는 것입니다. 심도 값은 보이는 부분뿐만 아니라 모든 쿼드에 걸쳐 설정되므로 쿼드 섀도우를 투사합니다.

섀도 매핑을 사용하여 투명 쿼드를 올바른 그림자로 투사하려면 어떻게해야합니까?

답변:


15

문제는 1 비트 알파로 렌더링을 해결합니다. 이는 렌더링되지 않은 소스 텍스처의 알파 (대부분 0.5)를 지정한다는 의미입니다.

빛으로부터 깊이를 저장하고 명령을 사용하려면 자신의 셰이더를 작성해야합니다 discard. 폐기는 hlsl, glsl 및 cg에도 있습니다. 픽셀 / 조각 셰이더에만 존재하며 렌더링에서 backBuffer 및 z- 버퍼로 현재 조각을 버립니다.

if (texSample.a < 0.5)
   discard;

장점은 2 차 패스 렌더링을 변경할 필요가없고 빛의 깊이 만 렌더링한다는 것입니다. 또한 나는 그것이 작동한다는 것을 증명했습니다. 1 비트 알파

여러 투명 오브젝트에 대해 올바른 그림자를 렌더링하려면 깊이 필링을 사용하여 렌더링 된 깊이 및 불투명도 정보와 함께 여러 깊이 텍스처를 사용해야합니다. 연기, 머리카락 등의 경우에는 불투명도 또는 푸리에 불투명도 맵이 가장 좋습니다 (주로 푸리에 불투명도 맵 권장)

편집 : 방금 크레딧을 추가하는 것을 잊었다는 것을 깨달았습니다. 언제나 그렇듯이 트리 모델은 loopix 프로젝트 에서 가져온 것으로, 일부 독점 성, 하나의 질감 및 무료 식생 모델을 찾고 있다면 아주 좋습니다.


6

프로그래밍 가능한 파이프 라인을 사용하면 @notabene의 지시에 따라야합니다. 그러나 셰이더를 작성하지 않고도 고정 파이프 라인으로 쉽게 작업 할 수 있습니다. OpenGL에서 glAlphaFunc는 당신이 원하는 것입니다. 예를 들면 다음과 같습니다.

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5f);

1
산뜻한. 나는 고정 파이프 라인이 싫어. 그래서 저는 셰이더없이이 일을 할 수있는 모든 사람들을 정말 존경합니다. +1입니다.
Notabene

@Notabene 더 이상 사용되지 않는 기술을 사용하는 것에 대해 감탄할 것이 없습니다.
Tara

2

섀도 맵 생성을위한 커스텀 셰이더가 필요하므로 픽셀 / 조각의 투명도가 지정한 트레스 홀드보다 클 때 유효한 오클 루더를 출력 할 수 있습니다. 이 깊이, 깊이 맵은 다각형이 아닌 픽셀마다 생성됩니다.


-1

내가 생각할 수있는 유일한 방법은 별도의 깊이 맵 텍스처를 만들고 트리를 렌더링하여 알파! = 0 인 깊이에 대해 출력하고 그렇지 않으면 depth = 1을 출력 한 다음이 그림자 맵 텍스처를 장면 그림자 맵 텍스처와 결합하는 것입니다. 충분히 간단해야합니다. 두 값 중 가장 작은 값을 최종 깊이 맵으로 설정하면됩니다.

그래도 혼합 순서는 해결되지 않습니다. 알파 텍스처 뒤의 깊이를 출력하면 텍스처로 쿼드를 렌더링 할 때 재정의되므로이 효과가 작동하려면 각 쿼드를 개별적으로 깊이 맵 텍스처로 렌더링해야합니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.