天の川 发表于 2019-3-27 15:03:27

深度解析“勿忘我”游戏环境 基于物理渲染技术 PBR

法国Dontnod Entertainment(游戏开发商)工作室的Sébastien Lagarde探索出世界复杂的游戏环境,尤其是对一款让人觉得不可思议的新游戏《勿忘我》的精确湿度模拟案例研究。这是我们所探讨的游戏环境三部系列的第一部分。第二部分着重于雨,第三部分侧重于在游戏《勿忘我》中所使用的材料。

游戏简介

Sébastien Lagarde作为这个制作团队的一员刚完成由Dontnod Entertainment工作室制作的并由Capcom卡普空发行的(2013年6月份发行的PlayStation 3游戏机、Xbox 360微软游戏机及Microsoft Windows微软操作软件)科幻动作游戏《勿忘我》。这款游戏向我们介绍‘记忆修改机械师’-----一个人可以入侵某个目标的记忆中对其记忆进行重新排列从而去操控他们。游戏玩家通过记忆回放和修改记忆去改变这个目标的回忆内容和结局从而实现整个游戏操作。作为这款游戏的R&D(开发研究技术部)一名成员,Sébastien Lagarde致力于研究和开发潮湿雨水环境的算法原理。

《勿忘我》游戏背景设置在未来2084年的新巴黎。社会媒体已经发展到每个人都可以配备一个被称为SenSen(感知系统)的记忆捕获移植这个地步。人们记录他们所见到的、听到的、闻到的、感觉到的及品尝到的并与其他人分享他们的经验。这样就产生了一个可以共享甚至是对那些记忆进行买卖交易的记忆交易经济。

这一切听起来让人对这个社会较为险恶的一面感到毛骨悚然, 作为制造感知系统的这个Memorize公司,它控制所有的记忆数据(想象一下,一台智能手机和社会媒体可以直接掌控你的大脑!)。并不是在新巴黎的每个人都赞同一个拥有如此权利的公司可以降低人的记忆,这一团体自称为Erorrists。在游戏世界中,你可以操纵所有最强大的Erorrists,其中包括主角Nilin(记忆猎人)。



游戏的概念艺术

游戏世界中的故事发生在同一个城市的一天之内-----新巴黎(一个科幻小说所描述的在未来2084年的巴黎)。在这一天,玩家将从新巴黎布局混乱的树木截面界面前行。深邃夜晚的巴黎主要由一些脏乱的贫民窟及废弃区域构成。






中巴黎最接近巴黎城市本身。在记住巴黎建筑风格的同时,这些极具创意性的设计师们又为这种建筑风格的融合增添了幻想的格调。






高巴黎是一个所有的一切看起来更有序更奢华的地方,一个高塔林立人们可以自由共享记忆的理想国。

Art-wise的目标是创造一个可信的未来。对于这个游戏制作团队最为重要的是列入诸如艾菲尔铁塔和巴士底狱支柱的历史遗迹,同时也是为了尽可能真实地反映巴黎这个城市的整体建筑风格设计。




这种游戏可能与目前被称为Cyberpunk(赛博朋克)的科幻小说有关。这种游戏通常要求有一个黑暗的氛围,一切处于复杂的灰暗中让人觉得很压抑,在一个昏暗的城市背景下。下着暴风雨的天空、雨水、闪烁的霓虹灯、大雾……




用同样的承诺提供丰富的游戏制作经验,这个团队提议在游戏片段中完全覆盖原型,但是他们不想只是停留于此。他们试图向玩家展示新都市的最大画面。游戏中的一些独立片段画面由于是发生在清晨从而显得更加的清晰明亮,随着一轮浅橙色光亮的出现,我们迎来了中巴黎的豪斯曼画面。天空是蔚蓝清澈的,就连阴影也有轻微的淡蓝色。

美术设计以用一个风格化的现实主义眼光与一个可信的环境相配为目标。游戏中也有一个下雨的场景,因为有一部分画面是在雨中进行的,其它的是在下雨后进行的。为了获取更多的真实感,游戏制作团队的技术人员选用一个基于物理原理渲染技术(PBR)的全新灯光系统。此外,他们意识到这个游戏还将需要一个处理下雨场景及高巴黎清洁环境的高反光面的这样一个反射系统。

这两大特点将在下文中描述。

基于物理原理渲染技术(PBR)

