当前位置:   article > 正文

浅谈《原神》中的图形渲染技术

浅谈《原神》中的图形渲染技术

前言

在摸了一个寒假并且经历了【早上睡大觉,中午打原神,晚上英雄联盟,深夜看嘉然电棍炫狗大司马】的魔怔生活之后,终于决定来给自己的博客除下草,遂更新。

玩了一个月的原神,我注意到了一些图形与渲染上的不错的细节,于是打算分享一蛤。本文将从 猜测 的角度出发,谈谈《原神》中主要图形特效的渲染技术与优化方法。

本篇博客是杂谈类文章,仅代表个人猜想与看法,不保证正确,毕竟自己确实太菜,思路对不上米社的也大佬很正常 怎么我一开篇就搁这摆烂了

不说批话了,开始!

层次细节

首先注意到《原神》是一个开放世界的游戏,这意味着场景非常大,那么绘制的三角形数目也非常多!如何解决巨量的 draw call 是一个首要的难题!

场景非常大,这意味着一次性绘制所有物体变得不可能。别说绘制,就是把这些三维模型全部放进内存,显存中都很困难,毕竟游戏本体高达 30+ GB,而 NV 的老黄再怎么疯狂也不会造出一块 32 G 显存的显卡(谁知道呢,也许过两年就有了


事实上,大多数的游戏都采样 LOD 技术来解决这个问题。LOD 技术全名为 Level Of Detail,即层次细节。LOD 的核心思想就是 “好钢用在刀刃上”,即 为近处的物体分配较高细节程度的模型,而远处的物体则分配较低细节程度的模型,以达到减少资源消耗的目的。事实上不止模型,模型对于的纹理等信息也会做相应的 LOD 处理。

下图演示了不同细节程度的模型,较高细节程度的模型具有更好的品质,但是三角面片数目增加了,渲染的开销也增加了:

在现实世界中也是如此。如下的照片中,远处的楼宇表面的瓷砖变得无法分辨,而近处的瓷砖则非常清晰:

这告诉我们 无需为远处的楼宇绘制瓷砖,这也侧面证明了 LOD 技术能在不失真实感的情况下节省绘制的开销。


来看《原神》中的 LOD 技术,在游戏中 LOD 分为三个层次,即远,中,近。三个层次的模型及其纹理具有显著的区别。注意拱门模型从远到近变化:

可以看到随着距离的逼近,拱门的三角形面片数目逐渐增多,并且纹理逐渐清晰。

除了模型的 LOD,纹理贴图也具有 LOD,通过访问低分辨率的纹理以降低开销,下面是游戏中纹理的 LOD 效果,注意从远到近地上的白色纹理逐渐清晰:


如果你的眼睛足够锐利,可以察觉到 2 条纹理等级分割线。在不同距离切换使用不同分辨率的纹理。虽然 gif 被压缩了并不明显

纹理的 LOD 技术可以由显卡驱动负责,根据指定的 LOD 等级,以 2 的次方的大小来生成逐步缩小的纹理,这也是为何远处的物体纹理都非常 “马赛克” 的原因:

一张正方形砖墙生成的 LOD 纹理大概如下,纹理查询算法会按照我们的要求,去选取一张最合适的分辨率:

此外,在多光源光照的处理上,也使用了 LOD 技术。因为光照计算非常宝贵,没有必要为远处的非常小的场景计算宝贵的光照。此外,图形程序员还为 LOD 光源在最大距离处添加了一个线性的淡入淡出的效果,防止画面突然闪烁。注意远处的灯逐渐亮起:


层次细节技术能够给予场景更大的体量,同时保持低消耗。于是美工需要准备好几套不同层次细节程度的模型,在绘制之前,我们根据摄像机到模型的距离,来判断应该选取何种程度的模型进行绘制即可。

PBR渲染方程

PBR 又名 physically based render,即基于物理的渲染。是迪士尼提出的一种能够在实时渲染上面逼近真实图像的渲染模型。PBR 不仅能够以较小的代价获取很高质量的材质渲染感,而且一定程度上规范了模型素材的材质格式。下图是典型的 PBR 渲染效果图:

注:
图片引自博客 《PBR 渲染之你上你也行!》
好吧这只是个人翻译,原文叫:physically based rendering and you can too

在现代计算机游戏上,PBR 已经成为了一种标配的渲染方式,或者说一种 “流程”,在原神中也不例外的使用了 PBR 作为渲染,并且拥有一套自己的风格:

PBR 包括一套非常复杂的公式和其背后的物理原理,比如漫反射,镜面反射,菲涅尔效应等。下面细说。


在传统的 phong 光照模型中,简单通过光源和法向量的夹角,来获取一个点的颜色。对于所有的物体都有同样的公式,这意味着无法区别不同的材质。事实上传统的 phong 光照模型渲染出来的东西像塑料一样:

而 PBR 渲染则通过指定一系列的参数,来从物理上逼近不同的材质,从金属到木头,都可以通过美术设计者指定的参数与纹理进行规格化的渲染。PBR 的规范化流程表明,在美工制作完成 PBR 的素材之后,在游戏中也会有相同视觉效果。下图展示了 PBR 强大的模拟能力:

注:
图片引自 迪士尼的一篇 talk,是讲 BRDF 的,十分深奥
这种级别的 talk 不是我这纯种啥卵能够玩明白的,于是只偷了张图过来凑合一下。。。

来看一组《原神》中的截图:通过 PBR 渲染方程,可以模拟不同的材质表面。从左到右从上到下分别是石头,砖块,木头,瓦片,漆木,大理石。这足以秀一下 PBR 的肌肉:

在 PBR 中,通过一些规范化的纹理贴图,来描述不同的材质的参数,进而根据 PBR 的公式得出不同的结果,这些贴图包括:

  • 法向贴图
  • 金属度贴图
  • 反照率贴图
  • 粗糙度贴图
  • 环境立方体贴图
  • 环境光遮蔽贴图
  • 其他…

这些贴图提供的信息用以辅助 PBR 公式并且得出正确的结果。PBR 的难点就在于公式非常繁杂,下面给出 PBR 的基本公式:

L = ∫ ( k d C o π + k s D   G   F 4 ( N ⋅ ω 0 ) ( N ⋅ ω i ) ) ( N ⋅ ω i )   C l   d ω i L=\int \left( k_d \frac{C_o}{\pi}+ k_s \frac{D \ G \ F}{4(N \cdot \omega_0)(N \cdot \omega_i)} \right) (N \cdot \omega_i) \ C_l \ d\omega_i L=(kdπCo+ks4(Nω0)(Nωi</

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/579818
推荐阅读
相关标签
  

闽ICP备14008679号