深度
就是该像素点在3d世界中距离摄像机的距离。离摄像机越远,则深度值(Z值)越大。
深度缓存
深度缓存中存储着准备要绘制在屏幕上的像素点的深度值。如果启用了深度缓冲区,在绘制每个像素之前,OpenGL会把该像素的深度值和深度缓存的深度值进行比较。如果新像素深度值<深度缓存深度值,则新像素值会取代原先的;反之,新像素值被遮挡,其颜色值和深度将被丢弃。(深度主要起的是比较的作用)
ZTest(深度测试)
开启后,它会与深度缓存区的深度值进行比较。通过比较则写入到颜色缓存区(这里会经历颜色混合Blend),不通过则丢弃
- ZTest Less:深度小于当前缓存则通过
- ZTest Greater:深度大于当前缓存则通过
- ZTest LEqual:深度小于等于当前缓存则通过
- ZTest GEqual:深度大于等于当前缓存则通过
- ZTest Equal:深度等于当前缓存则通过
- ZTest NotEqual:深度不等于当前缓存则通过
- ZTest Always:不论如何都通过
注:ZTest默认值是On(LEqual)
Blend
ZWrite(深度写入)
开启后,若通过ZTest,则会把自己的深度值写入到深度缓存区
- ZWrite On:写入深度
- ZWrite Off:不写入深度
注:ZWrite默认值是On
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Shader "Custom/Red" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { //ZWrite表示是否将深度写入GBuffer //ZTest表示是否将颜色写入GBuffer ZWrite On //与前面Alpha测试和模版测试相同,ZTest是要渲染的物体的深度和Gbuffer中的深度作比较,符合要求则渲染,否则不渲染 //Less | Greater | LEqual | GEqual | Equal | NotEqual | Always ZTest Greater Pass { Color(1,0,0,1) } } } |
效果图(与代码示例无关)
- 本文固定链接: http://www.u3d8.com/?p=2735
- 转载请注明: 网虫虫 在 u3d8.com 发表过