版本:Unity 6 (6000.0)
语言:英语
编写表面着色器
内置渲染管线中的表面着色器输出结构

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

在内置 渲染管线一系列将场景内容显示在屏幕上的操作。Unity 允许您选择预制渲染管线,或编写自己的渲染管线。 更多信息
参见 词汇表
中,表面 着色器在 GPU 上运行的程序。 更多信息
参见 词汇表
是一种简化的编写与光照交互的着色器的方式。

渲染管线兼容性

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

有关在 URP 中创建着色器对象的简化方式,请参阅 着色器图


有关在 HDRP 中创建着色器对象的简化方式,请参阅 着色器图

概述

编写与光照交互的着色器很复杂。存在不同的光照类型、不同的阴影选项、不同的 渲染路径渲染管线用于渲染图形的技术。选择不同的渲染路径会影响光照和阴影的计算方式。某些渲染路径比其他路径更适合不同的平台和硬件。 更多信息
参见 词汇表
(前向和延迟渲染),着色器应该以某种方式处理所有这些复杂性。

表面着色器是一种代码生成方法,它使编写光照着色器比使用低级 顶点/像素着色器程序 更容易。

有关一些示例,请查看 表面着色器示例

工作原理

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

然后,表面着色器编译器会确定需要哪些输入、填充了哪些输出等等,并生成实际的 顶点和像素着色器,以及处理前向和延迟渲染的渲染通道。

表面着色器和 DirectX 11 HLSL 语法

当前,表面着色器编译管道的一些部分不理解 DirectX 11 特定的 HLSL 语法,因此,如果您使用 HLSL 功能(如结构化缓冲区、RWTextures 和其他非 DX9 语法),则必须将其包装在 DX11 专用的预处理器宏中。

有关详细信息,请参阅 平台特定差异使用 HLSL 页面。

其他资源

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