본문 바로가기
Computer Graphics/ShaderLab, HLSL

[ShaderLab] 2Pass AlphaBlending

by 진현개발일기 2024. 3. 6.

■ 응용

이전에 배운 2Pass와 AlphaBlending을 응용한 것이다.

만약 반투명처리를 한다면 캐릭터 내부에 뼈라든지 관절이라든지 다 보일 것이다. 의도한 것이 아니라면 원래 보통 생각하는 반투명은 피부만 보이는 상태에서 알파값이 0.5가 되는 것이다.

 

▼ 그냥 처리한다면 아래와 같이 몸통 내부가 다 보인다.

 

 

[해결방법]

이를 해결하기 위해서는 Two Pass 기법과 Alpha Blending 기법을 혼용해야한다.

 

RenderType과 Queue는 그대로 Transparent로 지정해주고

첫번째로 그려줄 1st Pass는 'zwrite on''ColorMask 0'을 설정해준다.

 

zwrite on은 뎁스 버퍼의 콘텐츠를 사용하겠다는 것인데 쉽게 말해 앞서 배운 Z Buffering을 사용하겠다는 뜻이다.

하지만 ColorMask 0를 통해 렌더링하지 않겠다는 표시를 해주는 것.

 

즉, 첫번째 패스에서는 로봇의 신체 표면들의 인덱스 값들이 zbuffer에 등록되어 몸 내부에 있는 물체들을 가리겠지만 ColorMask 0를 통해 신체 모든 부위를 렌더링해주지 않는다.

 

대신에 다시 한 번 더 그릴때 [2nd Pass] zwrite 를 off해주고 렌더링을 해준다면 앞서 zbuffering을 통해 가려진 몸속 내부는 여전히 보이지 않게 되지만 외부에서 zbuffer를 하지않고 반투명하게 그려준다면 로봇의 피부(?)들만 그려지게 되는 원리이다.

 

▼ Two Pass Alpha Blending 적용

 

이를 통해 앞서 만들었던 홀로그램의 문제를 해결할 수 있게 되었다.

 

(좌) 수정 후, (우) 수정 전

 

728x90

'Computer Graphics > ShaderLab, HLSL' 카테고리의 다른 글

[ShaderLab] Matcap  (0) 2024.03.10
[ShaderLab] Dissolve  (0) 2024.03.06
[ShaderLab] 알파 블렌딩 (Alpha Blending)  (0) 2024.03.06
[ShaderLab] Cubemap (with MaskMap)  (0) 2024.03.05
[ShaderLab] Diffuse Warping  (0) 2024.03.05