123456835 发表于 2023-3-21 14:03

Unity官方TA手册《Unity关键工具集和工作流程》Part 3



近日,Unity官方发布了一本名为《关键工具集和工作流程》的免费电子书,该手册整合了“所有Unity系统、功能和工作流程的详细摘要”。这份91页的指南汇集了经验丰富的技术美术师的意见,包括《Enemies》、《The Heretic》、《Book of the Dead》以及其他创作者的演示。


本书介绍了渲染管线、世界构建、着色、照明、动画、视觉特效、过场动画。以及还有一些章节讨论了脚本编写、分析和调试项目以及 2D 游戏开发。

而本篇连载将以中文翻译的形式分享给大家,英文阅读能力不错的同学可以直接去官方下载原版文档。(地址在文章末端)

由于个人能力有限,如有纰漏之处欢迎留言指出。



在Unity中, shaders被划分为三种类型:
— Shaders作为图形管线的一部分: 这些是最常见的类型,因为,它们可以进行计算已经确定将要出现在屏幕上像素(比如:Surface Shaders) .
    —计算Shaders:在GPU上计算一些常规图形管线之外的计算任务。
    —光线追踪 shaders: 这些主要用于产生照明。

1可视化创作:Shader图形

Unity shaders 使用的是一种叫ShaderLab的Unity用的的语言编写的 , 但是你也可以使用 Shader Graph来可视化地创建Shader。你可以在Shader Graph的框架中创建和连接节点,而不是在编辑器中写代码、保存、编译和测试,而且,你可以同时实时观察材质的变化,因此,你可以在快速的进行修改和反复实验。

Shader图形资产为不同的材质提供了预先配置的选项。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

计算Shaders是在常规渲染管线之外,运行在GPU上的任务。它们可以用于大规模并行的GPU算法计算或用于加速渲染 .

要有效地使用它们,需要对GPU架构和并行算法、DirectCompute、OpenGL Compute、CUDA或OpenCL有深入了解。这些着色器具有更好的兼容性和通用性,可以在所有Unity渲染管道中实现。

3系统自带的表面着色器渲染管线

顾名思义, Surface Shaders 定义了材质的物理特性。它们计算材质中每个像素的最终颜色,并进行光照计算,定义表面上每个像素的阴影。Unity中的大多数表面着色器都是默认的标准表面着色器的扩展,这使得创建过程更加直观,给艺术家更多的自由来定义他们的表面效果。








4全局照明

现代游戏中的照明大量使用了全局照明(GI)。GI涵盖了一系列技术和数学模型,试图模拟光线在反弹和与世界互动时的复杂行为。准确地模拟全局照明是具有挑战性的,而且计算成本也很高。由于这个原因,游戏经常使用一系列的方法来事先处理这些计算,而不是在游戏过程中。


一般来说,Unity中的照明实时的(直接照明),也可以是预先计算的,尽管这两种方法都可以结合起来,以创造沉浸式照明。

5烘焙全局照明

baking a lightmap, 是计算光照对场景中静态物体的影响,并将结果写入纹理,叠加在场景几何图形之上,以创造照明的效果。


静态物体的光照图
在Unity中,预先计算的光照要么在后台自动生成,要么手动生成。只要你不移动或编辑对光照图有影响的对象,就有可能在这些进程在后台运行时,继续在编辑器中正常显示(否则烘焙进程将重新启动)。
GI系统,在系统中只会考虑那些MeshRenderer组件中,选择了接受全局照明特征的物体。如果要通过光照贴图来照明,请为该资产的Receive Global Illumination选项更改为Lightmaps。否则,该对象将只会被Light Probes照亮。


GI的主要选项可以在Mesh Renderer中找到。
如果一个GameObject被设置为从Light Probes接收GI,用户必须在场景中创建一个LightProbes组对象,并复制其Probes来覆盖场景,以便准确地捕获照明的表现。Light Probes组从空间中的许多点(探针)捕捉照明。它们的照明数据被存储在磁盘上;然后在运行时,每个probes照亮的物体都使用离它最近的四个probes的照明混合。Light Probes对动态物体特别有用,此外还有不需要高质量照明的小物体。
为了减少烘焙的时间,以及为光照图预留一定的内存量,我们建议你在场景中最大限度地使用probe-lit objects。只有大型静态物体或需要高照明保真度的物体才应该接受来自光照图的GI。
6Progressive Lightmapper

Progressive Lightmapper是一个基于路径追踪的光照系统。它为编辑器中的烘焙光影和Light Probes提供渐进式更新。它允许艺术家快速迭代,因为,它可以逐步完善,并在编辑器中的场景或游戏视图中显示lightmaps。由于Progressive Lightmapper在烘焙时提供了一个预估时间,因此,烘焙的时间变得更加可控。Progressive Lightmapper按照每个texel的光照图分辨率单独烘焙GI,不需要提升采样的方案,或依赖任何 irradiance caches 或其他全局数据结构。它是强大的,因为它允许你指定你所需要烘焙的区域进行光照图烘焙,以加快测试和迭代。Progressive Lightmapper可以应用于内置的渲染管线和URP以及HDRP .
7CPU和GPU Lightmapper

你可以为Progressive Lightmapper选择两种backends;Progressive CPU Lightmapper使用的是CPU和系统RAM,而Progressive GPU Lightmapper使用的是GPU和VRAM .
ProgressiveGPULightmapper目前处于预览阶段,这意味着它正处于积极开发阶段,可能会有变化。点击这个文档了解最新进展状况。
8实时全局照明

由于它的时间性,实时GI适用于变化缓慢,且对你的内容有高度视觉影响的灯光,如太阳在天空中移动,或在封闭的走廊中缓慢脉动的灯光。由于性能成本和延迟,实时GI对于快速移动的灯光或特殊效果来说效率很低。它适用于中高端PC系统和游戏主机上的游戏,也适用于高端移动设备,当用于分辨率较低的小场景时,可用于实时全局照明。
9Enlighten

Enlighten是Unity中通过照明窗口进行实时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和反射,请查看this vide


Thedefinitiveguideto lightingintheHighDefinition Render Pipeline(HDRP)高清渲染管道(HDRP)中照明的权威指南照明是游戏开发中最复杂的课题 之一。学习如何利用HDRP的功 能来创建高度优化、逼真的游戏。涵盖的概念包括相机、灯 光、曝光、实时照明效果和完善你的阴影。

官方文档地址https://resources.unity.com/games/unity-for-technical-artists-key-toolsets-and-workflows
页: [1]
查看完整版本: Unity官方TA手册《Unity关键工具集和工作流程》Part 3