RenderQueue

반응형

유니티에서는 Queue를 설정해서 오브젝트를 그릴 순서를 조절할 수 있다.

셰이더는 오브젝트가 속하는 render queue를 결정하며, 이 방법에 의해 어떠한

반투명 셰이더들도 불투명 오브젝트들 이후에 그려지게 보장한다.


유니티 도큐에 보면 아래와 같이 되어있다.


Background : 가장 먼저 그려짐

Geometry : 불투명(Opaque) 물체

AlphaTest : 알파테스트 물체

GeometryLast : 불투명(Opaque)에서 가장 나중에 그려짐.

Transparent : Geometry와 AlphaTest 이후에 그려짐. 순서는 뒤에서부터 앞으로.

Overlay : 중첩되는 효과.


큐 사이에서 좀 더 특별하게 사용할 수도 있다. 내부적으로 각 큐들은 정수 인덱스로 표시된다.

Background는 1000, Geometry는 2000, AlphaTest는 2450, Transparent는 3000, 그리고 Overlay는 4000이다.

만약 셰이더에서 쓸려면 아래와 같이 하면 된다.

Tags { "Queue" = "Geometry+1"}

이렇게 하면 이 오브젝트는 모든 불투명(opaque) 오브젝트들이 그려지고 나서, 그리고 반투명 오브젝트들 이전에

그려지며, render queue 인덱스는 2001이 될 것이다.(geometry +1)

이 기능은 특정 오브젝트가 항상 다른 오브젝트들 사이에 그려져야 할 때 유용하다.

예를 들자면, 대부분의 경우 반투명 물은 불투명 오브젝트보다 나중에, 반투명 물체이전에 그려져야 한다.

2500번까지는(Geometry+500) "반투명(Opaque)"로 간주되며 최상의 퍼포먼스를 위해 객체의 그리기 순서를 최적화 한다.

더 높은 큐 값은 "불투명(Transparent) 오브젝트"로 간주되며 거리에 따라 정렬된다.

스카이박스는 모든 불투명(Opaque)와 모든 반투명(Transparent) 사이에 그려진다.


대충 내용은 위와 같고 이를 실제로 사용하는 방법을 좀 보자.

우선 머티리얼을 하나 만들면 머티리얼에 아래와 같은 값이 있다.

예전부터 있던건지는 잘 모르겠지만 큐브와 스피어를 몇개 만들어서 테스트를 해 봤다.

Shader는 그냥 유니티가 제공하는 Unlit Color을 사용했다.


다 같은 셰이더를 사용하고 있다.

처음 만들면 Render Queue는 "From Shader"로 되어있고 여기에 내가 수정하면(예를들어 2050) "Custom"으로 자동으로

바뀌며, 다시 원래값인 2000으로 바꾸면 "Geometry"가 된다.

값을 2050로 바꿔서 "Custom" 으로 바꾼 상태에서 "Geometry"나  "From Shader"로 바꾸면 다시 값이 2000이 된다.


못찾은 건지 인스펙터창에서 이 옵션에 대한 내용은 없어서... 적당히 정리해 보자면

From Shader : shader 파일에 설정한 값을 우선으로 한다. 

  예를들어 "RenderType"="Opaque" "Queue" = "Geometry+100"의 경우 인스펙터에서 From Shader라면 

  자동으로 2100이 된다.

Geometry : Shader에 설정된 값을 무시하고 그냥 Geometry 값인 2000 설정한다.

AlphaTest : Shader에 설정된 값을 무시하고 그냥 AlphaTest 값인 2450으로 설정한다.

Transparent : Shader에 설정된 값을 무시하고 그냥 Transparent값인 3000으로 설정한다. 

Custom : 0~5000까지의 값을 지원한다.


테스트를 해 보자.

위와같이 네가지를 설정해 주었으며 From Shader는 위에서 설정한 대로 "Geometry+100" 이다.

렌더링을 하면 순서는 아래와 같다.

위에 두개는 불투명으로 해서 순서대로 그려지고 뒤에 두개는 반투명으로 해서 두개가 그려진다.


결국은 셰이더에 작업을 잘 해도 디자이너분이 저 값을 인스펙터에서 건드는 순간 셰이더에서 설정한 값 보다

인스펙터값을 우선하게 된다.


Reference Link

- unity, RenderQueue

- unity, material.renderQueue

- unity, ShaderLab: SubShader Tag

-

'Unity > Unity Study' 카테고리의 다른 글

ARB_precision_hint_fastest  (0) 2017.07.10
The Magic Of Material Property Blocks  (0) 2017.06.23
There are inconsistent line endings  (2) 2017.06.20
assetbundle building, change file  (0) 2017.06.03
메모리 프로파일러  (0) 2017.05.19
TAGS.

Comments