Rendering Order - Queue tag
Rendering Order - Queue tag
You can determine in which order your objects are drawn using the Queue tag. A Shader decides which render queue its objects belong to, this way any Transparent shaders make sure they are drawn after all opaque objects and so on.
There are four pre-defined render queues, but there can be more queues in between the predefined ones. The predefined queues are:
- Background - this render queue is rendered before any others. It is used for skyboxes and the like.
- Geometry (default) - this is used for most objects. Opaque geometry uses this queue.
- AlphaTest - alpha tested geometry uses this queue. It’s a separate queue from Geometry one since it’s more efficient to render alpha-tested objects after all solid ones are drawn.
- Transparent - this render queue is rendered after Geometry and AlphaTest, in back-to-front order. Anything alpha-blended (i.e. shaders that don’t write to depth buffer) should go here (glass, particle effects).
- Overlay - this render queue is meant for overlay effects. Anything rendered last should go here (e.g. lens flares).
Shader "Transparent Queue Example" {
SubShader {
Tags {"Queue" = "Transparent" }
Pass {
// rest of the shader body...
}
}
}
An example illustrating how to render something in the transparent queue
Geometry render queue optimizes the drawing order of the objects for best performance. All other render queues sort objects by distance, starting rendering from the furthest ones and ending with the closest ones.
For special uses in-between queues can be used. Internally each queue is represented by integer index;Background is 1000, Geometry is 2000, AlphaTest is 2450, Transparent is 3000 and Overlay is 4000. If a shader uses a queue like this:
Tags { "Queue" = "Geometry+1" }
This will make the object be rendered after all opaque objects, but before transparent objects, as render queue index will be 2001 (geometry plus one). This is useful in situations where you want some objects be always drawn between other sets of objects. For example, in most cases transparent water should be drawn after opaque objects but before transparent objects.
RenderType tag
RenderType tag categorizes shaders into several predefined groups, e.g. is is an opaque shader, or an alpha-tested shader etc. This is used by Shader Replacement and in some cases used to produce camera’s depth texture.
ForceNoShadowCasting tag
If ForceNoShadowCasting tag is given and has a value of “True”, then an object that is rendered using this subshader will never cast shadows. This is mostly useful when you are using shader replacement on transparent objects and you do not wont to inherit a shadow pass from another subshader.
IgnoreProjector tag
If IgnoreProjector tag is given and has a value of “True”, then an object that uses this shader will not be affected byProjectors. This is mostly useful on semitransparent objects, because there is no good way for Projectors to affect them.
See Also
Passes can be given Tags as well, see Pass Tags.
출처 : http://docs.unity3d.com/Manual/SL-SubshaderTags.html
========================================================================================================
ShaderLab syntax: SubShader Tags
서브 쉐이더는 그들이 렌더링 엔젠으로 렌더되어질 것이 어떻게 그리고 언제 기대될지를 말하는 태그를 사용합니다.
Syntax
- Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
- Value1를 가지는 TagName1 그리고Value2를 가지는 TagName2 를 지정합니다. 사용자는 사용자가 좋아하는 만큼 많은 태그를 가질 수 있습니다.
Details
태그는 기본적으로 키-값 쌍입니다. SubShader 안에서 태그는 렌더링 순서와 서브 쉐이더의 다른 파라미터를 결정하기 위해서 사용됩니다.
Rendering Order - Queue tag
사용자는 사용자의 물체가 Queue 태그를 사용해서 그려지는 순서를 결정할 수 있습니다. 쉐이더는 어떠한 투명한 쉐이더라도 그들이 모든 불투명한 물체들 이후에 그려지는 것을 확실시하는 방법으로 어떤 렌더 큐로 물체가 속하는지를 결정합니다.
4개의 미리 정의된 렌더 큐가 있으나 미리 정의된 것들 사이에는 더 많은 큐가 있을 수 있습니다. 미리 정의된 큐는 다음과 같습니다:
- Background - 이 렌더 큐는 다른 것들 전에 렌더됩니다. 스카이 박스와 비슷한 것들의 위해 사용됩니다.
- Geometry (default) - 대부분의 물체를 위해서 사용됩니다. 불투명한 기하가 이 큐를 사용합니다.
- Transparent - 이 렌더 큐는 기하 이후에 뒤에서 앞으로의 순서대로 그려집니다. 알파 블렌딩되는 어떠한 것(즉. 깊이 버퍼에 쓰여지지 않는 쉐이더)이라도 여기도 가야만 합니다 (유리, 입자 효과).
- Overlay - 이 렌더 큐는 기하 이후에 뒤에서 앞으로의 순서대로 그려집니다. 알파 블렌딩되는 어떠한 것(즉. 깊이 버퍼에 쓰여지지 않는 쉐이더)이라도 여기도 가야만 합니다 (유리, 입자 효과).
Shader "Transparent Queue Example" { SubShader { Tags {"Queue" = "Transparent" } Pass { // rest of the shader body... } } }
투명한 큐에서 렌더하는 법을 설명하는 예
Geometry 렌더 큐는 최고의 성능을 위해서 물체의 그려지는 순서를 최적화 합니다. 모든 다른 렌더 큐는 물체를 거리에 따라 정렬합니다. 먼 것부터 시작해서 가까운 순으로 그려집니다.
특별한 사용을 위해서 큐들 사이에서 사용될 수 있습니다. 내부적으로 각각의 큐는 정수 인덱스에 의해 표현됩니다; Background 은 1000, Geometry 는 2000, Transparent 도는 3000 그리고 오버레이는 4000. 쉐이더가 이것과 같은 큐를 사용한다면:
Tags { "Queue" = "Geometry+1" }
이것은 물체를 모든 불투명 물체 이후에 그러나 투명한 물체를 이전에 렌더 큐 인덱스가 2001일 것처럼 그려지도록 만들 것입니다. 이것은 사용자가 어떠한 물체들을 항상 물체들의 다른 세트들 사이에서 그려지도록 원하는 상황에 유용합니다. 예를 들어, 대부분의 경우에 투명한 물은 불투명한 물체 이후에 그러나 투명한 물체 이전에 그려져야 합니다.
IgnoreProjector tag
IgnoreProjector 태그가 주어지고 "True" 값을 가진다면 그 때 이런 쉐이더를 사용하는 물체는 Projectors에 의해 영향을 받지 않을 것입니다. Projectors가 그들에게 영향을 주는 좋은 방법이 없기 때문에 이것은 주로 반투명한 물체들 위에서 유용합니다.
See Also
패스에 태그 역시 주어질 수 있습니다. Pass Tags를 살펴보시기 바랍니다.
출처 : http://unitykoreawiki.com/index.php?n=KrMain.SL-SubshaderTags
'Unity3D > Shader' 카테고리의 다른 글
유니티 셰이더의 기초 (0) | 2014.06.28 |
---|---|
Unity Shader Reference (0) | 2014.06.24 |
UnityDiffuseLightmap.shader by jimfleming (0) | 2014.06.23 |
쉐이더 자료 많은 사이트.. (0) | 2014.04.03 |
Toon/Tf2Shader (0) | 2013.07.19 |