ShaderLab syntax: Culling & Depth Testing
Culling은 뷰어로부터 방향이 빛나간 다각형들을 그리지 않는 최적화 방법입니다. 모든 다각형은 앞과 뒤쪽 사이드를 가집니다. Culling은 대부분의 물체가 닫혀 있다는 사실을 사용합니다; 사용자가 하나의 정육면체를 가진다면 사용자는 사용자로부터 방향이 빛나가 있는 면은 절대 보지 못할 것입니다 (그것의 앞에 항상 사용자를 마주보는 면이 있습니다). 그래서 사용자는 빛나가 있는 면들은 그릴 필요가 없습니다. 그러므로 그 용어를 사용합니다: Backface culling.
렌더링을 올바르게 보이게하는 다른 특성은 깊이 테스팅 입니다. 깊이 테스팅은 오직 닫혀진 표면 물체들만이 씬에서 그려지는 것을 확실하게 합니다.
Syntax
- Cull Back | Front | Off
- 다각형의 어떤 면이 그려지지 않을 지를 조절합니다.
Back 뷰어로 부터 벗어나 있는 다각형은 그리지 않습니다 (기본 설정).Front 뷰어를 향하는 다각형은 그리지 않습니다. 물체를 내부로 보낼 때 사용됩니다.Off culling을 비활성화 – 모든 면을 그립니다. 특별한 효과를 위해서 사용됩니다.
-
- ZWrite On | Off
- 이 물체로 부터 픽셀들이 깊이 버퍼로 쓰여지는지 여부를 결정 (기본값은On). 사용자가 고체의 물체를 그리고 있다면 이것을 on으로 합니다. 사용자가 반투명한 효과를 그리고 있다면 ZWrite Off 로 바꿉니다. 자세한 내용을 위해서는 아래의 내용을 읽어보시기 바랍니다.
- ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always
- 깊이 테스팅이 어떻게 실행되는지를 나타냅니다. 기본값은 LEqual (기존 물체로서 거리에서 또는 그것으로 부터 물체를 그립니다; 그것들 뒤에서 물체를 숨깁니다).
- Offset Factor , Units
- 사용자가 두 개의 파라미터로 깊이 오프셋을 정하는 것을 허락합니다. factor와 unitsFactor 는 최대의 Z 기울기를 다각형의 X 또는 Y에 따라 스케일 하고 units은 최소 깊이 버퍼 값을 스케일 합니다. 이것은 사용자가 다각형들이 같은 위치에 있음에도 불구하고 하나의 다각형이 다른 것 위에서 그려지도록 할 수 있습니다. 예를 들어 Offset 0, -1 은 다각형의 기울기를 무시하고 다각형을 카메라 가까이로 당깁니다. 반면 Offset -1, -1 은 방목 각도를 볼 때 심지어 더 가깝게 다각형을 끌어 당깁니다.
Examples
This object will render only the backfaces of an object:
Shader "Show Insides" { SubShader { Pass { Material { Diffuse (1,1,1,1) } Lighting On Cull Front } } }
그것을 하나의 정육면체에 적용하도록 하고 사용자가 그것 주위에서 선회할 때 기하학적으로 어떻게 잘못되는지 느끼는 것을 주의하시기 바랍니다. 이것은 사용자가 정육면체 내부의 부분만을 오직 보고 있기 때문입니다.
Debugging Normals
다음의 것은 더욱 흥미롭습니다; 첫째로 사용자는 보통의 정점 조명을 가지고 물체를 표현하고 나서 밝은 핑크색으로 뒤쪽 면들을 표현합니다. 이것은 사용자의 normals이 뒤집혀질 필요가 있는 어떤 곳에서는 하이라이팅 효과를 가집니다. 사용자가 어떠한 메쉬에 의해 물려있는 물리적으로 통제되는 물체를 본다면 이 쉐이더를 그들에게 지정하시기 바랍니다. 어떤 핑크색 부분이라도 보이다면 이러한 부분들은 그것을 터치하기에 충분히 불행한 어떠한 곳에서 당겨질 것입니다.
Here we go:
Shader "Reveal Backfaces" { Properties { _MainTex ("Base (RGB)", 2D) = "white" { } } SubShader { // Render the front-facing parts of the object. // We use a simple white material, and apply the main texture. Pass { Material { Diffuse (1,1,1,1) } Lighting On SetTexture [_MainTex] { Combine Primary * Texture } } // Now we render the back-facing triangles in the most // irritating color in the world: BRIGHT PINK! Pass { Color (1,0,1,1) Cull Front } } }
Glass Culling
Culling을 통제하는 것은 배면을 디버깅하는 것보다 더욱 유용합니다. 사용자가 투명한 물체를 가진다면 사용자는 꽤 자주 물체의 배면을 보여주기는 원합니다. 사용자가 어떠한 culling (Cull Off) 없이 그린다면 사용자가 앞쪽의 면의 어떤 부분에 겹쳐지는 뒤쪽의 면들을 가질 것입니다.
볼록한 물체(구, 정육면체, 자동차 앞유리)를 위해 작동할 간단한 쉐이더 입니다.
Shader "Simple Glass" { Properties { _Color ("Main Color", Color) = (1,1,1,0) _SpecColor ("Spec Color", Color) = (1,1,1,1) _Emission ("Emmisive Color", Color) = (0,0,0,0) _Shininess ("Shininess", Range (0.01, 1)) = 0.7 _MainTex ("Base (RGB)", 2D) = "white" { } } SubShader { // We use the material in many passes by defining them in the subshader. // Anything defined here becomes default values for all contained passes. Material { Diffuse [_Color] Ambient [_Color] Shininess [_Shininess] Specular [_SpecColor] Emission [_Emission] } Lighting On SeparateSpecular On // Set up alpha blending Blend SrcAlpha OneMinusSrcAlpha // Render the back facing parts of the object. // If the object is convex, these will always be further away // than the front-faces. Pass { Cull Front SetTexture [_MainTex] { Combine Primary * Texture } } // Render the parts of the object facing us. // If the object is convex, these will be closer than the // back-faces. Pass { Cull Back SetTexture [_MainTex] { Combine Primary * Texture } } } }
'TA > Unity Shader 레퍼런스' 카테고리의 다른 글
Fog (0) | 2012.07.18 |
---|---|
AlphaTest (0) | 2012.07.18 |
SetTexture (1) | 2012.07.17 |
Pass Tags (0) | 2012.07.17 |
Color, Material, Lighting (fixed funtion) (0) | 2012.07.12 |