UnityShader基础整理

Unity渲染管线基础整理

渲染管线

管线流程图
管线图

Unity Shader中的Tags

Queue:

Tagvalue
Background1000
Geometry2000
AlphaTest2450
Transparent3000
Overlay4000

相同Queue的物体,unity会根据物体与摄像机的距离来决定渲染顺序

RenderType:

  • Opaque: 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。
  • Transparent:用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。
  • TransparentCutout: 蒙皮透明着色器(Transparent Cutout,两个通道的植被着色器)。
  • Background: Skybox shaders. 天空盒着色器。
  • Overlay: GUITexture, Halo, Flare shaders. 光晕着色器、闪光着色器。
  • TreeOpaque: terrain engine tree bark. 地形引擎中的树皮。
  • TreeTransparentCutout: terrain engine tree leaves. 地形引擎中的树叶。
  • TreeBillboard: terrain engine billboarded trees. 地形引擎中的广告牌树。
  • Grass: terrain engine grass. 地形引擎中的草。
  • GrassBillboard: terrain engine billboarded grass. 地形引擎何中的广告牌草。

IgnoreProjector
值为”true”时,表示不接受Projector组件的投影

ForceNoShadowCasting
值为”true”时,表示不接受阴影。

LightMode
对应PlayerSetting的或Camera中设置的RenderPath使用
Deferred Lighting 会准确如实地渲染光照和阴影,移动设备是不支持的。
Forward Rendering 是一种基于shader的渲染路径。它支持每个像素的光照及平行光(directional light)的实时阴影
Vertex Lit 最低光照精确度的渲染路径,不支持实时阴影

  • ForwardBase 只对1个有效灯光执行一次
  • ForwardAdd 对除了ForwardBase用的那个灯光外的所有有效灯光都执行1次,所以会被执行多次
  • Always 永远都渲染,但不处理光照
  • ShadowCaster 渲染产生阴影的物体
  • ShadowCollector 收集物体阴影到屏幕坐标Buff里

深度测试和深度缓冲区

ZBuff:深度缓冲

深度缓冲区

ZTest:深度测试

ZTest 可取值为:

  • Greater
  • GEqual
  • Less
  • LEqual
  • Equal
  • NotEqual
  • Always
  • Never
  • Off

默认是 LEqual,ZTest Off 等同于 ZTest Always。

ZWrite:深度写入

ZWrite 可取值为:On , Off,
默认是 On。

Alpha测试

AlphaTest

1.顶点或片元
clip (o.Alpha - _Cutoff);

2.固定管线

AlphaTest comparison AlphaValue

  • Greater
  • GEqual
  • Less
  • LEqual
  • Equal
  • NotEqual
  • Always
  • Never

混合

  • Blend SrcAlpha OneMinusSrcAlpha
    alpha blending
  • Blend One OneMinusSrcAlpha
    premultiplied alpha blending
  • Blend One One
    additive
  • Blend SrcAlpha One
    additive blending
  • Blend OneMinusDstColor One
    soft additive
  • Blend DstColor Zero
    multiplicative
  • Blend DstColor SrcColor
    2x multiplicative
  • Blend Zero SrcAlpha
    multiplicative blending for attenuation by the fragment’s alpha

片段着色器中计算出来的颜色称之为 “源颜色”,帧缓存中对应的像素已经存在的颜色叫做“目标颜色”

混合公式
float4 result = SrcFactor * fragment_output + DstFactor * pixel_color;

  • Zero
    0

  • One
    1

  • SrcColor
    源颜色

  • SrcAlpha
    源alpha

  • DstColor
    目标颜色

  • DstAlpha
    目标Alpha

  • OneMinusSrcColor
    (1-源颜色)

  • OneMinusSrcAlpha
    (1-源Alpha)

  • OneMinusDstColor
    (1-目标颜色)

  • OneMinusDstAlpha
    (1-目标Alpha)

模版测试和模版缓冲区

在渲染的过程中,可以用模版缓冲区中的一个值与一个预先设定的参考值相比较,根据比较的结果来决定是否更新相应的像素点的颜色值。这个比较的过程被称为模板测试。模板测试发生在透明度测试(alpha test)之后,深度测试(depth test)之前。如果模板测试通过,则相应的像素点更新,否则不更新

stencil{  
    Ref referenceValue  //参考值
    ReadMask  readMask  
    WriteMask writeMask  
    Comp comparisonFunction  
    Pass stencilOperation  
    Fail stencilOperation  
    ZFail stencilOperation  
}  

stencil完整语法

测试公式

if(referenceValue&readMask comparisonFunction stencilBufferValue&readMask)
通过像素
else
抛弃像素
  • comparisonFunction
comparisonFunction通过测试条件
Greaterbuffvalue > referenceValue
GEqualbuffvalue >= referenceValue
Lessbuffvalue < referenceValue
LEqualbuffvalue <= referenceValue
Equalbuffvalue == referenceValue
NotEqualbuffvalue != referenceValue
Always总是能
Never总不能

* stencilOperation

stencilOperation功能
Keepbuffvalue 不变
Zerobuffvalue 值变为0
Replacebuffvalue = referenceValue
IncrSatbuffvalue ++ 超过255不溢出
DecrSatbuffvalue – 超过0不溢出
Invertbuffvalue 按位取反
IncrWrapbuffvalue ++ 超过255溢出为0
DecrWrapbuffvalue – 超过0溢出为255
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值