博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity Shader 基础(1): RenderType & ReplacementShader
阅读量:7081 次
发布时间:2019-06-28

本文共 2925 字,大约阅读时间需要 9 分钟。

很多Shader中都会定义RenderType这个类型,但是一直搞不明白到底是干嘛的,官方文档是这样结解释的:

Rendering with Replaced Shaders

shader通过camera中 Camera.RenderWithShader 和 Camera.SetReplacementShader实现替换功能,这两个方法都接受两个参数:Shader和replacementTag ,根据情况:

  • replacementTag 为空,场景中所有物体都会使用replacement shader进行渲染
  • replacementTag 不为空,如果物体不存在tag则不进行渲染。
  • replacementTag 不为空,如果物体shgader中存在、与之placement shader中相同的tag',则使用placement shader中对应subshader进行渲染,否则不渲染。

RenderType类型

  1. Opaque: most of the shaders (Normal, Self Illuminated, Reflective, terrain shaders).
  2. Transparent: most semitransparent shaders (Transparent, Particle, Font, terrain additive pass shaders).
  3. TransparentCutout: masked transparency shaders (Transparent Cutout, two pass vegetation shaders).
  4. Background: Skybox shaders.
  5. Overlay: GUITexture, Halo, Flare shaders.
  6. TreeOpaque: terrain engine tree bark.
  7. TreeTransparentCutout: terrain engine tree leaves.
  8. TreeBillboard: terrain engine billboarded trees.
  9. Grass: terrain engine grass.
  10. GrassBillboard: terrain engine billboarded grass.

测试

  1. 随便写个两个shader,建立对应的材质:
Shader "Unlit/BlueShader"{    Properties    {        _Color("Color",Color) = (0,0,0,1)    }    SubShader    {        Tags { "RenderType"="transparent" }        LOD 100        Pass        {            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #include "UnityCG.cginc"            struct appdata {float4 vertex : POSITION;};            struct v2f{                float4 vertex : SV_POSITION;            };            fixed4 _Color ;            v2f vert (appdata v){                v2f o;                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);return o;            }                        fixed4 frag (v2f i) : SV_Target{                fixed4 col = _Color;return col;            }            ENDCG        }    }}
  1. 另一个shader与之相似,修改名字为"RedShader", 同时修改RenderType为"transparent":
Shader "Unlit/RedShader"{    Properties    {        _Color("Color",Color) = (0,0,0,1)    }    SubShader    {        Tags { "RenderType"="transparent" }        pass        {}      }}
  1. 建议一个Replacement shader,和rendshader相似,并将输出颜色修改为固定黄色。之修改下名字:
Shader "Unlit/ReplacementShader"{    Properties    {        _Color("Color",Color) = (0,0,0,1)    }    SubShader    {        Tags { "RenderType"="transparent" }        pass        {            ...            //输出为黄色,如果替换了输出为黄色            fixed4 frag (v2f i) : SV_Target            {                fixed4 col = fixed4(1,1,0,0);                return col;            }            ...        }       }}
  1. 写一个相机上的脚本,在启动时替换shader
public class ReplaceMent : MonoBehaviour {    public Shader rpShader;     // Use this for initialization    void Start ()     {        //全部替换渲染        //GetComponent
().SetReplacementShader(rpShader,""); //RenderType="rpShader中RenderType"的sunshader进行渲染, GetComponent
().SetReplacementShader(rpShader,"RenderType"); }}

执行前

mark
执行后
mark

如果在SetReplacementShader函数中tag为空,则输出为全黄色。

结论

  1. 不知道啥时候可以用到

引用

转载地址:http://gnlml.baihongyu.com/

你可能感兴趣的文章
进入某页面之后,菜单栏中的菜单和功能消失了
查看>>
接口和抽象类的作用以及区别
查看>>
python 列表(list)去除重复的元素总结
查看>>
Linux查看CPU信息
查看>>
python logging模块 basicConfig配置文件
查看>>
STL iterator和reverse_iterator
查看>>
window下rabbitmq的配置问题
查看>>
YOCTO
查看>>
Apache Beam 传 大数据杂谈
查看>>
PHP CURL POST提交
查看>>
java FTP 上传下载删除文件
查看>>
安全测试robots
查看>>
关于ArrayList的5道面试题
查看>>
CMD命令进入文件夹
查看>>
PostgreSQL存储过程<转>
查看>>
Angular企业级开发(8)-控制器的作用域
查看>>
BZOJ 4538: [Hnoi2016]网络 [整体二分]
查看>>
从XML文件乱码问题,探寻其背后的原理
查看>>
BSD Socket~TCP~Example Code
查看>>
Spring配置文件总结
查看>>