这个在2010年的Siggraph国际图形学年会上关于电影和游戏制作课程的基于物理原理的阴影模型渲染技术对于《勿忘我》游戏制作团队来说是非常激动人心的。随着这个基于物理原理的光照模型的应用,这样更容易用更少的且更直观的参数来实现这种真实感。同时它也允许在不同的光照条件下获得一致的画面。做到这一点需要技术上的给力,但对于设计师在这个领域的应用也会更好。

《勿忘我》游戏的美术设计面向风格化的带有蔓延一整天的水平静态时间的现实主义。在一个水平面上的有利条件能够被反复用于另一个水平面-----为了减少游戏制作时间。基于物理原理的渲染技术正适合这种选择。

游戏界面的光反应被一个被称为双向反射分布函数(BRDF)的函数所量化。大多数基于物理原理的镜面反射的基本条件是微面元理论(specular经常使用microfacet theory作抽象描述)。为了使其简化,传统的光照模式与基于物理原理的双向反射分布函数(BRDF)之间主要的差别如下:

●菲涅耳反射无处不在

●能量守恒(输出的能量不能大于摄入的能量)

能量守恒的一个结果是镜面高光反射的亮度自动与它的形状大小相链接。



能量守恒(随着镜面高光反射变得越来越大-----相应地也越来越暗淡模糊)。


基于物理原理的BRDFs需要一个带有HDR线性空间照明的伽马纠正管道。为了达到最好的效果,它也需要物理光度单位和区域光源。通常的‘守时’光源是不现实的往往容易产生镜面混淆。

《勿忘我》游戏光照模式:理论

《勿忘我》游戏是基于Unreal Engine 3(虚幻引擎3)的一个修改版本,虚幻引擎3是一个经反复使用并多次快速通过的渲染器。这个基于物理原理的BRDF被用于Naty Hoffman在他的2010 Siggraph国际图形学年会谈话上所描述的游戏,为游戏开发制作动机的物理阴影模型。这个阴影模型被称为Blinn microfacet。

游戏《勿忘我》的灯光照明遵循这个渲染方程:



虽然这个公式很简单但是它不适合在游戏中实时应用。

反而,这个照明计算被分为两部分。

●高效的直接光照使用简单的解析型守时光源

●代价较高的间接光照使用基于图像的照明(IBL)(一种渲染技术)

直接光照公式化遵循通常的游戏图形的公式,但是需使用基于物理原理的镜面反射BRDF的 Blinn microfacet 。




间接光照公式要更复杂些。

因为这些只是为了制作游戏的需要,游戏《勿忘我》有一个静态灯光系统,这允许游戏制作团队存储灯光预集成信息供运行时使用。绘图引擎单独计算出漫反射和镜面反射。

漫反射间接光照对静态物体使用定向的光线映射,对动态物体使用球函数(SH)。





另一方面,镜面反射间接光照对于预集成数据信息来说更加的复杂。



公式:(见下文关于这如何转化成实际的纹理)

然而,考虑到这大约分为两部分。

●灯光照明是使用BRDF的常态分布函数(NDF)和用于不同的镜面反射功率值的兰伯特定律余弦计算出的离线预集成数据信息。

●结果存储在一个经纹理映射过滤后的带有立方体纹理贴图的环境反射贴图中(PMREM),在这个立方体纹理贴图上每个纹理映射存储一个带有较低粗糙度的预集成结果。

游戏制作团队工作人员开发并发布了这个生成立方体贴图的工具。这个工具被命名为ModifiedCubemapgen(一种制作软件),它是建立在AMD(超威半导体) Cubemapgen开源代码的基础上的。

间接光照:镜面反射

对于左下图的积分,菲涅尔准则被一个新的简单的‘glossy’菲涅尔准则应用所取代。观察显示掠射角的粗糙表面由于微影和遮盖的原因往往易于反射较少的光泽,而glossy Fresnel效果却很明显。这样做的目的是为了实现代价低廉的渲染,尽管在数学逻辑上不是完全正确,但是glossy Fresnel仍然可以提供一个舒适的视觉效果。




粗糙无光球体

在《勿忘我》这个游戏中,同样的基于物理原理的BRDF几乎被应用于所有允许draw calls(绘制调用)使用次数减少的材质(比如,金属和非金属物体使用同样的着色器也可以混在一起使用)。只有两个BRDFs例外:皮肤和毛发。

