转帖:解密照片级表现技巧(一些关于UE4建筑表现的废话)

同事推荐的一篇讨论性文章,才发现,我以前那边也是转帖的数据是从哪里来的.....


谈到的东西还是比较专业的,有几个参数,针对使用过渲染器的人来说还是很好理解的,不过还是有些疑问需要等待以后来解决....


把内容转帖于此,方便以后查阅回顾.....


各位老司机好,我是Alex,前几天分享自己的FPS项目文件的时候也说过会陆陆续续分享一些项目文件,供像我一样的菜鸟和爱好者学习交流。那么今天就分享一个个人的建筑表现作品。引擎的屏幕高清截图有BUG,让右边地上的桶变黑了,所以我就屏幕截图好了。


































































































































有些人觉得没必要较真,但是照片级的渲染或者表现难道不是较真才能达到的吗?再说回这个室内场景,整体氛围和光影效果相当不错,模型也很精致,可能是U3D的室内表现极致了,只是全局光照算法还不够完美,虽然在阳光充足的日景里并不容易发现光影的错误。可是再想提升怎么办?废话,用UE4啊!
然而有些同学发现自己用UE4做出来的和U3D差不多,比Vray渲染出来的静帧效果差太多了。放在几个小版本前,这确实不是你的错,因为之前Epic官方根本没想到会有这么多人想用UE4做建筑表现,而追求极致的艺术家们发现UE4的间接光照Indirect Light或者全局光照GI计算的并不准确,于是在论坛上关于Lightmass和BaseLightmass.ini配置文件中的参数展开了激烈的讨论和测试。包括来自Evermotion、UE4arch的各大神以及UE4建筑表现鼻祖Kooola大神
https://forums.unrealengine.com/showthread.php?88952-Lets-make-Lightmass-EPIC-(and-understandable)
此讨论引起了官方工作人员Daniel W.的重视,并且修改了光线追踪算法中的BUG,并且在4.11带来了lightmass Portal,使间接照明的质量大大提升。其实在第一个纯GPU渲染引擎Octane Render中早就有了portal material,用法也是放在每个进光口标出采光重点增加效率。另外4.11版本也加入了令人激动的Intel Embree照片级的光线追踪内核,构建光照时间缩短一半左右,一半啊亲们!!4.12又带了Planar Reflection,可以将曾经诟病已久的镜面更好的呈现了。然而4.12中,Evermotion和Kooola常用来模拟天光的反光板不能再用了,因为反光板类似于Vray渲染的时候在窗口补光手法。会增加不少的渲染时间,而且毕竟是模拟出来的天光,怎么能媲美Portal加天光的完美组合。So 官方也无情抹杀了这个做法(Actor hidden in game使反光板反射的光照也隐藏了,除非你想看到一个大白板在窗口悬着,没人阻止你。。。)
那么问题来了,在优化如此贴心的引擎中,该怎样利用好现有的条件制作顶级效果呢?

模型:控制面数,细节到位。光照UV好好展。Light map resolution看你对时间和质量的追求了。可以给地面/天花/墙壁 1024 获得更好的阴影效果,大点的家具256/512,小件128/64。没有固定值,灵活些。
材质:室内材质一共没多少种,资源很多教程也很多。增加真实感可以在粗糙度和法线节点中加一些划痕,脏印和污渍什么的,让物体从三维物体,变成带有岁月痕迹的四维物体。(窝草,突然觉得自己很能吹逼)
灯光:个人觉得是场景效果是否真实至关重要的地方,下文着重讲!
后处理:Post process volume是一个很好的艺术表达组件,但是也有使用技巧,后文也会提到。
BaseLightmass.ini:引擎的Config文件夹中的配置文件,参数影响构建灯光,追求极致可调整某些参数,下文讲。

