在内置渲染管线中,表面着色器是编写与光照交互的着色器的一种简化方法。
| 功能名称 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义 SRP | 内置渲染管线 |
|---|---|---|---|---|
| 表面着色器 | 否 如需了解在 URP 中创建着色器对象的简化方法,请参阅着色器图表。 |
否 如需了解在 HDRP 中创建着色器对象的简化方法,请参阅着色器图表。 |
否 | 是 |
编写与光照交互的着色器非常复杂。存在不同的光源类型、阴影选项、渲染路径(前向和延迟渲染)等等;而着色器必须应对所有这些复杂性。
表面着色器是一种代码生成方法,与使用低级顶点/像素着色器程序相比,可以更轻松地编写光照着色器。
如需查看示例,请参阅表面着色器示例。
定义一个“表面函数”,将您需要的所有 UV 或数据作为输入,并填充输出结构 SurfaceOutput。SurfaceOutput 基本上描述了_表面的属性_(反照率颜色、法线、自发光、镜面反射等)。您需要使用 HLSL 编写此代码。
表面着色器编译器随后会计算出所需的输入、填充的输出等等,并生成实际的顶点&像素着色器以及渲染通道,来处理前向和延迟渲染。
目前,表面着色器编译管线的某些部分不能理解 DirectX 11 特有的 HLSL 语法,因此如果您正在使用 HLSL 功能,如 StructuredBuffers、RWTextures 和其他非 DX9 语法,需要将其包装到仅限 DX11 的预处理器宏中。