为了从基于物理原理的BRDF中得到较好的效果,《勿忘我》游戏中所有的光照都是伪造的区域光源。它们是根据由2011CEDEC 日本游戏开发大会Tri-Ace(电子游戏软件开发公司)研究发明的‘基于物理原理实时渲染技术-----安装启用程序’的hack游戏系列,主要在于它可以修饰光照表面粗糙度。




加速不同的伪造区域光源(通过调整表面粗糙度)。

PBR纹理的工作流程及程序编写(设计指南)

在处理PBR(基于物理原理的渲染技术)的时候,了解光照是如何互动的这一点很重要。光照与其表面属性是解耦的。识别属于这个表面的属性是什么属性并了解这些属性之间的影响是使物体外观看起来更真实的关键。

表面属性是BRDF(双向反射分布函数)参数的组成部分。这个BRDF参数可以是恒定不变的或是在空间上发生变化的(不管在哪种情况下这个参数将会是一个纹理)。

在《勿忘我》游戏的BRDF中确定了4种纹理:





尽管纹理的命名与传统的光照模型的命名相似-----但是内容是完全不同的。

这个游戏制作团队意识到转换成使用PBR(基于物理原理的渲染)将达到仅像输入质量那样好的结果。将复古纹理程序编写习惯与这种新的光照模型放在一起应用将比使用传统的光照模型得到更糟的结果。这个游戏制作团队决定在纹理工作流程创新方面投入更多努力。为了帮助设计师(包括外包设计师),他们创建一套关于如何制作完美纹理的设计指南和参考文献。PBR(基于物理原理的渲染技术)最大的优势是它直接从真实的世界作参照。

下面将描述四种纹理的每个设计指南和参考文献。

1、 反照率纹理指南




反照率是一个物体的颜色识别特征。更确切地说,它是一个曲面的双半球反射系数。它是一个独立的视图且更普遍地被叫作漫反射。

习惯上,设计师过去经常在像环境光散射、蝶影和倒影这些漫反射纹理上存储光照信息。正如前面解释的那样,现在光照与其表面属性是解耦的且必须从反射率纹理中移除。游戏世界中的光照将全部来自于图形引擎。

对于一名设计师来说,并不是直观的认为一个物体的反照率应该会是什么样。反照率可能是一个像木材、皮革或者一种恒定不变的物体一样的‘纹理’(图案)。通过使用PBR(基于物理原理的渲染),反照率不再是一个简单的色彩明度而是带有一种特别的物理意义。其结果是设计师往往趋于将反照率的效果做的过暗。

《勿忘我》游戏制作的设计师们使用一个色值图作参照。




这个色值图的主要指南作用如下:

●反照率值在sRGB色彩标准中介于32-243之间

●地球上最黑的物质之一是黑炭,最亮的物质之一是刚飘落的雪花

●纯金属物体反照率为0

然而,这个色值图对于处理大量不同材料的设计师来说远远不够。

此外,使用物理反照率的优势是它几乎近似于摄影的效果,增加了可用的参照数量。

反照率的获取过程是受Henry Labounta在他的2011GDC(游戏开发者大会)演讲中关于‘图片级真实感渲染游戏的美术设计工具’工作的启发。

概括为以下几点:

●等候一个阴天为的是减少定向照明数据信息

●原摄影拍摄(意思是不使用伽马空间而是使用一个线性模型),如可能的话也包含使用一个Macbeth麦克白图形作参照

●在麦克白图形的帮助下,使用曝光和暗电平调整对图片进行导入校准

●一个sRGB色彩标准图片可以被游戏设计师作为参照使用

有关图片校准步骤需要作一些解释。当在Photoshop(图像处理软件)中导入原图时,6色取样器是安装在6种由白色到黑色的色彩检验工具修补程序上的。确保这个色彩模式设置为sRGB这很重要。然后通过使用曝光、加深以及其它在Photoshop中可用的工具-----一个设计师将试图让这个6色值与色彩检验工具的sRGB色彩参照标准达到最佳匹配 。




图片较准前后比较

对于《勿忘我》这个游戏,制作团队的工作人员并没有使用校准纹理作为基础纹理。游戏的纹理图案由概念艺术创作团队提供的基于反照率参考值的授权纹理所代替。

在实践中,设计师经常犯一些可以被分类的常见错误:

A. 太多混杂的反照率





天の川 发表于 2019-3-27 15:04:06

B. 反照率太暗



