【Unity3D技术文档翻译】第2.3.1篇 光照内容与光照环境

上一章:【Unity3D技术文档翻译】第2.3篇 标准着色器 (Standard Shader)
本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Materials, Shaders & Textures】→【Standard Shader】→【Content and Context】
光照内容与光照环境 (Content and Context)
当考虑 Unity 中的光照,我们可以方便的将概念分为:光照内容(Content)与光照环境(Context)。Content 指被照亮和渲染的物体;Context 指存在于场景中,那些影响被照亮物体的灯光。
光照环境(Context)
当照亮一个物体,知道影响该物体的光源有哪些是很重要的。在你的场景中通常有直接光源,比如你放置在场景中的 light 对象。同时还有一些间接光,比如反光(reflection)和反射光(bounced light)。它们都对物体的 material 产生影响,最终物体的表面呈现在摄像机中。
这不是一个硬性的分离,被认为是“Content”的物体,也可能是其他物体光照环境的一部分。
一座位于沙漠环境内的建筑物是一个阐明这点的好例子。这座建筑将接收来自天空盒的光照,同时反射来自周围地面的光线。
比如有一个角色站在建筑的外墙边,对于这个角色,这座建筑就是它光照环境的一部分——这座建筑可能产生阴影,也可能通过外墙将光反射到角色上。甚至角色身上某部分的反射,反映了建筑物本身。
默认光照环境
在启动新项目后,Unity 展示了一个空场景。这个场景已经包含了一个默认的光照环境,包括阴影色、基于天空盒的反射光,以及一个线性光。任何放置在该场景中的物体,默认情况下都拥有它所需的所有灯光,以使它看起来是正确的。
让我们添加一个球体到场景中,来看看在默认光照环境下的效果。

添加的球体将默认使用标准着色器。将摄像机聚焦在球体上,将看到如下图所示的结果:

注意球体边缘的反射光,以及从棕色(底部)到天蓝色(顶部)的阴影色。在一个空场景中,默认情况下,所有光照环境都衍生自天空盒与一个线性光(线性光是默认被添加到场景中的)。
当然,这只是默认设置,在某些情况下,单个线性光和天空盒反射可能并不够。你能够很容易地添加更多灯光以及反射探针:
想要更深入地了解关于反射和光探针的作用,请查阅 light probes 与 reflection probes 两篇文档。
天空盒
一个天空盒,无论是烘焙过的还是程序上的,是光照设计不可缺少的一部分。除了渲染天空之外,它还被用于控制物体上的阴影色以及反射光。程序上的天空盒使你能够直接设置它的颜色,以及创建一个光晕,而不是使用一张位图——更多信息请查阅 Skybox Documentation
一节。
当发生反射时,天空盒将作用于你场景中的许多物体,尤其是户外场景中。在许多情况下,你需要改变某个物体的反射光——可能是户外场中的阴暗区域,比如巷道走廊或者茂密的森林,或者你可能有些内部区域需要反射光去展示每处空间。
为了满足这些各种各样的反射需求,Unity 使用了 反射探针(reflection probes),它将对场景中的某一点进行采样,用于取代默认的天空盒,作为采样点附近物体的环境光与反射光源。反射探针可被放置于你场景中任何天空盒不太有效和不太适合的地方。
全局光照(Global Illumination)
全局光照(简称:GI)的概念是 Unity 的一部分。标准着色器和 GI系统被设计成能够很好地相互合作。GI系统关心于创建和追踪反射光、材质自发光,以及环境光。更多信息请查阅 Lighting Window 一节。
光照环境是影像总体外观的关键部分。在下面这个例子中,你能看到在内容和摄像机不变时,一个场景如何反应光照环境的变化。

光照内容 (Content)
光照内容是指场景中正在被渲染的物体。他们的外观是光照环境作用于物体材质上的结果。
材质编辑器
当在检查器中查看一个使用标准着色器的材质时,编辑器会展示材质相关的所有参数,包括纹理、混合模式、遮罩和次级映射图。瞥一眼,你就能发现哪些特性被使用,以及预览材质。标准着色器基于数据驱动(data-driven):Unity 将只使用材质中开启的配置相关的着色器代码。也就是说,如果材质上的某个特性或者纹理槽未使用,那么就不会产生相关的额外消耗,着色器在幕后为你进行了合并优化。

如何创建一个材质
标准着色器提供了许多设置项,为了表现种类繁多的材质类型。设置项的值可以通过纹理图、颜色采集器以及滑动条来设置。通常,UV映射需要和纹理一起使用,来描述哪部分的网格引用了哪部分的纹理图。
标准着色器材质允许同一个网格根据映射图的不同拥有不同的属性,比如镜面和光滑映射图,或者金属映射图。也就是说,你可以在同一个网格上创建橡胶、金属以及木质效果,同时纹理的分辨率可以超过多边形拓扑(polygon topology),允许不同材质类型之间实现光滑的边缘和过渡。
你的材质使用的纹理倾向于使用两种方式之一生成:在一个2D图像编辑器中(比如 Photoshop)绘制并合成,或者渲染/烘焙自3D软件。在这些编辑器和软件中,你可以制作更高分辨率的模型,来生成除了反照率、镜面和其他映射图之外的法线贴图和散射贴图。工作流将根据你使用的外部编辑软件的不同而不同。
通常,纹理贴图不应该内含光照(阴影、高光等等)。使用 PBS 的好处之一是物体对光照的反应将和你期待的一致,如果贴图已经包含了光照信息,这就不可能实现了。
如果本文对你有帮助的话,点个赞或者评论一下吧!