UnityShader常用设置标签和命令

来源:互联网 发布:济南seo大标网络 编辑:程序博客网 时间:2024/06/16 00:40

这篇帖子纯粹是为了记录一下最近的学习内容。并不会讲解什么内容。


关于多个Pass执行的疑惑

在没有设置标签Tag(如"LightMode"(暂时不知道还有没有其他的))的情况下,全部的Pass都会执行。如果有设置Tag内容,比如"LightMode"=“ForwardBase”,那么就会根据条件进行选择性的执行了。至于怎么选择的,网上帖子很多


关于半透明材质的常用设置

Tags{ "Queue" = "Transparent" "IgnoreProject" = "False"  "RenderType" = "Transparent" }LOD 100Pass{ZWrite offBlend SrcAlpha OneMinusSrcAlpha//......}

要实现半透明,就要用透明度混合(Blend)至于要怎么混合,网上讲解的帖子也很多


关于透明度检测

“Queue”="AlphaTest"

调用clip函数对像素进行条件剔除,clip的参数如果有任意分量为负数,该像素就会被舍弃。

void clip(float4 color){if (any(col<0)){discard;}}
 

discard命令用来舍弃当前像素。


关于一些常用命令设置

Cull

剔除方式,支持的参数有 off(不剔除,进行双面渲染)、back(默认值,剔除背面)、Front(剔除正面),有的帖子解释正面和背面的时候说是面向背向摄像机的面,这个说法是不对的,正面和背面是相对于法线方向而言的。


ColorMask

直接翻译为颜色遮罩,意思是允许输出的颜色通道,可选参数为RGBA四个通道的任意单个通道或多个通道的组合已经0,设置为ColorMask 0时,不输出任何颜色


ZTest

是否启用深度测试,设置的值为测试的方式,如果测试通过,就会将色彩信息写入缓冲区,Greater(>)/GEqual(>=)/Less(<)/LEqual(默认,<=)/Equal(==)/NotEqual(!=)/Always/Never/Off(Always)


ZWrite

是否写入深度缓冲,参数on(默认值)或off


BlendOp

混合模式

add((默认)S+D)/sub(S-D)/revsub(D-S)/min(取各分量的最小值)/max(取各分量的最大值)

S为片元着色器输出值,D为缓冲区的值


Blend

执行混合模式的参数(也可以是OFF)

one/zero/SrcColor/SrcAlpha/DstColor/DstAlpha/OneMinusSrcColor/OneMinusSrcAlpha/OneMinusDstColor/OneMinusDstAlpha

(Src和Dst为 Source 和 Destination  的缩写)











0 0
原创粉丝点击