C. 过多的反差



D. 最后,可能有太多的环境闭塞。宏闭塞没多大影响,然而引擎处理不了的微闭塞可能对游戏环境影响较大。微闭塞不应该太暗而应该只是一种正如它所需要的模拟光反弹的反照率色调。

2、 镜面高光纹理指南

对于设计师来说,很难理解镜面高光纹理,因为它是建立在物理概念基础上的。然而程序编写很简单,因为它没有涉及到艺术诠释。镜面高光纹理控制一个曲面的镜面反射率,它被用于输入到计算有多少光被反射的菲涅耳方程式。

一个曲面的镜面反射率取决于它的折射率(IOR)。而对于通常用于游戏中的镜面反射率曲面则主要分为以下三组:

1、 金属(导体)

2、 非金属(像水、玻璃、皮肤、木材、毛发、皮革、塑料、石头、混凝土之类的绝缘体)

3、 宝石(半导体)

宝石是罕见的且与《勿忘我》游戏无关。金属对于所有的入射物体及其视向来说是高反光的。它们的镜面高光反射是多彩的,因为它们的IOR折射率随着光的波长容易发生很大变化。相反的是物体直视掠射角反光较差的非金属,它们反射大部分的光。它们的镜面高光反射是单色的,因为它们的IOR折射率不会随着光的波长发生很大变化且可能会恒定不变。

游戏制作团队的设计师为了避免处理让他们很难理解的IOR折射率(特别是随着光的波长发生很大变化的有复杂折射率的金属),他们在输入菲涅耳Schlick近似值的时候使用F0(0°入射角度,意思是直视角度+光照)垂直入射的镜面高光反射。











F0可以被用来表示一种颜色。因此F0是镜面反射纹理的内容(它可以被称为高光反射颜色),它可以从带有以下方程式的IOR(折射率)检索到:

很明显,设计师不需要处理这样的数学公式。搜集现实世界中折射率的工作很乏味(尤其是金属的折射率)但是这个工作只需要做一次。《勿忘我》游戏设计师使用这个带有种种参考值的并将这些参考值作为他们纹理制作的一个颜色选择器的图表:




有关图表指南(以线型的RGB颜色标准)如下:

●没有低于0.02的值

●直观上非金属值相对较低:0.02-0.08

●宝石值为0.05-0.17

●金属的镜面高光反射值很高:0.5-1.0

当不清楚一个非金属的IOR(折射率)的时候,通常使用一个默认值0.04(接近于塑料塑胶)。通常可以观察到金属的F0(高光反射颜色)与在白光下的金属颜色识别特征相匹配。这样设计师很容易根据他们所认为的颜色对未引用金属设定F0。此外,金属没有层面交互,因此它应该有一个黑色的反照率。

在实践中,设计师体验到对于任何非金属物体的F0值在0.04没有任何视觉变化。这是由于制作游戏的图形引擎限制所致。一个常见的错误是没有为金属设置一个黑色反照率(对于设计师来说只是看起来不太明显,它应该是黑色的)。很多时候,镜面反射纹理是一个带有平色的小纹理。

在这里使用的F0定义隐含叙述是这样的,它相当于一种与空气接触的材料的镜面高光反射(几乎通常是这种情况,但不是经常)。比如,如果这个曲面是在水下那么这个F0是无效的。同时在《勿忘我》游戏中有大量潮湿曲面画面。(在这种情况下,空气折射率在F0方程式中的值为1-----应该被替换为1.33-----水的折射率)。镜面反射纹理的另一个名称是‘物质’纹理,但它其实应该是‘菲涅耳反射在空气表面界面的垂直入射’。

有趣的一面是,镜面反射纹理可以用于对所有不同类型的材料进行分类的着色器。

4、 粗糙纹理指南

粗糙纹理是设计师用于编辑制作的两种最重要的纹理之一-----另一种是法线贴图。当一个曲面处于完全光滑时,它的反射很清晰(比如镜子)。当这个曲面很粗糙时,反射光线偏离理想的镜面方向,反射效果就非常的粗糙模糊。偏离光线的分布对理想镜面方向附近的一个代表圆锥形的反射很重要。粗糙纹理控制这个圆锥形光圈,因此这个反射效果很模糊。曲面越粗糙,圆锥形的光圈就越大。

