Version: 6000.3
语言: 中文
内置渲染管线中的 Autodesk 交互式着色器
旧版预生成着色器

在内置渲染管线中在运行时替换着色器

在内置渲染管线(Render Pipeline) 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
请参阅术语表
,你可以告诉一个相机在场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
请参阅术语表
以更改它在运行时用于渲染某些几何体的着色器。您可以这样做来实现边缘检测等视觉效果。

着色器替换是从脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
使用 Camera.RenderWithShaderCamera.SetReplacementShader 函数。这两个函数都采用着色器在 GPU 上运行的程序。更多信息
请参阅术语表
replacementTag

它的工作原理是这样的:摄像机渲染场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
就像往常一样。对象仍使用其材质,但它们使用的着色器会发生变化:

  • 如果 replacementTag 为空(必须是空字符串,而不是空),则场景中的所有对象都使用给定的替换着色器进行渲染。
  • 如果 replacementTag 不为空,则对于将要渲染的每个对象:
    • 查询真实对象的着色器以获取标记值
    • 如果它没有该标签,则不会渲染对象。
    • 子着色器位于替换着色器中,该替换着色器具有具有找到值的给定标记。如果未找到此类子着色器,则不会渲染对象。
    • 现在,该子着色器用于渲染对象。

因此,例如,如果所有着色器都有一个“RenderType”标记,其值为“Opaque”、“Transparent”、“Background”、“Overlay”,则可以编写一个替换着色器,该着色器仅使用一个具有 RenderType=Solid 的子着色器来渲染实体对象标记可以分配给一个或多个游戏对象的引用词,以帮助您识别游戏对象以进行脚本编写。例如,你可以为玩家可以在游戏中吃的任何物品定义和“可食用”标签。更多信息
请参阅术语表
.在替换着色器中找不到其他标记类型,因此不会呈现对象。或者,您可以为不同的“RenderType”标签值编写多个子着色器。顺便说一句,所有内置的着色器对象Shader 类的实例,Shader 对象是着色器程序和 GPU 指令的容器,以及告诉 Unity 如何使用它们的信息。将它们与材质一起使用,以确定场景的外观。更多信息
请参阅术语表
设置了“RenderType”标签。

光照着色器替换

使用着色器替换时,场景将使用摄像机上配置的渲染路径进行渲染。这意味着用于替换的着色器可以包含阴影和照明通道(您可以使用表面着色器进行着色器替换)。这对于执行特殊效果渲染和场景调试非常有用。

内置着色器中的着色器替换标记

所有内置着色器都有一个“RenderType”标签集,可以在使用替换的着色器进行渲染时使用。标记值如下:

  • 不透明:大多数着色器(法线垂直网格表面的方向,由 向量(Vector) 表示。Unity 使用法线来确定对象方向并应用着色。更多信息
    请参阅术语表
    自发光、反射、地形着色器)。
  • 透明:大多数半透明着色器(透明、粒子、字体、地形加法通道着色器)。
  • TransparentCutout:蒙版透明度着色器(透明剪切,两个通道植被着色器)。
  • 背景天空盒(Skybox) 一种特殊类型的材质,用于表示天空。通常是六面的。更多信息
    请参阅术语表
    着色。
  • 叠加层:Halo、Flare 着色器。
  • 树不透明地形场景中的地形。地形游戏对象会向场景添加一个大型平面,您可以使用地形的检查器窗口创建详细的景观。更多信息
    请参阅术语表
    发动机树皮。
  • TreeTransparentCutout:地形引擎树叶。
  • TreeBillboard:地形引擎广告牌树木。
  • 草:地形发动机草。
  • GrassBillboard:地形引擎广告牌草地。

内置场景深度/法线纹理

摄像机具有渲染深度或深度+法线纹理的内置功能,如果你在某些效果中需要的话。请参阅摄像机深度纹理页面。请注意,在某些情况下(取决于硬件),深度和深度+法线纹理可以使用着色器替换在内部渲染。因此,在着色器中拥有正确的“RenderType”标签非常重要。

代码示例

您的 Start() 函数指定替换着色器:

void Start() {
    camera.SetReplacementShader (EffectShader, "RenderType");
}

这将请求 EffectShader 将使用 RenderType 键。EffectShader 将具有所需的每个 RenderType 的键值标记。着色器将如下所示:

Shader "EffectShader" {
     SubShader {
         Tags { "RenderType"="Opaque" }
         Pass {
             ...
         }
     }
     SubShader {
         Tags { "RenderType"="SomethingElse" }
         Pass {
             ...
         }
     }
 ...
 }

SetReplacementShader 将查看场景中的所有对象,而不是使用其普通着色器,而是使用第一个子着色器,该子着色器具有指定关键帧的匹配值。在此示例中,着色器具有 Rendertype=“Opaque” 标记的任何对象都将替换为 EffectShader 中的第一个子着色器,任何具有 RenderType=“SomethingElse” 着色器的对象都将使用第二个替换子着色器,依此类推。将不会呈现着色器中指定键的着色器没有匹配标记值的任何对象。

内置渲染管线中的 Autodesk 交互式着色器
旧版预生成着色器