原文链接
Unity官方TA手册《Unity关键工具集和工作流程》 | 高鹏涛
原文写得很好,但是主题格式我不太喜欢,所以我对文章的格式以及部分翻译有误的地方进行了修整,方便自己日后阅读
正文
Hello . 大家好
今天给大家带来的是 Unity 官方 TA 手册 《Unity 关键工具集和工作流程》part 3
我是高鹏涛
近日,Unity 官方发布了一本名为《关键工具集和工作流程》的免费电子书,该手册整合了 “所有 Unity 系统、功能和工作流程的详细摘要” 。这份 91 页的指南汇集了经验丰富的技术美术师的意见,包括《Enemies》、《The Heretic》、《Book of the Dead》以及其他创作者的演示。
本书介绍了渲染管线、世界构建、着色、照明、动画、视觉特效、过场动画。以及还有一些章节讨论了脚本编写、分析和调试项目以及 2D 游戏开发。
而本篇连载将以中文翻译的形式分享给大家,英文阅读能力不错的同学可以直接去官方下载原版文档。
由于个人能力有限,如有纰漏之处欢迎留言指出。
在 Unity 中, shaders 被划分为三种类型:
— 着色器作为图形管线的一部分: 这些是最常见的类型,因为,它们可以进行计算已经确定将要出现在屏幕上像素(比如:Surface Shaders) .
— 计算着色器:在 GPU 上计算一些常规图形管线之外的计算任务。
— 光线追踪 shaders: 这些主要用于产生照明。
1 可视化创作:Shader Graph
Unity shaders 使用的是一种叫 ShaderLab 的 Unity 特定的语言编写的, 但是你也可以使用 Shader Graph 来可视化地创建 Shader。你可以在 Shader Graph 的框架中创建和连接节点,而不是在编辑器中写代码、保存、编译和测试,而且,你可以同时实时观察材质的变化,因此,你可以在快速的进行修改和反复实验。
Shader Graph Asset 为不同的材质提供了预先配置的选项。Shader Graph 中的节点代表了应用材质的对象的数据;比如它们的数学函数和程序模式。
此外,Shader Graph系统是可扩展的,这意味着程序员可以开发 自定义 Shader Graph 节点。使用 Shader Graph 来创建适用于 URP 和 HDRP(以及 2021 LTS 或更新版本中的内置渲染管线)的着色器。
- Shader Graph 中创建基于节点链接的着色器
Master Stack 是 Shader Graph 的末端,它定义了 Shader 的最终表面外观。它可以帮助用户直观地了解在顶点阶段(当计算多边形顶点的属性时)和片元阶段(当进行计算以查看顶点之间的像素看起来如何时)所发生的一系列关系。
在编写 HLSL 代码方面有经验的用户可以在 Shader Graph 中创建自定义函数块
- Shader Graph 通过连接图形网络中的节点,为艺术家和其他团队成员提供 Shader 创作功能。
2 在 SRPs 中的计算着色器
计算 Shaders 是在常规渲染管线之外,运行在 GPU 上的任务。它们可以用于大规模并行的 GPU 算法计算或用于加速渲染 .
要有效地使用它们,需要对 GPU 架构和并行算法、 DirectCompute、OpenGL Compute、CUDA 或 OpenCL 有深入了解。这些着色器具有更好的兼容性和通用性,可以在所有 Unity 渲染管道中实现。
3 内置渲染管线的表面着色器
顾名思义, Surface Shaders 定义了材质的物理特性。它们计算材质中每个像素的最终颜色,并进行光照计算,定义表面上每个像素的阴影。Unity中的大多数表面着色器都是默认的 标准表面着色器 的扩展,这使得创建过程更加直观,给艺术家更多的自由来定义他们的表面效果。
更多资料
- Latest visual effects guide for artists
- Shader Graph Master Stack
- Experimenting with Shader Graph: Doing less with more
- Normal Map compositing using the surface gradient framework in Shader Graph
1 全局照明
现代游戏中的照明大量使用了全局照明(GI)。GI 涵盖了一系列技术和数学模型,试图模拟光线在反弹和与世界互动时的复杂行为。准确地模拟全局照明是具有挑战性的,而且计算成本也很高。由于这个原因,游戏经常使用一系列的方法来事先处理这些计算,而不是在游戏过程中。
一般来说,Unity 中的照明实时的(直接照明),也可以是预先计算的,尽管这两种方法都可以结合起来,以创造沉浸式照明。
2 烘焙全局照明
当烘焙一张光照贴图, 是对场景中静态物体计算光照的影响,并将结果写入纹理,叠加在场景几何图形之上,以创造照明的效果。
- 静态物体的光照图
在 Unity 中,预先计算的光照要么在后台自动生成,要么手动生成。只要你不移动或编辑对光照图有影响的对象,该光照贴图就可以在编辑器中继续正常工作,同时这些进程仍在后台运行(否则烘焙进程将重新启动)。
GI 系统,在系统中只会考虑那些 MeshRenderer 组件中,选择了 Contribute Global Illumination 属性的物体。如果要通过光照贴图来照明,请为该资产的 Receive Global Illumination 选项更改为 Lightmaps。否则,该对象将只会被 Light Probes 照亮。
- GI 的主要选项可以在 Mesh Renderer 中找到。
如果一个 GameObject 被设置为从 Light Probes 接收 GI,用户必须在场景中创建一个 LightProbes 组 对象,并复制其 probes(探针)来覆盖场景,以便准确地捕获照明的表现。 Light Probes 组从空间中的许多点(探针)捕捉照明。它们的照明数据被存储在磁盘上;然后在运行时,每个 probes 照亮的物体都使用离它 最近的四个 probes 的照明混合。Light Probes 对 动态物体 特别有用,此外还有 不需要 高质量照明的小物体。
为了减少烘焙的时间,以及为光照图预留一定的内存量,我们建议你在场景中 最大限度地使用 probe-lit 对象。只有 大型静态物体 或需要 高照明保真度 的物体才应该接受来自光照图的 GI。
6 Progressive Lightmapper 渐进式光照映射
Progressive Lightmapper 是一个基于路径追踪的光照系统。它为编辑器中的光照贴图烘焙和 Light Probes 提供 渐进式更新。它允许艺术家快速迭代,因为,它可以逐步完善并在编辑器中的场景或游戏视图中显示 lightmaps 。由于Progressive Lightmapper 在烘焙时提供了一个预估时间,因此,烘焙的时间变得更加可控。
Progressive Lightmapper 按照每个 texel 独立地在光照图分辨率上烘焙 GI,不需要上采样的方案,或依赖任何 irradiance caches 或其他全局数据结构。它是强大的,因为它允许你指定你所需要烘焙的区域进行光照图烘焙,以加快测试和迭代。
Progressive Lightmapper 可以应用于内置的渲染管线和 URP 以及 HDRP .
7 CPU 和 GPU Lightmapper
你可以为 Progressive Lightmapper 选择两种后端;
- Progressive CPU Lightmapper 使用的是 CPU 和系统 RAM,
- 而 Progressive GPU Lightmapper 使用的是 GPU 和VRAM .
Progressive GPU Lightmapper 目前处于预览阶段, 这意味着它正处于积极开发阶段,可能会有变化。点击这个文档了解最新进展状况。
8 实时全局照明
由于它的时间性,实时 GI 适用于变化缓慢,且对你的内容有高度视觉影响的灯光,如太阳在天空中移动,或在封闭的走廊中缓慢跳动的灯光。由于 性能成本和延迟,实时 GI 对于快速移动的灯光或特殊效果来说 效率很低。它适用于中高端 PC 系统和游戏主机上的游戏,也适用于高端移动设备,当用于分辨率较低的小场景时,可用于实时全局照明。
9 Enlighten
Enlighten 是 Unity 中通过 Lighting 窗口进行实时 GI 的后端。这个系统 需要 对静态物体的场景进行预计算,但同样 支持 实时无缝添加灯光和材质。一旦一个场景被预先计算,光照的迭代时间就可以大大减少。
内置渲染管线提供 Enlighten 的支持是从 Unity 2021 LTS 开始,HDRP 和 URP都支持它
10 光线追踪的全局照明
另一种形式的实时 GI 可以通过光线追踪来实现。目前,只有 HDRP 提供这种功能,这需要一个与光线追踪兼容的 GPU。
与 Enlighten 或传统的烘焙光照贴图相比,光线跟踪 GI 的 优势 在于它不需要任何预计算。此外,照明是按像素计算的。它不依赖于给定的 texel 分辨率,也不需要任何特定的光照贴图 UV,来确保最佳照明。虽然迭代时间非常短,但对光线跟踪 GI 的 GPU 要求仍然非常高。这就是为什么这项技术只能在,支持光线追踪的特定的硬件上使用。
- 由 Light Brick Studio 为 PC 平台制作的 LEGO Builder’s Journey,使用带有光线追踪的 HDRP 和深度学习超级采样(DLSS)进行实时渲染。
要了解更多关于 Unity 中可用的所有光线追踪效果,如光线追踪 GI 和反射,请查看视频
光照是游戏开发中最复杂的课题之一。学习如何利用 HDRP 的功能来创建高度优化、逼真的游戏。涵盖的概念包括相机、灯光、曝光、实时照明效果和完善你的阴影。