然而,对于一个设计师来说,解释像数值一样的粗糙纹理内容常常很困难。在《勿忘我》游戏中被选取的这些数值用于提供视觉上的线状反射模糊。粗糙度系数由一个像是圆锥形光圈张角的绘图引擎解读执行。对于间接光照,它是用于挑选在立方体贴图上的纹理映射的。对于直接光照,它转变为镜面高光反射强度。

《勿忘我》游戏的粗糙纹理公约为:

●0-黑色-意意味着粗糙

●255-白色-意味着平滑

粗糙度系数转变为带有如下公式的镜面高光反射强度:

2^(10 * (Roughness / 255) + 1)

因此,对于直射光,【0-255】的粗糙度范围值被映射到指数范围在【2-2048】的镜面高光反射强度上。

《勿忘我》游戏设计师使用一个带有完整粗糙度系数的图表,绘图引擎显示的结果带有一些现实世界中的实例。




经由Andrea Weidlich提供的来自2009亚洲国际图形学年会关于‘探索BRDF模型层面可能性’的现实世界图片

粗糙纹理对于一个快速路径的可视化工具的使用很有帮助-----游戏引擎内的纹理可以体现这一点。设定一个带有不同体积纹理的测试场景,这样就很容易测试出在不同光照条件下的游戏资产。

这种纹理也可以被称为‘反光度’、‘光泽度’或是‘平滑度’。

4.法线纹理指南

实际上法线纹理与传统的光照模式一样,因此设计师操作起来很随意,无疑他们不需要操作指南。

粗糙纹理在很多方面与法线纹理有关联,两者都可以表示一个曲面不同范围的几何特征。法线贴图的常态变异数将对粗糙纹理有影响(比如一个由变动法线表示的凹凸不平的纹理曲面应该是粗糙模糊的)。其他的如划痕、斑点、孔隙等表面缺陷都被添加到粗糙纹理上。在《勿忘我》游戏中,为了让设计师同时制作带有同样分辨率的纹理,粗糙纹理是在法线贴图纹理的阿尔法通道上进行的。



工作流程

一旦这些指南制作成文,团队工作人员需要创建一个定义PBR参照纹理的工作流程。对于游戏《勿忘我》,它的概念艺术团队负责为每个游戏资产提供概念创作和参照材料。因此每个概念创作都注释一个物质名称(金子、石头…)和常见的普通术语来描述材料:透明的、鲜亮的、灰暗的、苍白的、生锈的、丝滑的、金属的、有光泽的、模糊的、无光泽的等等…这与现实世界的PBR参考内容相匹配。

概念艺术设计师还负责从摄影和额外的材料描述中捕获参照反照率。这些纹理从不在游戏中直接使用。但是这个过程可以帮助外包设计师使PBR纹理标准化。然而,在实践中,反照率摄影相当浪费时间,而且并不是所有的概念设计都有这样详细的参照纹理。








PBR纹理验证工具

非常重要的是:使用PBR(基于物理原理渲染技术),设计师需遵循同样的规则且生产质量一致的纹理。在《勿忘我》游戏中,为设计师提供一套验证纹理的工具。这些指南不是按一个代码执行的,因此扼杀了设计师的创造力。

这个验证工具是一套调试视图模式。它们仅仅是一种可以快速识别有问题纹理的视觉装置。

有些模式有一个可以识别潜在问题根源的色码。可用的调试视图模式有:

●反射率/镜面反射/法线纹理/粗糙纹理/仅光照

●反照率范围验证。颜色转变为CIE实验室颜色且亮度用于与反照率范围做对比(太暗或者太亮是根据不同颜色识别的)

●镜面反射范围验证。镜面反射值应取决于金属或非金属范围值。

●反射只用于核对反射系统和粗糙模糊度。






调试视图模式显示任何可能的问题

对于《勿忘我》游戏,设计师在转换使用PBR没有任何反对意见,但是许多设计师需要花一些时间计算如何按他们想要的方式获得合适的PBR纹理。纹理验证工具在生产制作过程中的使用导致一些本可以避免的错误。比如,镜面反射范围也不一定会受重视,纹理粗糙度有时候严重影响视觉效果。在生产制作后期,灯光设计师被要求制作一些在调试工具可用之前用于弥补劣质纹理的灯光效果。

不管怎样,PBR纹理创作过程总体上很成功而且设计师对这个结果也比较满意。



反射系统

