本文由微信公众号余的AchiCG(公众号ID:YU_ACG)授权在本站发布 若需转载,请联系原公众号
微信扫一扫关注该公众号
从预告片到产品正式发布
Lumion8都未曾让大家失望
甚至有不少人认为
其质量都赶上VRay这类渲染器了
下图摘自Lumion官网Showcase
漂亮的光照氛围
丰富真实的植被
下图来自热心的小伙伴
在保证高质量的同时,速度也是惊人的快
相比传统的离线渲染器
上面的室内4K单帧只需一分钟
而VRay很可能需要三十分钟
如此大的差距
是不是该卸载各种渲染器了
然而事实并非如此
Lumion8效果之所以好
离不开它巧妙的美术手法
正因为这巧妙
使其在高质量离线渲染和低质量实时渲染之间
找到了价值所在
不妨看看下面的短视频
Lumion8和“典型Lumion效果”的比较
这里要感谢老韩的助攻
过去的Lumion总给人游戏感太强的印象
就如视频所示
画面扁平、颜色炸裂
到底是什么让Lumion8能有这般进步
容我慢慢解释
SKY LIGHT
这个新增的功能
让真实感有质的飞跃
从室内到室外的过渡
层次感大幅增强
室外场景提升最为显著
其实这早就不是什么新鲜功能
在早些年
有游戏和软件已经引入这个元素
而描述该功能的常见名称是
Sky Visbility
也就是“天空可见度”
例如2013年e3发布会的《全境封锁》
下图截自全景封锁在GDC上的技术分享视频
全境封锁变态的实时效果
哪怕是发售后缩水
依然能让人眼前一亮
所以这个Sky Light
描述的其实是场景中
每个点所能看到的天空大小
可见度越低则越暗
如下图是被简化成二维的例子
P点的天空可见度为θ/π
有了这个明暗关系
让天空背景产生的照明得到了很好的描述
因为有大气层
几乎所有场景都会有天空光的存在
所以这个关系成了必不可少的部分
下面的例子来自Pinterest
正是因为这个关系不可缺少
没有了它就会显得“不真实”,有违视觉经验
再看看没了天空可见度的Lumion8
是不是像瞬间退回老版本
植被素材也仿佛倒退一个世代
有趣的是
它作为让Lumion8画面飞跃的重要功能之一
让不少小伙伴觉得这进步很神速
甚至觉得有点不可思议
而在渲染的历史中
却是个几百万年前就已经有的东西
既然原理都已经知道了
何不亲手做一个?
将连续的天空球拆成多个小灯
选择平行光以模拟遥远的天空穹顶
为了有足够平滑的效果
灯的数量必须非常多
而灯太多又会造成效率问题
所以每次只记录一盏灯的信息
最终合成平滑的结果
写个简单的脚本
在上半球上均匀地生成一千多盏灯
每次生成一盏灯并储存画面,最后删除灯
如此循环一千多次
我编程很不专业,就不放出来笑话了
最终实现了Skylight的效果
如图2560x1440的渲染过程只需10s左右
(其实是将4xMSAA的4K的RT压缩到2K,因为要暴力抗锯齿)
噪点和色阶是因为微信的压缩,实在无解
为了检验可靠性
我用VRay渲染了同样的场景
放置一盏默认的DomeLight并关闭间接光照
两者视觉上还是略接近的
且方法还有极大的改善空间
如果只用常规的SSAO
效果将大大大大打折扣
当然下图是特别差的那种
再试下稍复杂的场景
300W面的场景
2560x1440用了40s左右
几十行的代码,不到半天就做完了
而且也不算很慢
是不是很简单
而且这已经是极其落后的方法
来看看各种流行的做法
例如Unigine的AmbientLight
这是在1/30s完成2560*1440渲染结果
虽然这是基于屏幕空间的做法
但本质上也是为了求得同样的遮挡关系
以此提升画面的真实度
除此以外还有基于屏幕空间的GI
得益于实时生成的BentNormal
又例如HBAO
因为高效高质量,被很多游戏使用
如《刺客信条:大革命》《孤岛惊魂》《细胞分裂:黑名单》
但质量肯定不如Lumion的Skylight
毕竟这是能在1/60s内渲染完的
下图截自SIGGRAPH 2008:HBAO
又例如VXAO
比HBAO耗时要多个两三倍
需要预计算
又例如Neural Network Ambient Occlusion
神经网络AO
用深度学习计算出AO的分布
输入多个Depth,Normal和AO的组合来训练程序
成果还是很喜人的
同样的时间,NNAO能获得更好的结果
提升幅度大,性价比高
HyperLight
虽然HyperLight并不是Lumion8的新功能
但如果没有它,Lumion8画面也会大打折扣
所谓的HyperLight
指的是间接光照
在室内场景中尤为重要
最初的HyperLight不支持视频输出
最近的版本才改善了这一功能
想必大家也能猜到
之前一定是因为GI在动画中闪烁过于严重
至于它为何那么快
细心的各位应该能发现
HyperLight的精度其实非常低
它只能大致表现出一次反弹的光照效果
暗部的塑形大都靠SSAO和简单的环境光着色
不过这已经足够了!
毕竟用时极短
随手一调都能有不错的效果
这不正是设计可视化所要的吗?
达到类似上述间接光精度的方法
也不少
而且有不少是实时的
也就是说1/60s可能就渲染完了
例如Unigine的SSRTGI
是基于屏幕空间的GI
下图来自Unigine官网
它无需预计算
能在游戏运行时实时生成
虽然会有基于屏幕计算的一些固有缺点
又例如Light Propagation Volume
又例如VXGI
这里就不放图了
SHADOW
Lumion8的新阴影也是个重要的部分
相比老版本的阴影
新版增添的了SoftShadows和FineDetailShadows
这俩也是古老的技术了
第一个是软阴影
让僵硬无比的阴影变得柔和自然
有自然的软硬过渡
类似技术已经被各大游戏用到烂
例如大名鼎鼎的GTA
第二个是屏幕空间接触阴影
受限于Shadowmap的分辨率
一些细小的细节将无法投射阴影
这会让很多物体“浮空”,不真实自然
为了解决这一问题
可以直接使用屏幕的深度数据
结合直射光的方向
计算出小半径的遮挡关系
从而还原出细小物体的阴影
例如小草、铁丝等
这一技术也不新鲜
例如在前几个版本的UE4中也加入了该功能
Unity的类似插件也非常多
下面动图截自UE4官网
巧妙的美术
其实也没多巧妙
因为这已经是极其常规的处理方法了
粗糙地算完几个主要部分以后
就把图叠加在一起
直接光和HyperLight提供的一次反弹相加后
再和SkyLight相加
此时得到的结果依然有死黑的区域
所以要补上Ambient环境光着色
最后用SSAO给缺少立体感的环境光着色区域抠下夹缝
最最后调调颜色加些特效
大致就是这么个过程
看过我老教程秒图的小伙伴是不是感觉很熟悉
快速的抗锯齿
这点是我不太确定的猜测
望有了解的大大帮忙指正
看前几版和现在的画面
不少同学应该注意到Lumion的图不清晰
放大后有网格状
我个人猜测是应为抗锯齿方法的问题
一般离线渲染会用蒙特卡洛采样
计算物体的边缘等细节
让结果逼近真实
这个方法能让画面细节极其细腻
但耗时极长
最常见最粗暴的抗锯齿是超级采样
原理是将一张大图压缩成小图
例如成图需要1000x1000的尺寸
则在渲染时计算2000*2000的尺寸
但若需求的尺寸本来就很大
以至于超级采样的原图太大而无法计算
同时客观条件又不满足将画面分块进行渲染
这时候就可以使用次像素级别的偏移
也就是在渲染时将一个像素拆开成多个
在渲染多帧时每次渲染次像素的一个部分
最后将多张图合成一个平滑结果
其实可以理解为每一帧把摄像机轻微移动一点再渲染
这个抗锯齿思路就是近年流行的TemporalAA
有太多游戏在使用
Lumion应该也用了类似的思路
只不过是偏移采样位置时太大?
甚至根本不是次像素级别的偏移?
以至于画面像下图那样
当然这是夸张化处理了下
但无论如何
锯齿是已经去掉了
整体还是很棒的
总结一下
Lumion8能有如此大的进步
不能不说是一次飞跃
但也在情理之中
有些同学可能会有疑问
为何相关技术在其他领域已经那么先进
而Lumion却现在才达到这个高度?
估计是需求太低
能做到那般高度的团队
估计也不会着眼于的建筑可视化
毕竟有比这更有趣更赚钱的地方啊!
所以Lumion的团队非常值得敬佩
那是一群有想法而能力又强的人
比随便模改游戏引擎做可视化的公司强多了
以上皆个人看法
欢迎指正
|