《最终幻想》的渲染技术

时间:2023-02-02 14:52:56

《最终幻想》的渲染技术

link:

http://game.watch.impress.co.jp/docs/news/20121129_575412.html

http://psv.tgbus.com/news/ynzx/201306/20130617142700.shtml

http://blog.sina.com.cn/s/blog_6ad33d3501014wad.html

12年时候的最终幻想的技术demo可以说让很多人眼前一亮,这里是其中的一些技术,原文是日文,后面一些国内的翻译也不错。


总体看下来,可以说在业内具有相当的先进性,在局部也有一些自己的理解和不同的做法,很棒!


pipeline

场景是500w到1000w三角形,texture占1.4g到1.8g
数据流程:
《最终幻想》的渲染技术
其中出现了速度过慢的问题,解决办法:

  • 使用二进制导出
  • 多个pc一起并行来转换fbx
  • 一些巨大的数据放弃使用perforce
优化 drawcall合并,开始是各种材质都上,所以不可避免的drawcall过多,然后把材质进行了合并,drawcall大幅度下降,带来的gpu stall也降低了
  • 不过文中没提,gpu stall应该来自其中状态资源的切换,而不是纯粹的drawcall导致
  • 对比下gpu stall的图:
  • 《最终幻想》的渲染技术《最终幻想》的渲染技术
把skinning的结果cache也会有很多的性能提升
shading:大部分场景等使用通用shader,人物等重要的东西使用特别的shader
光照
全局光照:
  • 静态物体,lightmap:保存spherical harmonics系数的light map(bungie在halo中的做法)
  • 对于动态物体:irradiance volume,使用spherical harmonics来存储数据
AO
  • 有类似《分裂细胞5》中的object based ao
  • 《最终幻想》的渲染技术
皮肤
screen space subsurface scattering

光照来源有直接光照,有来自irradiance volume的indirect diffuse lighting,有来自envmap的indirect specular lighting
specular lighting model:kelemen szirmay模型
specular光照有两种,干燥的皮肤来源有irradiance volume和envmap(进行blend,有点奇怪),潮湿的specular是只有cube map,结果很棒,可以模拟流汗和流泪的效果
《最终幻想》的渲染技术
《最终幻想》的渲染技术
人物的ao是有预先cook好的,也有screenspace ao(这里说的不是很清楚,好像是都有),作用方式不是典型的color(1-ao)而是color=pow(color,1-ao)
皮肤上面有back scatter效果:
《最终幻想》的渲染技术

眼睛
眼睛渲染,parallax mapping来模拟眼球水晶体对于瞳孔的折射,眼球表面和眼球内部使用不同的bump map来计算specular,眼球表面使用了cubemap《最终幻想》的渲染技术
《最终幻想》的渲染技术
《最终幻想》的渲染技术
《最终幻想》的渲染技术

头发渲染:

光照模型是Marschner,有nurb曲线,有tessellation。

头发specular是有2个specular,加上cubemap,算是有3个specular lighting在起作用了:

《最终幻想》的渲染技术

头发的阴影,是使用专门的一个低精度的geometry来产生阴影:(图中是用于产生shadow的geometry)

《最终幻想》的渲染技术

阴影计算的时候会考虑距离来修正pcf kernel。

头发的边缘模糊使用的是msaa+fxaa+dof来达到的。


各向异性的布料材质

内容没说,看下对比图吧:

《最终幻想》的渲染技术

《最终幻想》的渲染技术