Version: Unity 6.0 (6000.0)
语言 : 中文
编写表面着色器
内置渲染管线中表面着色器的输出结构

内置渲染管线中的表面着色器简介

在内置渲染管线中,表面着色器是编写与光照交互的着色器的一种简化方法。

渲染管线兼容性

功能名称 通用渲染管线 (URP) 高清渲染管线 (HDRP) 自定义 SRP 内置渲染管线
表面着色器

如需了解在 URP 中创建着色器对象的简化方法,请参阅着色器图表


如需了解在 HDRP 中创建着色器对象的简化方法,请参阅着色器图表

概述

编写与光照交互的着色器非常复杂。存在不同的光源类型、阴影选项、渲染路径(前向和延迟渲染)等等;而着色器必须应对所有这些复杂性。

表面着色器是一种代码生成方法,与使用低级顶点/像素着色器程序相比,可以更轻松地编写光照着色器。

如需查看示例,请参阅表面着色器示例

工作原理

定义一个“表面函数”,将您需要的所有 UV 或数据作为输入,并填充输出结构 SurfaceOutput。SurfaceOutput 基本上描述了_表面的属性_(反照率颜色、法线、自发光、镜面反射等)。您需要使用 HLSL 编写此代码。

表面着色器编译器随后会计算出所需的输入、填充的输出等等,并生成实际的顶点&像素着色器以及渲染通道,来处理前向和延迟渲染。

表面着色器和 DirectX 11 HLSL 语法

目前,表面着色器编译管线的某些部分不能理解 DirectX 11 特有的 HLSL 语法,因此如果您正在使用 HLSL 功能,如 StructuredBuffers、RWTextures 和其他非 DX9 语法,需要将其包装到仅限 DX11 的预处理器宏中。

详情请参阅平台特定差异使用 HLSL 等页面。

其他资源

编写表面着色器
内置渲染管线中表面着色器的输出结构