《勿忘我》游戏发生在一个多雨的巴黎科幻世界。几乎每个曲面都会有一个反射倒影(间接光照的另一个命名)。对于现阶段使用的游戏控制器,它的反射精确度代价较高,尤其是当它是动态的且基于目前的相机视觉。《勿忘我》游戏的反射系统以快速为目标(由于PBR已经增加了着色器的成本)且被要求遵守UE3前锋渲染器的限制。这意味着不能访问一个正常缓冲区-----限制常见的屏幕空间反射技术的使用。

理论上,反射应该以光照映射的每个像素位置来计算-----一束由表面粗糙度和镜面映射方向限定的圆锥形光线。然后光照由每束光线/每个场景的几何体交叉点和BRDF双向反射分布函数平均值哔~。

为了使这个过程更加逼真,《勿忘我》游戏反射系统大量使用静态光照,它主要是建立在光线照射缓存的基础上的。这个缓存项是上面提到的立方体贴图。立方体贴图的数量是由场景中一些定位小子集计算的。之后在特定位置插入间接光照用glossy Fresnel合并这个结果。

在存储费用方面,立方体贴图并不是免费的,所以在整个场景中立方体贴图不能过于密集。为了减少所需立方体贴图的使用数量,它的内容可以根据操作位置作变通,因此提高了插入内容的质量。

《勿忘我》的游戏界面是内外混合的。就像一个市场它的面积很大且外部环境比较开阔,它需要的立方体贴图比一个小走廊所需要的立方体贴图少的多。立方体贴图的自动布局相当困难,因此,为了达到立方体贴图在游戏环境中的合理使用,它们由灯光设计师手动布局排列。




图片中用红色圆圈标注的部位显示立方体贴图的位置

游戏界面包含可配置大小的100-200个立方体贴图(从64*64*6到256*256*6的尺寸大小,大部分尺寸大小为128*128*6)。使用这种大量的立方体纹理贴图是合理的,因为当一个游戏玩家进入一个游戏场景区域时,这些立方体纹理贴图被流线型化且完全被压缩成DXT1格式。在游戏玩法预排期间,同步插入的立方体贴图纹理数量可能是40个左右。这需要一个约2.5Meg的存储容量。








使用最近的立方体贴图介绍光照接缝



遗憾的是,对于现阶段所使用的游戏控制器来说,在它的一个着色器内部哔~并插入多种弯曲的立方体纹理贴图代价太高。在《勿忘我》游戏中不可能再为每个物体的着色器提供不止一个立方体纹理贴图,使用最近的立方体纹理贴图可以引入不可接受的光照接缝。

因此,《勿忘我》游戏的反射系统使用一个可以被传送到物体着色器上的预混立方体纹理贴图。这种新的立方体贴图是由GPU根据当前信息点(POI)的位置处理的。这个POI(信息点)取决于环境,它可能是个相机、游戏玩家或者是游戏场景中的任何人物角色。它也可能是游戏动画中一个动画模拟的虚拟场景。

预混立方体纹理贴图避免大多数光照接缝的出现,但是它有明显的警告:只能考虑在一个位置使用,这意味着反射精确度将随着与POI的距离而降低。








预混立方体纹理贴图步骤

设计师可以根据具体问题具体分析将问题最小化:

●减少间接光照距离分散。这一特点主要结合LOD着色器系统。

●用一个固定的立方体纹理贴图覆盖这个立方体贴图。这个特点还允许通过增加专用立方体贴图的分辨率获得更多的镜面反射。

●对物体位置使用环境照明信息并将之与基于POI距离的立方体纹理贴图混合。这个环境照明信息可以是灯光贴图或者SH。

此外,由于立方体纹理贴图混合是在场景渲染之前完成的,那么就没有弯曲变形物体位置可用。对于这种局限性,反射系统有一个专用的解决方案。它主要用于像来自地面的平面反射,同时也是一个重要的游戏场景视觉提示。对于其他东西,一个没有弯曲变形的预混立方体纹理贴图被作为近似于粗糙纹理反射使用(固定立方体纹理贴图除外)。

对于混合立方体纹理贴图重量计算








两个球体的二维视图效果



为了有效地收集最近的立方体纹理贴图和为这种混合立方体贴图归属合适的重量,每个立方体贴图都有一个关联的影响体积。

它可能是一个球体或者一个定向的边界框(OBB)。这个影响体积需要可以在立方体贴图间进行平滑转换的重叠覆盖。