前方高能:
追求真实,那就从现实生活中找答案。日景有阳光和天空光(白天开人造光都是土豪),夜景有天空光和人造光。日景以往的做法都是在窗口补Spot light,要不就是用Kooola的反光板套路来给室内提供足够的照明,但是现实生活中谁家在窗口放灯和反光板?这样的补光不仅增加构建时间,也使得室内和室外亮度或者光源完全不同,那这就不是现实了,也违背真实。所以如果你有Evermotion Vol1的五个项目源文件,你会发现有四个室内封闭项目使用了反光板,而沙滩边的建筑就没有用,因为使用反光板会露馅的,恰恰也是这个室内外结合的效果不如其他四个。让室内外受光相同的最佳办法也是最真实的办法就是只用Sunlight和Skylight,并且不要修改Indirect Lighting Intensity,默认值1是官方给出的接近真实的物理参数。当然可以修改两种自然光源的直接光照Intensity来满模拟不同的天气和光照环境。通过世界设置中强大的Lightmass来搞定你需要的间接光照和全局光照。一般情况下,我只调整四个关键参数,官方对其解释如下:




















我的测试和理解比较接地气——Static lighting level scale:默认值为1,小于1,阴影细节增加或者变密,构建时间增加。测试时可以取值在0.6-1,最后成品可取值在0.15-0.4,小于0.15没有明显区别,没有必要浪费时间。
Num Indirect lighting bounces:人如其名,就是间接光照反弹次数,反弹次数越多肯定计算的越精准,只不过后面几十次对效果没什么提升,但是不会占用很多时间,所以1到100都可以。建议30-50即可,50以上偶尔会遇到计算BUG,完全看脸。
Indirect lighting quality:依然人如其名,间接光照质量,那必须是数值越高效果越好,花费时间越多。测试时1-5即可,成品8-10。
Indirect Lighting Smoothness:官方解释的很到位,没有补充。测试时可以保持1不变,成品时,如果上面那个参数给的比较高,那么可以适当降低smoothness到0.75-0.8。
其他参数:
Use Ambient Occlusion:是否使用环境遮挡。我习惯用Post process volume中的AO,易调整,效果也不错。所以我一般不选这个。
Compress Lightmaps:是否压缩lightmap,我一般不勾选,质量和效果是我追求的。

关于Post process Volume:我觉得这个完全靠审美了,为了达到你想要的效果,慢慢调吧,PS不错的或者美图秀秀玩的6的可以修改LUT(我就喜欢用美图秀秀.....简单粗暴)。
Auto Exposure:Epic爸爸操碎了心,还帮我们模拟人眼对光照明暗变化的适应效果,那就用呗!保持默认。如果你需要增加Exposure Bias来提升屋内亮度,只能说明在现实中你窗户开小了!除非为了达到某些艺术效果和需求,你可以调整Post process volume中的任何参数。
AO:环境遮挡,通俗点就是接触边缘阴影,多数时候是墙拐角,由于光线在靠近角落处反弹能量递减,越来越弱就变黑了。调参数到你满意为止。Screen Space Reflection:重点,菜鸟我觉得SSR是UE4主要的反射算法,所以为了提升反射质量,可以在此处把Quality增加到100,Roughness我喜欢1。

关于BaseLightmass.ini:当你觉得灯光构建的效果还是有瑕疵,不能满足你,那么只有修改Config文件夹中的配置文件了,追求细节不是错。






















NumHemisphereSample:知道Vray的朋友们可能会知道发光贴图中的一个参数,Subdivs(模型细分)其实翻译不准确,应该是半球细分,和我们这个值道理是一样的,这个参数与消除光照的计算缺陷和不足有关。数值越高,越准确,当然也约耗费时间,下面是UE4arch大神做的测试对比,右侧墙壁上阴影有明显改善。另外:lightmass中的Static lighting level scale数值给的越小,越需要增加半球细分数来消除阴影BUG。 半球细分默认值16,可以在测试时给64,机器好的在成品时可以给256/512。










































































Num Irradiance Calsulation Photons:参与照度计算光子的数量,默认是400,绿字备注的意思是如果不追求和探索高质量,400足够给大家一个相对平滑的效果,但是这满足不了我们的!给4096!














关于这两个参数官方爸爸Daniel W.给出的解释如下:














