Unity Shader 详细自学(二)

  • SubShader{…} 首先,subshader才是整个shader的核心。每个shader可以拥有一个或多个subshader,实际运行时会从上而下依次实验,直至运行到第一个当前硬件支持的subshader。实际上每个subshader可以理解为一套渲染方案,一个shader可以有多个渲染方案,每个渲染方案为针对不同的显卡而编写。
    • Tags{} 是干什么的呢,代码长这样。
      在这里插入图片描述
      有一点我们需要知道,subshader里面的Tags只能在subshadr里面使用,pass里面的Tags只能在pass里面使用,我们现在说的是subshader里面的Tags。首先我们需要知道,默认情况下,Unity会基于对象距离摄像机的远近来排序你的对象。因此当一个对象离摄像机越近,它就会优先绘制在其它更远的对象上面。上面所述对于大多数情况这是适用的,可是在一些特殊情况下。你可能想要自己控制对象的绘制顺序。那么使用Tags{}块我们就能够得到这种控制。写法类似:
      Tags{ “Queue” = “AlphaTest” “IgnoreProjector” = “True” }
      • Queue: 渲染顺序队列标签。指定使用本shader的物体的渲染顺序,Unity提供了以下几种预设,
        在这里插入图片描述其中还可以用Tags { “Queue”=“Geometry-20” }来表示,首先渲染BackGround,然后渲染Geometry-20,然后渲染Geometry,越先渲染越在下层,会被后渲染的遮挡。
        注意: Geometry对应的队列值是2000,所以"Geometry-20"意味着使用队列值为1980的队列。而数值越小意味着越先被渲染,也就会被后面渲染的对象遮挡。
        最后: 需要在SubShader块中声明ZWrite标签。意思是告诉Unity,我们想要重写对象的深度排序。而且我们将会为它指定一个新的渲染队列。所以我们设置 ZWrite Off
      • IgnoreProjector:是否忽略投影的标签
      • ForceNoShadowCasting=“True”:从不产生阴影的标签
      • RenderType 这个标签主要是配合使用替换渲染,如果你不使用替换渲染,这个标签就没有多大意义,而且可以自定义RenderType的标签值,如:“RenderType”=“AAA”也是可行的,主要是起个归类的作用,下面有几种Unity预设的标签值:
        • 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. 地形引擎何中的广告牌草。
        • 接着上面的说RenderType的功能,替换渲染是什么? 代码:
          Camera.SetReplacementShader(“AA(shader名字)”,“Opaque(RenderType)”)
          意思是查找场景中所有shader,检查每个shader的RenderType值是否等于Opaque,如果相等,则替换为AAShader,如果不想等,则不渲染。如果RenderType为空字符串,则表示将场景中所有的物体都是用AAshader渲染。
  • LOD 200 Level of Detail。这里例子里我们指定了其为200。数值决定了我们能用什么样的 Shader。在Unity的Quality Settings中我们可以设定允许的最大LOD,当设定的LOD小于SubShader所指定的LOD时,这个SubShader将不可用。Unity内建Shader定义了一组LOD的数值
    • VertexLit及其系列 = 100
    • Decal, Reflective VertexLit = 150
    • Diffuse = 200
    • Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit = 250
    • Bumped, Specular = 300
    • Bumped Specular = 400
    • Parallax = 500
    • Parallax Specular = 600
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值