Version: Unity 6.0 (6000.0)
语言 : 中文
编写 HLSL 着色器程序
添加 HLSL 着色器程序

着色器程序基础知识

在 Unity 中,通常使用 HLSL 编写着色器程序。要将 HLSL 代码添加到着色器资源,应将该代码放在一个着色器代码块中。

注意:Unity 还支持使用其他语言编写着色器程序,不过通常不需要或不建议这样做。有关更多信息,请参阅编写着色器

本手册的这一部分介绍了有关以 Unity 特定方式使用 HLSL 的信息。有关编写 HLSL 的一般信息,请参阅 Microsoft 的 HLSL 文档

注意:Unity 最初使用 Cg 语言,这影响了 Unity 一些关键字 (CGPROGRAM) 和文件扩展名 (.cginc) 的名称。Unity 不再使用 Cg,但这些名称仍在使用。

HLSL 语法

HLSL 有两种语法:旧版的 DirectX 9 样式语法以及更现代的 DirectX 10+ 样式语法。不同之处主要在于纹理采样函数的工作方式:

  • 旧版语法使用 sampler2D、tex2D() 和类似函数。此语法适用于所有平台。
  • DX10+ 语法使用 Texture2D、SamplerState 和 .Sample() 函数。由于纹理和采样器在 OpenGL 中并非不同的对象,因此该语法的某些形式在 OpenGL 平台上无效。

Unity 提供了包含预处理器宏的着色器库来帮助您管理这些差异。有关更多信息,请参阅内置着色器宏

顶点和片元着色器

__顶点着色器__是在 3D 模型的每个顶点上运行的程序。通常情况下,它并不执行特别复杂的操作。我们在这里只是将顶点位置从对象空间转换为所谓的“裁剪空间”(由 GPU 用于光栅化屏幕上的对象)。我们还传递未修改的输入纹理坐标;我们需要该坐标来对片元着色器中的纹理进行采样。

__片元着色器__是在屏幕上对象占据的每个像素上运行的程序,通常用于计算和输出每个像素的颜色。通常,屏幕上有数百万个像素,而片元着色器的执行过程涵盖了所有像素!优化片元着色器是整体游戏性能优化工作的重要组成部分。

一些变量或函数定义后跟一个语义指示符 - 例如 :POSITION:SV_Target。这些语义指示符将这些变量的“含义”传达给 GPU。请参阅着色器语义页面,以了解详细信息。

编写 HLSL 着色器程序
添加 HLSL 着色器程序
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961