ue4 离线渲染_[译]Real Shading in Unreal Engine 4(UE4中的真实渲染)(2)

利用假期接着把剩下的部分搞完吧,其实,纯粹的翻译应该还是比较简单的,但是,为了更好地理解,我一般都会多找一些资料来进行互相印证。在上面一部分Shader Model的改变过程中,我主要是参考了一些PBR的实现原理的论文,下面关于材质和Light这部分的,我把《寒霜》引擎针对PBR修改的论文放在一起对照着看。感觉《寒霜》那边写的会更细致,UE这边,感觉有点为了写这个东西而写这个东西,如果大家看不太懂,推荐大家去阅读EA的寒霜引擎的论文。《Moving Frostbite to Physically Based Rendering 3.0》,这是在SiGGRAPH 2014年大会发表的。好了,废话不多说,开始干活。

为了大家看起来方便,先把第一部分的链接放在这里。凌霄:[译]Real Shading in Unreal Engine 4(UE4中的真实渲染)(1)​zhuanlan.zhihu.com

2.3、材质模型-Material Mode

我们的材质模式是迪士尼的材质模型的简化版本,着眼于实时渲染的效率。限制参数的数量对于优化G-Buffer的空间十分重要,减少贴图的空间占用和存取,并且最小化在像素着色器中混合材质图形的成本。

下面是我们的基础材质模型:基本颜色BaseColor  单一颜色。更容易理解的概念

金属度Metallic    不需要理解电介质和导体的反射率,更少的错误空间

粗糙度Roughness   它的概念非常清晰,相反的是光泽度gloss通常需要解释

Cavity 用于表示小规模的遮蔽(这个似乎在最终的版本上,并没有出现)

基本颜色,金属度,粗糙度与迪士尼的模型相同,但是Cavity参数并没有在Disney的模型中被提及。所以我们来重点介绍一下Cavity。Cavity用于指定比运行时阴影系统能够处理的几何体更小的阴影,通常是由于几何体只存在于法线图中(译者注:这句话翻译的比较绕。其实应该是说,由于这些几何体的渲染很多都是依赖法线贴图来表现一些细节,但是,Cavity要求的会更精细。)。例如地板板之间的裂缝或衣服的缝隙。

最值得注意的遗漏是Specular参数。实际上,我们在完成Infiltrator演示之前一直在继续使用这个参数,但最终我们并不喜欢它。首先,我们觉得 "specular "是一个很糟糕的参数名称,它造成了很多混乱,而且在一定程度上不利于从艺术家控制镜面强度到控制粗糙度的过渡。艺术家和图形程序员都普遍忘记了它的范围,以为默认值是1,而实际默认值是Burley的0.5(对应4%的反射率)。Specular被有效使用的案例几乎都是为了小范围的阴影处理。我们发现可变折射率(IOR)对于非金属来说并不重要,所以我们最近用更容易理解的Cavity参数取代了Specular。非金属的F0现在是一个常数0.04。(译者注:引擎中依然使用镜面反射参数,镜面反射参数输入范围[0,1],默认为0.5,F0的值为镜面反射参数*0.08。后面关于为什么没有取消,也有介绍。)

以下是迪斯尼模型中的参数,我们选择不在我们的基础Material Model中采用,而是作为特殊情况处理。(译者注:下面简单介绍了一下不采用的原因,有一些是开销,有一个干脆是不知道Disney的哥们是咋做的。呵呵。。。外国人也挺实在。)次表面Subsurface   阴影贴图的采样不同

各向异性Anisotropy  需要更多的IBL采样

清漆ClearCoat     需要双倍的IBL采样

辉光Sheen      在Burley的笔记中没有很好的定义

除了Subsurface之外,我们没有在生产中使用过这些特殊情况下的模型,而Subsurface在我们的Elemental演示中被用于制作更好效果的冰。此外,我们还有一个专门针对皮肤的着色模型。在未来,我们正在考虑采用一种混合Deferred/Forwarding着色方法,以更好地支持更多的特殊着色模型。目前,我们采用的是纯粹的延迟着色方法,不同的着色模型是通过存储在G-Buffer中的着色模型ID的动态分支来处理的。(译者注:从UE现在的代码中看,它支持布料-Cloth、头发-Hair、眼睛-Eye、双面树叶-Two sided Foliage、预积分皮肤效果-Pre-Integrated Skin、次表面分布图-SubSurface Profile效果等。当然,从材质模型和提供各种不同的效果实现,这还不是一个概念,但是,利用UE选择的材质模型,至少能比较好地支撑很多效果的实现。)

2.3.1 Experiences 体验

有一种情况,我现在已经经历了好几次了。我会告诉刚开始过渡到使用不同的Roughness的艺术家,"像以前使用SpecularColor一样使用Roughness”,不久后我就会听到兴奋地惊讶地说道:"这下好用了!" 但后面有一个有趣的评论是:"Roughness的感觉是反的。" 事实证明,艺术家们希望看到他们所创作的贴图是按照下面的规律来展现的-更亮的纹素等于更亮的镜面高光。如果图像存储Roughness,那么明亮相当于更高的Roughness,而这将导致不那么强烈的Specular效果。(译者注:后面这半段是在解释Artist为什么觉得是反的。)

我还收到过无数次的问题是:”Metallic是二元的吗?(译者注:表示非0即1)”对于这个问题,我最初会解释混合材料或分层材料的微妙之处。后来我了解到,最好是直接说 "是的!" 原因是一开始的艺术家们不愿意把参数设置成绝对值;我发现金属的Metallic值为0.8的情况很常见。接下来讨论的Material Layers,应该是描述99%的情况下Metallic不是0就是1的方式。

在过渡过程中,我们也遇到了一些问题,这些材质将不能再被复制。其中最重要的一组问题来自于目前Epic公司正在制作的游戏《Fortnite-堡垒之夜》。《Fortnite》采用了非真实感渲染的艺术方向,并特意使用了互补色的漫反射和镜面反射,这在物理上是不可行的,也是我们的新Material模型中故意不能重现的。经过长时间的讨论后,我们决定继续支持旧的DiffuseColor/SpecularColor作为引擎切换,以保持Fortnite的质量,因为当时Fortnite已经进入开发阶段。但是,我们不认为新的模型会像迪士尼在《Wreck-It Ralph》中使用的那样,排除了非真实感的渲染模型,我们打算在未来的项目中继续支持使用非真实感的渲染模型。

2.3.2 材质分层-Material Layers

与我们之前的方法相比,将来自于共享库的Material Layers进行混合提供了许多好处,之前的方法是单独指定材质的参数,而在新的方法中,这些参数的值来自于为每个特定模型制作的纹理。

- 在多个Assets中复用以前的工作;

- 减少了单一Asset的复杂性;

- 统一和集中了游戏外观所使用的材质,使美术和技术方向更容易。

为了完全接受这种新的工作流程,我们需要重新思考我们的工具。虚幻引擎在UE3的早期就有一个基于节点图的材质编

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值