Version: 2023.1
ShaderLab:旧版纹理组合
Unity 中的 HLSL

ShaderLab:旧版顶点数据通道映射

注意:此页面上的 ShaderLab 是旧版功能,仅用于向后兼容。如果着色器源文件包含 HLSL 代码,Unity 将完全忽略这些命令。如果着色器源文件不包含 HLSL 代码,Unity 会在导入时将这些命令编译为常规着色器程序。

渲染管线兼容性

功能名称 内置渲染管线 通用渲染管线 (URP) 高清渲染管线 (HDRP) 自定义 SRP
旧版顶点数据通道映射

概述

BindChannels 命令用于指定顶点数据映射到图形硬件的方式。默认情况下,Unity 会为您计算绑定,但在某些情况下,您可能希望使用自定义绑定。

例如,您可能会映射要在第一个纹理阶段中使用的主 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:旧版纹理组合
Unity 中的 HLSL