https://cyangamedev.wordpress.com/2020/03/05/orthographic-depth/ << 이 사이트를 참조함 걍 천재같음 이녀석
목표는 Soft Particle Factor, 즉 게임 내의 입자가 다른 물체 뒤로 사라질 때 자연스럽게 보이도록 만드는 것이다.
Clip space Z 를 먼저 처리한다.
스크린 포지션은 지금 렌더링되고있는 픽셀의 공간좌표를 제공하는데
Raw는 보정되지 않은 공간좌표를 그대로 출력한다. 즉 픽셀의 xyz 값을 제공하는 것
거기서 우린 xy는 필요 없으니까 z만 가져다가 쓸 것이다.
다음으로 Surface Depth 를 처리한다.
커스텀 펑션에 쓰인 것은 다음과 같다.
아웃풋 : vector2
Out = float2(
UNITY_NEAR_CLIP_VALUE,
UNITY_RAW_FAR_CLIP_VALUE
);
무슨말이냐면
"UNITY_NEAR_CLIP_VALUE"와
"UNITY_RAW_FAR_CLIP_VALUE"라는 두 개의 내장된 Unity 값으로 벡터2를 생성하여 반환한다.
이것은 셰이더가 렌더링 할 때 카메라의 근접 및 원거리 클리핑 값에 접근해서 이 것을 기반으로 계산한다는 뜻이다.
그 다음 그 값을 Remap으로 매핑해서 0과 1사이의 값을 가지게끔 만들어준다.
그 다음 계산된 값을 뷰공간 단위로 변환해주는 것이다.
이것으로 살짝 그 뭐시냐 행렬처럼 오쏘에서 계산한걸 뷰 프리스텀으로 옮긴 것 처럼 거짓말을 쳐준다고 해야하나
암튼 그렇다
다음
이 과정에서는 Z 버퍼의 방향이 역전되었는지 여부를 처리한다.
그래픽스 시스템에서는 Z버퍼의 값이 더 높은 것이 카메라에 더 가까운지 여부를 처리하는데
그걸 살펴봐주는 노드라고 생각하면 된다.
Comparison 노드를 사용해 카메라의 Z 버퍼와 0 중에서 뭐가 더 큰지 계산한다.
만약 0보다 크면 보정안된 scene depth xyz 값이 들어가고
0보다 작으면 scene depth xyz 를 역전한 값을 집어넣는다.
이것도 동일하게 단위를 뷰공간으로 변환해주자.
그 다음 준비된 두 값의 깊이차이를 계산한다.
여기서 뭐 추가할거 추가하고 saturate으로 클램프 걸면 순수하게 구하고 싶은 뎁스가 보인다.
이제 이걸 알파에 넣어서 요리하면 되는것 ㅋ
'유니티 > Shader Study' 카테고리의 다른 글
유니티에서 HLSL으로 Voronoi custom 을 만들어 유용하게 쓰는 방법 (0) | 2024.01.21 |
---|---|
URP Shader Study #12 - 카메라 벡터를 활용한 rim light의 적용 (0) | 2023.12.13 |
URP Shader Study #11 - Vertex shader를 활용한 mesh animation 구현 (2) | 2023.12.06 |
URP Shader Study #10 - Flow map (0) | 2023.12.04 |
URP Shader Study #9 - UV 정보를 픽셀 셰이더에 출력, Texture Splatting (0) | 2023.12.03 |