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

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

在内置渲染管线(Render Pipeline) 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
请参阅术语表
表面着色器GPU 上运行的程序。更多信息
请参阅术语表
是一种编写与光照交互的着色器的简化方式。

渲染管线兼容性

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

要在 URP 和 HDRP 中创建自定义光照,请改为执行以下作之一:

  • 以简化的创作方式着色器对象Shader 类的实例,Shader 对象是着色器程序和 GPU 指令的容器,以及告诉 Unity 如何使用它们的信息。将它们与材质一起使用,以确定场景的外观。更多信息
    请参阅术语表
    ,请参阅着色器图
  • 复制并修改 URP 或 HDRP 在包文件中提供的着色器代码。修改可能很困难,因为着色器代码又大又复杂。有关查找包文件的更多信息,请参阅检查包

概述

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

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

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

运作方式

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

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

表面着色器和 DirectX 11 HLSL 语法

目前,表面着色器编译管道的某些部分无法理解特定于 DirectX 11 的 HLSL 语法,因此,如果使用 HLSL 功能(如 StructuredBuffers、RWTextures 和其他非 DX9 语法),则必须将其包装到仅限 DX11 的预处理器宏中。

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

其他资源

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