Shaderlab:Culling & Depth Testing

Shaderlab:剔除&深度测试

在这里插入图片描述

剔除是一种优化,即不会渲染多变体上远离观察者的面。所有的多面体都有中正面和反面。剔除使用了大多数的对象是闭合的这一事实:如果有一个正方体,你永远都看不到距离你最远的面。根据这一事实,所以不必绘制这样的面。这就是背面剔除的由来。
还有一种使物体看起来正确渲染的方式是深度测试,深度测试保证了只有最近的表面会被绘制。

语法
Culling

Cull Back | Front | Off
控制多面体的哪一面将被剔除

  • Back 不会渲染远离观察者的面(默认)
  • Front 将不渲染朝向观察者的面。用于将物体从内到外翻转。
  • Off 关闭剔除,意味着所有的面都会被绘制。用于特效。
ZWrite

ZWrite On|Off
控制来自于对象的像素点是否被写入深度测试(默认是打开)。如果绘制固态物体,打开。如果绘制半透明效果,请关闭。更多细节阅读下文。

ZTest

ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always
ZTest说明深度测试是如何执行的。默认是LEqual(以现有对象的距离来绘制对象,隐藏他们后面的对象)

Offset

Offset Factor, Units
允许使用两个参数(Factor和Units)来指定深度偏移。Factor相对于X或Y缩放Z的最大斜率,Units用于缩放最小可缩放深度缓存值。这样可以强制优先绘制某一个多面体,即便是有一个多面体和它在同一位置。举个例子:Offset 0,-1可以忽略多面体的斜率(slope)将多面体拉近到摄像机,而Offset -1,-1将会将多边形拉的更近,即便当他们看起来是掠角

例子

下面的例子将只渲染物体的背面
Shader "Show Insides" { SubShader { Pass { Material { Diffuse (1,1,1,1) } Lighting On Cull Front } } }
在这里插入图片描述
尝试应用在Cube上面,请注意当围着Cube转的时候会发现渲染方式是错误的。因为这只能看到Cube内部。

Transparent shader with depth writes

通常来说半透明的shader不会写入到深度缓存中的。但是这样做却有可能导致绘制顺序问题,尤其是在一些复杂的非凸网格上面。如果你想要类似淡入/淡出网格,在渲染透明之前将其填充到深度缓存中会很有用。半透明对象,左面标准透明/半反射,右面是将缓存写入到深度测试中

Shader "Transparent/Diffuse ZWrite" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {} } SubShader { Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} LOD 200 Pass { ZWrite On ColorMask 0 } UsePass "Transparent/Diffuse/FORWARD" } Fallback "Transparent/VertexLit" }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值