Version: 2021.1
ShaderLab: legacy texture combining
HLSL in Unity

ShaderLab: legacy vertex data channel mapping

Note: The ShaderLab functionality on this page is legacy, and is documented for backwards compatibility only. If your shader source file includes HLSL code, Unity ignores these commands completely. If your shader source file does not include HLSL code, Unity compiles these commands into regular shader programs on import.

渲染管线兼容性

Feature name Built-in Render Pipeline Universal Render Pipeline (URP) 高清渲染管线 (HDRP) Custom SRP
Legacy vertex data channel mapping

概述

The BindChannels command allows you to specify how vertex data maps to the graphics hardware. By default, Unity figures out the bindings for you, but in some cases you want custom ones to be used.

例如,您可能会映射要在第一个纹理阶段中使用的主 UV 集,并映射要在第二个纹理阶段中使用的辅助 UV 集;或者告知硬件应将顶点颜色考虑在内。

语法

BindChannels { Bind "source", target }

指定顶点数据 source 映射到硬件 target

Source 可以是下列值之一:

  • __Vertex__:顶点位置
  • __Normal__:顶点法线
  • __Tangent__:顶点切线
  • __Texcoord__:主 UV 坐标
  • __Texcoord1__:辅助 UV 坐标
  • __Color__:每顶点颜色

Target 可以是下列值之一:

  • __Vertex__:顶点位置
  • __Normal__:顶点法线
  • __Tangent__:顶点切线
  • Texcoord0Texcoord1 等等:相应纹理阶段的纹理坐标
  • __Texcoord__:所有纹理阶段的纹理坐标
  • __Color__:顶点颜色

详细信息

Unity 对于哪些源 (source) 可以映射到哪些目标 (target) 设置了一些限制。VertexNormalTangentColor 的源和目标必须匹配。网格中的纹理坐标(__Texcoord__ 和 Texcoord1__)可以映射到纹理坐标目标(对于所有纹理阶段来说,是 Texcoord__;对于某个特定阶段来说,是 __TexcoordN__)。

BindChannels 有两个典型用例:

  • 将顶点颜色考虑在内的着色器。
  • 使用两个 UV 集的着色器。

示例

// 将第一个 UV 集映射到第一个纹理阶段
// 并将第二个 UV 集映射到第二个纹理阶段
BindChannels {
   Bind "Vertex", vertex
   Bind "texcoord", texcoord0
   Bind "texcoord1", texcoord1
}
// 将第一个 UV 集映射到所有纹理阶段
// 并使用顶点颜色
BindChannels {
   Bind "Vertex", vertex
   Bind "texcoord", texcoord
   Bind "Color", color
}
ShaderLab: legacy texture combining
HLSL in Unity