*아직 공부하는 중임*
1. Stencil Buffer
stencil Buffer 라는 것이 있다.
이걸 쓰면 포토샵의 마스크처럼 각도에 따라 또는 오브젝트에 가려지는 부분만 렌더링 할 수 있게 함
즉, 마스크 렌더러임
stencil
{
ref 20
comp Always
pass replace
}
1)Ref
-버퍼에 기록하기 위해 서로 비교하는 값(Comp이 Always가 아닌 경우)
-0~255까지 정수타입
-Pass, Fail , ZFail로 대체될 값임
2)Comp
-Buffer에 있는 Ref값을 현재 Contents와 비교할 때 사용 ( 디폴트는 Always)
3)Pass
-Stencil 테스트와 Depth테스트를 통과한다면 Buffer의 Contents를 어떻게 할 것인지 지정 ( 디폴트는 Keep )
4)Fail
-테스트가 실패한다면 Buffer의 Contents를 어떻게 할 것인지 지정 (디폴트는 Keep)
5)ZFail
-Stencil은 통과했는데 Depth테스트는 통과 못했을 경우, Buffer의 Contents를 어떻게 할 것인지 지정 ( 디폴트는 Keep )
comp 뒤에 쓰는 비교함수
pass 뒤에 쓰는 함수
2. Culling & Depth Test
1) Culling
- Back : 안보이는 뒷쪽이 렌더링 안됨 (디폴트)
- Front : 사람이 보는 앞쪽을 렌더링 하지 않음 (오브젝트의 안팎을 뒤집을 때 사용)
- off : 컬링 비활성화, 모든 면을 렌더링함 (특수한 효과에만 사용)
2) ZWrite
-오브젝트의 픽셀이 Depth Buffer에 작성될건지 결정함 (기본은 On)
-반투명 효과를 기대하는 경우 off로 설정
3) ZTest
- Depth테스트를 수행할 방법
- 이 값에 따라서 벽뒤의 물체가 다른 색상이나 반투명으로 렌더링 되는게 안됨 ( Less로 해보면 안됨 )
- Less, Greater, LEqual, GEqual, Equal, NotEqual, Always (기본값은 LEqual)
3. Pass (위의 stencil 안의 그 pass 아님!)
stencil buffer 를 제대로 구현하려면 pass가 최소 2번은 거쳐야 한다.
pass란 쉐이더의 렌더링이 한번만 처리되는 구문 단위
SubShader에서 여러개의 Pass를 작성할 수 있다.
유니티에는 총 3종류가 있다고 함
1. Normal Pass : Pass 라고 작성됨, 일반적인 렌더링에 사용
2. Use Pass : 다른 shader 에 작성된 Pass 를 가져와서 사용
3. Grab Pass : Render To Texture(화면 캡쳐라고 함..), 특수한 Pass
여기 맨 밑에 UsePass랑 GrabPass링크 있음
4. Blending
모든 쉐이더가 렌더링 되고, 텍스쳐가 적용되고 픽셀이 화면에 작성이 되는데
이 픽셀들이 기존 픽셀에 결합되는 방식을 설정하는 것을 Blending이라고 함
위의 세팅으로 이 쉐이더에 어떤 Blend를 적용할 것인지 선택할 수 있음
아래 회색 네모의 내용은 가장 흔하게 사용하는 조합과 용도라고 함
렌더링되는 오브젝트가 순서가 섞이는 이슈가 있어서
렌더링 순서를 강제로 정해줌(배열처럼 실행될 인덱스를 정해줌)
Tags { "Queue" = "Transparent" }
Tags { "Queue" = "Geometry+1" }
이렇게 Queue 태그를 사용하면 오브젝트 드로우 처리 순서를 설정할 수 있다고 함
이런 방식으로 불투명한 오브젝트 먼저 처리 -> 투명한 오브젝트 처리가 가능
*우선순위
1. Background : 가장 먼저 렌더링 됨 , 배경에 배치해야할 항목에 사용 - 1000
2. Geometry : default, 대부분 오브젝트에 사용 , 불투명 오브젝트가 사용 - 2000
3. AlphaTest : 알파테스트 된 Geometry가 사용 -2450
4. Transparent : AlphaTest 렌더링 후에 뒤에서 앞의 순서로 렌더링 된다고 함
뎁스 버퍼에 기록되지 않는 쉐이더, 유리, 파티클 효과 등 - 3000
5. Overlay : 마지막에 렌더링 되는 모든 항복 (렌즈 플레어 등) - 4000
Tags { "Queue" = "Geometry+1" }
같은 경우는 인덱스가 2001이 되므로 모든 불투명 오브젝트가 렌더링 되고 난 뒤 투명 오브젝트 보다 먼저 렌더링 됨
- 불투명 오브젝트 렌더링 -> Geometry+1 렌더링 -> 투명 오브젝트 렌더링
'팀프로젝트 > R&D' 카테고리의 다른 글
2020.06.28. Shader_오브젝트 뒤에 가려진 물체 렌더링 (0) | 2020.06.28 |
---|---|
2020.06.24. 스크롤 뷰 전환 버튼 UI (0) | 2020.06.24 |
2020.06.15. 조명 + 낮, 밤 Cycle 만들기 (0) | 2020.06.16 |
2020.06.14. Emission 모바일에 적용시키기 (0) | 2020.06.14 |
2020.06.14. 낮,밤 / 조명 (버튼) - Emission 이 쉐이더 눌러야 적용되던 것 해결 (0) | 2020.06.14 |