游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1153|回复: 0

Lighting Techinology The Last Of Us

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2019-3-18 10:27:22 | 显示全部楼层 |阅读模式
v2-5f656bcd8abf13d6ebf855081cd98b57_1200x500.jpg

本篇主要讲述The Last of Us中用到的用到的光照技术,以及解决问题的思路,原作者wanicki是顽皮狗的引擎工程师,同时也参与了RealTime Rendering 4th的编写。

原文链接[http://miciwan.com/SIGGRAPH2013/Lighting%20Technology%20of%20The%20Last%20Of%20Us.pdf]

同时也要感谢下工作室大佬的解惑。

目录

•一.背景介绍
•二.最小二乘降低误差
•三.Lightmaps
•四.出现的问题和解决方法
•五.优化方法
•六.结论

一.背景介绍

由于游戏发生在后世界末日,几乎没有电,所以没有人造光源。大部分的光线来自太阳和天空,所以大部分的环境都是由反射光照亮的。

有一个非常强大的艺术方向:我们想展示这个灯光的美丽,它的柔和,它如何在不同表面之间传播,它创造的柔和阴影。我们想显示间接光照的镜面反射高光,并显示用普通的normal map展示细节。

首先展示一下我们想要达到的效果

image001.jpg

image003.jpg

image005.jpg

如图所见,所有的光线都很柔和,但同时表面细节也表现的很到位。

为了实现这样的效果,目前机器性能实时渲染是吃不消的,所以我们使用了预计算的光照贴图。虽然光照贴图应用了这么多年,但是还是存在一些根本性的问题。

二.最小二乘降低误差

image007.jpg

接缝:在三维空间中相邻的区域,映射到UV空间中时,可能在不同贴图的相交区域,如果沿分割线做插值的话,不完全匹配就会产生明显的接缝。(打个比方一个圆柱沿竖线剪开,展uv,竖线2侧在三维空间中可能是连续的,但是uv空间展开之后不连续)

常见解决方法:在运行时,花费额外的开销,去减弱接缝,或者对物体在uv空间中的位置做一些限制。

为什么没有用在The Last Of Us中:美术的体量不匹配,不适合当前的项目,效率低下,成本太高,无法集成到项目的管线中。

image009.jpg

我们发现,我们的主要矛盾就是接缝两侧插值不匹配的问题,所以我们通过了修改边缘纹理的强度,来让他们匹配起来

image011.jpg

如上图所示的例子,先介绍下概念,绿色和紫色是空间中的2个mesh,红点虚线是分割边,在这个分割边上,取了很多个点,Ci0表示绿色mesh中i点相邻4个像素的插值,在紫色mesh中同样有一个点Ci1,如果Ci0=Ci1最好,我们把同一个点在相邻mesh上的误差定义为他们的平方差

整个光照贴图的误差函数,就是各个点的误差之和。

当有了误差函数之后,使用最小二乘法,把纹理的值作为变量,优化过程,通过修改texel的值,确保误差最小,为了确保最后的结果不偏离最初计算的值,引入了一个约束惩罚计算值的偏离,这个值用户可以调配。

好处

•不用对UV布局进行更改
•没有额外的运行开销
•并且这种方法可以用在其它类型的贴图边缘融合

一些注意事项

•DXT压缩会打破一些精度,大多数情况看不出来,看起来是正常的,
•不要自己写线性解算器,有一些现成的轮子[Eigen]

额外补充

image013.jpg

如果你仔细观察,就会发现,最小二乘最小化,其实在其它很多地方用到过。比如游戏游戏中3D LUT(Look Up Table,直译过来就是查找表的意思。所以LUT的本质就是输入一个特定的值转化为一个对应的输出值)管线的颜色校正,流程如下

•截图
•在图片中嵌入问题
•在Photoshop中演算
•提取LUT
•在游戏中,渲染场景,提取LUT

比较的结果可能是,有严重的变色,这时候误差函数被定义为两幅图片中的平方差,通过修改volume texture使误差最小,会取得一个比较好的结果。LUT扩展阅读(https://zhuanlan.zhihu.com/p/37717976)

三.Lightmap新的表达

image015.jpg

回到灯光中,我们希望在没有直接光照的情况下,避免表面平坦,所以光照贴图中须要包含光照的方向信息。

我们评估了不同的方案,HL2(半条命)的Radiosity Normal Mapping,用6个方向的vec3来记录光照信息。(https://drivers.amd.com/developer/gdc/D3DTutorial10_Half-Life2_Shading.pdf)。

好处是相比SH(Sphere harmonic),计算量会稍微少点,但是用在曲面上,因为是插值的原因,细节丢失的会多一点。

目前2018年UE4和unity都用上了SH,在LightProbe和VLM里使用的SH9

sh9是指3rd order(1阶是1个系数,2阶是1+3=4,3阶是1+3+5=9),所以叫sh9

推导论文资料(https://www.ppsloan.org/publications/StupidSH36.pdf)

最后选择了一个简单的方案,为每个光照贴图同时存储Ambient(环境光)和Directional(方向光)。

image017.jpg

通过使用“环境光”+”方向光”的方案,有几个好处

•1.美术能很好的理解烘焙结果的输出
•2.某种意义上方便直接上手调整效果
•3.通过主光源的方向信息,可以创作一些额外的效果

image019.jpg

对于光照贴图的每个texel纹理,烘焙工具会有光照发布的信息,我们分为2个组件

•环境光部分:为单一颜色,各个方向强度相同
•方向光部分:包含一个反方信息和颜色信息(这里的颜色为,光在方向的强度)

我们通过GI bake的工具生成了SH(球谐函数sphere harmonics)lightmap,通过这样的方式(环境光+方向光)表示最终的效果。

通过这种表达方式,还可以表示表面的高光。

四.出现的问题和解决方法

看看效果,感觉还不错。

image021.jpg

虽然理想很美好,但是当我们添加了人物之后,有点蹦。

image023.jpg

image025.jpg

人物看起来很奇怪,为什么呢,因为人物在与环境交互的时候,会产生阴影,看起来是环境的一部分,而上图却没有。

image027.jpg

通过查阅一些资料,我们在sh指数化的论文中得到了灵感,用一组球体来近似遮光罩,并通过将它们以一种奇特的方式相乘,结合被描述为sh向量的可见性函数。

问题是要得到满意的阴影,需要高的sh阶。斯蒂芬·希尔在《分裂细胞》中用二阶sh对AO做了类似的事情。

image029.jpg

我们的优势

•结构简单,只有一个环境光部分和方向光部分,不用关心得到整体的可见性函数,可以分开2个部分的表示
•对每个部分,球面上的点,计算遮挡

o对于环境光部分,计算单位球在半球面遮挡的cos的加权百分比

o对于方向光部分,从目标点往球面创建一个圆锥体,检查光照方向和半球面的交叉点

image031.jpg

接下来是一些技术细节

•对于环境分量,有一个近似的解决方案,直接计算立体角的cos和整个半球cos的比值
•对于方向分量,是哟给你蒙特卡洛进行预计算,对于给定的圆锥叫theta,将采样区域概率密度转化到接受点立体角的概率密度

raytrace one week第三本和pbrt14.6章都有介绍。(https://computergraphics.stackexchange.com/questions/4288/path-weight-for-direct-light-sampling)

image033.jpg

圆锥的角度是可以调整的,可以让美术来控制阴影边缘的大小,

五.优化方法

使用SPU渲染到缓冲区

先通过使用SPU(主机平台的一种流处理器单元)去渲染阴影到缓冲区,GPU在渲染的时候,从缓冲区中读数据,再最终渲染出结果。

4-5个角色差不多要6-7ms,但是用了这种方法,代理分割到6个SPU单元,2ms就搞定了。

image035.jpg
使用低模代理去计算阴影

这样可以很好的提高运算效率,在测试场景中,模型精度讲到1/4,计算得到的阴影基本很难看出区别,非常有效。

image037.jpg

六.结论

•预计算光照还可以发光发热
•一些tricks可以使画面更好
•记得使用最小二乘
•不要自己写线性解算器

参考文献

•[Eigen]Eigen library:(http://eigen.tuxfamily.org/index.php?title=Main_Page)
•[McTaggart2004]"Half-Life 2/Valve Source Shading",Gary McTaggart
•[Good2005]"P[timized Photon Tracing Using Spherical Harmonic Light Maps",Otavio Good and Zachary Taylor
•[Ren2006]"Real_time Soft Shadows in Dynamic Scenes using Spherical Harmonic Exponentitaion",Zhong Ren et al.
•[Sloan2007]"Image-Based Proxy Accumulation for Real-Time Soft Global Illumination",Peter-Pike Sloan et al.
•[Hill2010]"Rendering with Conviction",Stephen Hill
•[Oat 2006]"Ambient Aperture Lighting",Christopher Oat and Predro V.Sander

作者:wanicki
编译:司虎虎
专栏地址:https://zhuanlan.zhihu.com/p/55925225
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-4-25 14:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表