设计师也可以使用较小的影响体积尺寸表示一个相对重要的用处更多的特定区域。

当这个POI(信息点)处于一个影响体积内部的时候,要为这个预混立方体纹理贴图考虑相应的立方体贴图。属于每个立方体纹理贴图的重量基于影响体积的距离界限(如同一个相反的距离场)及它的尺寸大小。









这两个模糊的白色线框显示影响体积的位置,覆盖整个场景



弯曲的立方体纹理贴图

标准的立方体纹理贴图只为空间的单点提供精确的信息。由于视差方面的原因,在一个诸如创造视觉效果的平面几何体上使用立方体纹理贴图(反射物体并不是在合适的位置)。

问题是物体对象要在一个无限远距离的立方体上使用立方体纹理贴图。这个无限远距离立方体与平面周围环境不匹配。









以上两个图象中,左边图象的平面反射是错误的,右边的是正确的




这个解决办法比较类似于碰撞检测。为了使当前像素定位的立方体贴图发生变形,这就需要计算镜像方向与场景之间的交叉点。然后将计算结果用于调整从立方体贴图获取的光照信息。

过程如下:

●从观察矢量(V)和物体的法线向量(N)获取镜像方向(R)

●使镜像方向与场景几何代理服务器(图形上的一个盒子)相交

●检索光照信息基于立方体贴图(C)位置和图形表面粗糙度(WITH R’)

交集点测试需要相当快速,因此需要场景几何代理服务器。附属于一个立方体贴图的单个体积被用于表示周围环境。对于一个固定的立方体贴图而言,这个测试需要内部的物体着色器执行。因此使用到简单的球体和OBB。对于平面曲面,专用的解决方案允许更精确的凹体和凸体。在《勿忘我》游戏中所有的这些体积要求无视差体积,它们由光照设计师在内部编辑器上进行构建和布置。





天の川 发表于 2019-3-27 15:04:36

覆盖层显示非常粗糙的(快速的)代理几何体

平面反射

专用的平面反射解决方案需要设计师将一个反射平面(红色网格)与一个立方体贴图的无视差体积(白色的)相结合。






标准情况下需要在着色器内部做一个体积交集测试,对于平面反射,需要使用GPU光栅化程序。

从通过反射平面的反射相机的观点来看,将这个无视差体积栅格化可以提供交集点的结果。反射平面在这里充当平面曲面的虚拟位置。

任何种类的体积都可以按这个过程来处理,但是由于凹面的局限性,隐蔽形体可能产生人造物品。记录这个只与完全光滑的曲面一致的反射平面垂直的正确结果也很重要。曲面越粗糙,结果越不准确。






在有些情况下,光照设计师想要增强平面反射的效果。典型的情况是一个特定元素的亮度增加,元素规模在反射下显而易见,元素拉伸模拟金属表面亮度,凹面无视差体积的隐藏物体或者甚至是元素动画。在反射系统中通过图象代理服务器这是允许的。图象代理服务器是简单的四边形,要么是包含一个元素图象捕获或者是由设计师提供的一个图象。它们类似于广告牌或者是光卡,可以沿着轴线或是面向镜头作调整。



编辑程序上的图像代理编辑

从上面看到的结果如下图所示…注意地平面。



图像代理服务器有一个允许它们做模拟动画(比如火焰)的着色器,还可以与比如演员甚至是演员的骨骼这些动态元件有关联。由于演员经常是你想要提升效果的一个场景元素,从反射镜头的观点来看,他们是在一个立方体贴图顶部经过渲染处理的。

考虑到性能因素,平面反射解决方案不使用立方体贴图布局而使用一个简单的2D纹理。反射系统只对这个2D纹理的最大纹理映射进行渲染,其他的纹理映射由GPU生成。这意味着平面反射解决方案不像立方体纹理贴图那样使用一个精确的预集成放射纹理。这个2D纹理的分辨率为256*256足以有效地计算出纹理映射。

总之,反射系统有两部分组成,一个用于平面曲面(通常是地平面)的预混2D纹理,一个用于其他任何需要调整的预混立方体纹理贴图。

整个系统在PS3游戏主机上为两个立方体纹理贴图混合步骤耗费0.4ms到0.7ms。


深度解析《勿忘我》,游戏环境-第二部分:雨

页: [1]
查看完整版本: 深度解析“勿忘我”游戏环境 基于物理渲染技术 PBR