我的理解就是光子每一次反弹后,只有一小部分光子会进行下一次反弹,所以在反弹2次后所剩的光子很少很少,每次反弹还会减少光子数量,迭代下去效果微乎其微,所以Indirect lighting bounces给的再大都不会影响时间。但是可以通过修改Indirect Photon Density和 Indirect Inrradiance Photon Density这两个参数来控制每次反弹后依然坚守岗位继续反弹参与计算的光子数量。同样道理,给的值越大,越耗费计算时间。但是可以有效减少出现的色溢,光斑和未知的光照计算BUG,国外大神做的测试对比如下:
我标出了有色益和光斑的地方,这种BUG多发生在物体相交处。


结论就是数值越高,消除的BUG越多,当然花费时间越长,所以国外大神给出了一组不同阶段的测试参数,用来平衡时间与质量。

测试渲染:
质量Medium
世界设置-Lightmass:
Static Lighting Level = 0.6
Num Indirect Lighting Bounces = 20Indirect Lighting Quality = 10
Indirect Lighting Smoothness  = 1.1
Baselightmass.ini :
NumHemisphereSamples = 64
IndirectPhotonDensity = 3000
IndirectIrradiancePhotonDensity = 1500
IndirectPhotonSearchDistance = 180

进一步渲染:
质量High
世界设置-Lightmass:
Static Lighting Level = 0.4
Num Indirect Lighting Bounces = 30Indirect Lighting Quality  = 10
Indirect Lighting Smoothness  = 0.9
Baselightmass.ini :
NumHemisphereSamples = 128
IndirectPhotonDensity = 6000
IndirectIrradiancePhotonDensity = 3000
IndirectPhotonSearchDistance = 180

最终渲染:
质量Production
世界设置-Lightmass:
Static Lighting Level = 0.2 (Below that we have not much impact)
Num Indirect Lighting Bounces = 100
Indirect Lighting Quality  = 10
Indirect Lighting Smoothness  = 0.75
Baselightmass.ini :
NumHemisphereSamples = 256 or 512 (above 512 will have not much difference)
IndirectPhotonDensity = 12000 (If there are still flickers of artificial lighting, increase this value along with the parameter below)
IndirectIrradiancePhotonDensity = 8000
IndirectPhotonSearchDistance = 180 (180 - 240)

有的同学用上面的参数构建完了发现,反射还是很渣渣,反射表面有很多颗粒状的东西,国外也叫grainy reflection。这个好解决,在控制台输入指令  r.SSR.Quality 4,注意4前面有个空格。但是如果大家觉得即使到最高级别4了还是有点点,并且你的显卡也很牛逼,比如我在公司电脑上有双路1080,那我必须冲击高质量啊!那么我就要修改引擎Shader文件夹中的ScreenSpaceReflections.usf这个文件。在最高质量4 中的参数步数以及射线数都是12,12。你显卡牛逼的话都调成64。吃不消就往下调。反正你会发现你的帧数会有明显变化。没有效果,那么修改完usf文件后,退出引擎重新进一次,然后控制台输入 r.SSR.Quality 4






























另外对抗锯齿有要求的同学,可以提高PostProcessVolume的抗锯齿级别,控制台输r.PostProcessAAQuality 6。基本上控制台输入了上面两个命令之后编辑器中的预览效果很牛逼了。如果运行游戏或者场景后效果消失或者有损失,那么在关卡蓝图中做下面节点。




基本上,理论的东西就到这里了。

下面可看可不看,是我对这次作品的一些把控。我没有完整的3DMAX场景,也懒得做,所以找了Evermotion的一个室内作品,是一个建筑设计工作室,也是我曾经学习和熬夜的地方,有点情感在里面。展UV工作室插件完成的,我比较懒,没有手动展。但是材质和场景氛围我花了心思,下面请看详解:

有了强大的天空光和全局光,可以看到左下角图纸在桌面上的反射,每个稍微凸起的模型细节所产生的阴影特别真实动人,眼睛上对环境HDR的反射,包括镜片厚度带来的折射感让我很满意。

没有评论:

发表评论