【SIGGRAPH】【最终幻想XV】的战斗场景实时演示的要点解说
原文:西川善司
 
    SIGGRAPH并不只是非实时的CG的学术会议。从2010年的SIGGRAPH 2010开始,也有了聚焦实时渲染技术的称作【Real-Time Live!】的活动。
    
    在仅有的5分钟时间里,一边在实际演示的机器上运行程序,一边由演讲者进行解说,这个是Real-Time Live!活动所独有的特点。不光主题是实时渲染,连活动自身也是在实时的进行。
 
    在这次的Real-Time Live!上,很罕见的日本的SQUARE ENIX的【最终幻想XV】的开发团队也参加了,进行了【Real-Time Technologies of FINAL FANTASY XV Battles】(最终幻想XV战斗的实时技术)的演讲。
 
    进行演讲的,是第2商务部的高级程序员長谷川 勇氏和技术推进部的首席AI研发三宅陽一郎氏。
 
Real-Time Live!对应的战斗场景
 
负责演讲的長谷川 勇氏(左 SE 第2BD的高级程序员)和三宅陽一郎氏(右,SE技术推进部 首席AI研发)
 
Agni's Philosophy
 
    SQUARE ENIX在SIGGRAPH 2012的Real-Time Live!上,发布了【次世代的最终幻想目标图形的演示】【Agni's Philosophy】,并得到了好评。
    而这次FFXV开放团队在Real-Time Live!上的登场,也是把4年前提示的概念在实际游戏里运用结果的报告,所以得到了游戏开发者很高的关注。
    
    这里得到了FFXV开发组发布的影像内容,特别是真机上的数字录像的许可,这里对影像展示的概要做解说。首先希望先看下这个影像。因为演示机器输出的影像画质也非常高,光是看着就很有意思。
    当然这个影像还是在开放过程中游戏,产品版还可以得到进一步的改善。
 
 
【Real-Time Technologies of FINAL FANTASY XV Battles】的演示
Real-Time Live!上演示是真机上演示的直接录像的视频。一部分场景帧率会下降,是因为输出的是开发用的调试画面。另外,一部分表现和现在的最新版比要旧,残留了一部分没有调整到的部分。
 
    而且,虽然本作是在PlayStation 4和Xbox One上发售的,但演示使用的是开发用的Windows PC。演示机的硬件规格,CPU是【Core i7-5820K】,GPU是【GeForce GTX 980 Ti】,内存是PC4-21300 DDR4-SDRAM 8GBx4。

主人公们的服装使用实时布料模拟

    FFXV是开放世界类型的RPG,游戏舞台里,有怪物栖息也有魔法存在,是幻想要素很强的世界。但是在形成世界的物理法则上,和我们居住的世界设定得极为相近。关于这点,在以前发表的FFXV的视觉特效解说里也提及了。FFXV的图形主题是【有说服力的照片真实】,再现真实度上,开发团队激起了相当大热情。
 
视觉特效介绍部分的画面。即便是在魔法和怪物存在的世界,火与水的物理现象与现实世界也没有变化,这种表现是就FFXV视觉所追求的。
 
    那么,Real-Time Live!里公开的场景,是从主人公Noctis和他的伙伴们探索湖边草原的场景开始的。首先请先关注主人公行走和跑动的动画。
 
    行走和跑动的表现上,对应坐标移动来播放固定的步行动画在游戏中并不少见。但FFXV的步行动画看起来非常的自然。
    根据开发团队所讲,FFXV的角色表现非常讲究【接地感】。虽然在游戏内部的处理上,就是【配合坐标移动来显示步行动画】,但从实际的运动表现上看,左右脚的交互着地,双脚踩踏着地面前进的感觉,很好的传达过来。
 
脚踩踏地面向前移动的表现
 
    衣服的运动也要关注。跑步动作时飘动的不光是衣服的顶端,袖口打开的部分也会运动。还有静止时也是,可以注意到运动的余韵还残留在衣服的运动上。
    最重要的与身体接触的部分,向飘动着的前端部分很流程的推移着,可以很好的表现【穿着衣服】的影像也很厉害
    
    这些运动,是实时的用运动弹簧和基于骨骼的布料模拟来进行生成的。通过这个方法,Noctis上衣下垂的带子,在大腿向上抬起时被踢起,再现了飘动的动作。服装之间接触的表现也制作了。
 
    除此之外,主人公突然开始运动时,队友不是立刻就跟着跑动,而是先移动头部用视线追踪,然后再转移到跑动动作上也是关注点。
    虽然这次的Demo里,没有各个角色AI之间动画的相互协作,但接近岩石手会自动的放在上面,行进方向的草木,也会自动的用手推开。角色自身和游戏世界自发的交互表现上印象深刻。
 

支撑FFXV自然景观的技术

    主人公一行沿着水边前进,脚踩着水面时,以那为起点展现出波纹的表现也被绘制了。而且在成品版里,还会激起水花。
 
水边的景观。反射了周围的情景。
 
    水面不光是周围情景,连主人们的角色运动也被反射了。
    远处的反射,使用的是Cube环境贴图制作,而近景的反射,使用的是局部Ray Tracing的屏幕坐标系后处理特效【屏幕空间反射】(Screen Space Reflection,SSR)来实现。近景的反射上,有瞬间一部分角色轮廓被漏掉的情况,这个会在成品版里通过另外设定局部的Cube环境贴图来进行改善。
 
进入水里的Noctis,不光是自己的影子,睡眠也镜像的反射了角色。
 
    在演示里,相机朝向天空变得逆光。这里要关注的是天空和云的绘制。
 
    FFXV的天空,并不是【美术师绘制的纹理图像】。而是根据【太阳在天空的位置】,以及在大气中阳光的观测点(相机),一边模拟散乱空气中传递,一边实时的生成天气的颜色。
    FFXV的游戏引擎【Luminous Studio】里,输入时间的话,就会对应自动的生成天气。在FFXV里,日出和日落时接近地平线附近变红,正午时是深蓝的天空,也是天空模拟得到的结果。
 
天气是天空模拟自动生成的。晚霞时的红光,正午时的清空,也是通过计算来表现的。
 
    即便是无意中看到的云彩,也是需要介绍的。
    动画的空中漂浮的云,也不是美术师描绘的画像,而是程序化生成的。
 
    FFXV的云,是通过7层的噪声函数变化,用算法来生成的。通过这个方法,实现了volumetric(有体积)那样的云的分布。
    另外,云也会对应时间的流逝,改变种子参数,随时改变姿态。这种变化,也不是预先生成的动画,而是实时生成的。
 
    但是,volumetric那样的数据并不能直接作为CG来绘制,而是要从实际视点位置向定义云密度分布的结构体里投射射线(Ray),对应每根射线取得的云的密度值,决定云的颜色来渲染。
    而且还会考虑天空颜色和地表反射的光,以及太阳和月亮的直接光来进行光照。因此,接近太阳和月亮的云,会被照亮,云的上层反映天空的青色,云的下层多少反映地面的颜色。
 
    还有就是,因为云是多层形成的,可以看到下层的云密度高的部分变暗。FFXV里也是这样进行计算,云会生成自阴影。而且,云的轮廓也反映到生成阴影的阴影贴图(shadow map)里,地表上也有淡淡的云影。
 
    接下来的演示影像里,启动了调试模式,时间变快显示出了天空中太阳的运动。太阳运动的话,游戏世界的影子也会向太阳位置的反方向运动,天变黑的时候,背影也变长了。
    而且,天空从晴天状态向雨天状态切换的话,游戏世界下雨而全身湿透了。
 
FFXV采用了实时的天候系统,雨天时会产生水洼,角色也会变得湿润。
 
    变成雨天的话,坑洼的地方积水产生水洼,主人公们的衣服,也会增加黑色成为湿润的状态。虽然影像里不明显,但不光雨滴溅在地面上会产生小的波纹,也会和角色碰撞反弹。
   突然下雨时,有角色介意衣服被打湿,有角色仰望天空,让人很欣慰。
 
对下雨角色们的反应情况

战斗场景视觉值得一看的地方

    继续看影像。天气返回晴天,现在调试画面里出现了多个怪物(Garula),转移到了战斗场景里。
 
像是巨大水牛的怪物【Garula】出现
 
 
    到这里就是实时动作的FFXV的战斗系统演示。特别是要注意看下主人公施放火焰魔法以后的描绘。
    魔法产生的火焰,不光是给予了敌人伤害,也会在游戏世界的草地上燃烧蔓延,随着草地上火势的增加,怪物身体也被火势蔓延到,可以看到耐久力变低的怪物被烧黑后死亡。
    另外,这次演示里虽然没有,但火也会蔓延到小屋哪里,最后屋子被破坏。
 
施放火焰魔法,草原被燃烧,怪物身体也被火蔓延到
 
    这里,SE的员工再次操作调试画面,地表变成绿色,在画面中心打开了黑洞。这里帧率大幅大幅降低,因为这个调试画面是非常沉重的。
 
    这里显示的是【导航网格】来表示游戏世界是否可以移动的信息。
    绘制游戏世界的地形数据,是多边形来构成的,把这个绘制用的多边形数据,另外用来作为角色移动时参考的地形数据,在游戏方面作为他用的情况也很常见。这里把参考的地形数据中连接的三角形合并构筑成的多边形网格就是导航网格了。这里调试画面里看到的绿色领域,显示的是可以移动的地形。
    另外黑洞的区域,就是火焰燃烧的部分,表示在导航网格上写入【不可移动】。FFXV里,这个数据的变化AI的控制也会带来变化。
 
绿色的区域是可以移动的,黑色区域是不可以移动的
 
    邻接变黑的不可以移动区域的主人公和怪物,会根据AI积极的远离哪里。总之,Demo这个部分可以看到AI会主动的对应环境变化来采取行动。
 
    接下来,主人公发动冰魔法火就灭了,着火时无法移动的区域,也再次变得可以移动。因为冰魔法有让敌人的运动变迟缓的效果,可以看到怪物的动作也迟钝了。
 
Noctis发动冰魔法,附近结冰了
 
    演示里,虽然再次放火变成了燃烧的原野,但这次调试画面里把天气变成雨天。在影像里很难看出,但草原上燃烧的火焰被雨水浇灭了。
    魔法的火与冰,天气的雨的情况,FFXV的游戏世界里,各种素材也和现实世界那样,拥有着强弱关系。
 
雨中发动火焰魔法,威力降低了
 
    动画最后,主人公使用召唤魔法招出了巨人【泰坦】。从远处出现的泰坦,摇晃着山一样的巨大身躯跑过来,向地面的怪物用愤怒直拳招呼上。
    这里是享受动态战斗表演的部分,另外也有其他值得一看的内容。
 
召唤魔法呼出的突破云际的巨人泰坦。拳头砸在地面上,地面隆起战场上的怪物全灭了。
 
    这里远方出现的泰坦,可以很好的在主人公们的游戏世界出现也是要点。
    FFXV的召唤魔法,并不是简单的播放CG视频,泰坦是和主人公们出现在同一个游戏世界,相机也是从出现场所向战斗区域流畅的移动。不会有泰坦读取和相机切换的影像卡顿。
    最重要的是,比主人公更加巨大的泰坦是在同样的比例尺下,在同一个游戏世界里存在这点上。
    
    另外,认真看视频的话,泰坦在向主人公哪里跑动过程中,有脚插入到岩石里的情况。这个是因为是开发中版本的问题,最终版会很好的跨过岩石。

实时演示让对游戏的期待更高

    这次Real-Time live!展示的是FFXV的游戏图形要素,当然这只是一部分而已,要是说【把近代游戏图形技术全部加入】的话,还有很多值得一看的图形和各种技术。
    SIGGRAPH 2016上,虽然进行全部6个FFXV相关技术会议,但这些都是非常有兴趣的内容,接下来也会跟踪报答的。
    喜欢动作游戏而没怎么玩过最终幻想系列的笔者,也开始期待2016年9月30日的游戏发售。
 

【SIGGRAPH】【最终幻想XV】的战斗场景实时演示的要点解说的更多相关文章

  1. 《最终幻想XV》中角色AI的意识决策系统解析

    http://gad.qq.com/article/detail/7155321

  2. hexo建立github,gitcafe博客并实时同步的要点

    把hexo博客的源码和生成的页面实时同步到github和gitcafe. 用搜索引擎搜索"github 博客"等关键字会出现大量很好的文章教小白一步步搭建.我这里列出一些关键点,希 ...

  3. java 线程 被相互排斥堵塞、检查中断演示样例解说----thinking java4

    package org.rui.thread.block; /** * 被相互排斥堵塞 就像在interrupting.java中看到的,假设你偿试着在一个对象上调用其synchronized方法, ...

  4. 实时数据显示--SignalR实例演示

    近段时间,有实现一个看板的功能,就是用户更新信息时,即是对数据库的数据进行插入,更新,或是删除时,在墙上的屏幕的数据不需要人为去刷新,用户就能看到更新后的数据. 实现此功能,Insus.NET使用Si ...

  5. git分支管理和工作流规范:不同场景细化和演示

    https://www.iteye.com/blog/qqtalk-2415889 前两篇介绍了 git基本概念 和 具体的规范,本篇针对不同的使用场景做演示. 分支 分支命名 master 分支名称 ...

  6. SignalR2简易数据看板演示

    软件环境: 1.vs2015.windows7..net4.5 演示说明: 当点击按钮的时候,柱状图数值加1并实时变化 1.首先打开vs2015创建一个mvc项目,并安装SignalR2,具体操作可参 ...

  7. 采用异步来实现重新连接服务器或者重新启动服务 C#中类的属性的获取 SignalR2简易数据看板演示 C#动态调用泛型类、泛型方法 asp .net core Get raw request. 从壹开始前后端分离[.NetCore 不定期更新] 38 ║自动初始化数据库

    采用异步来实现重新连接服务器或者重新启动服务 开启异步监听,不会导致主线程的堵塞,在服务异常断开后一直检测重新连接服务,成功连接服务后通知各个注册的客户端! #region 检测断线并重连OPC服务 ...

  8. Nginx从入门到放弃-第3章 场景实战篇

    3-1场景实践篇内容介绍: 3-2 Nginx作为静态资源Web服务_静态资源类型: 3-3 Nginx作为静态资源web服务_CDN(内容分发网络)场景: 3-4 Nginx作为静态资源Web服务_ ...

  9. 当课堂因监控技术变“囚笼”,存在争议的AI使用场景该被抵制吗?

    当马云和马斯克高谈阔论AI是否会影响人类社会时,尚无"感情"的AI已在校园中"作恶".近日,一张AI监控课堂的GIF在网上迅速刷屏.这张GIF中记录了课堂中所有 ...

随机推荐

  1. mysql取前取后

    SELECT * FROM (SELECT * FROM 表 WHERE id<居中的ID ORDER BY id DESC LIMIT 5) as A UNION all SELECT * F ...

  2. GCC 编译优化指南(转)

    GCC 编译优化指南(转) http://www.jinbuguo.com/linux/optimize_guide.html 作者:金步国 版权声明 本文作者是一位开源理念的坚定支持者,所以本文虽然 ...

  3. Magento 创建新的数据实体 model 、 resource 和 collection 文件

    一.创建model文件 class Bestbuy_PrepaidCard_Model_Used extends Mage_Core_Model_Abstract {       protected ...

  4. java类读取properties文件

    package com.bshinfo.el.userInfo.util; import java.io.BufferedReader;import java.io.File;import java. ...

  5. 解决Delphi图形化界面的TEdit、TLable等组件手动拖拽固定大小,但是编译之后显示有差别的情况

    经常遇到这样的情况,在我们使用Delphi的可视化工具进行UI设计的时候,我们拖拽TEdit或者Label组件,并且在可视化界面上设置它们的长.宽 但是当我们编译和运行程序的时候,却发现真正显示出来的 ...

  6. 字符串数组初始化0 与memset 0 效率的分析

    转自:http://www.xuebuyuan.com/1722207.html 结合http://blog.sina.com.cn/s/blog_59d470310100gov8.html来看. 最 ...

  7. Asp.net导出Excel(HTML输出方法)

    主要思路: 实例化Gridview,将值绑定后输出...(用烂了的方法) 贴上核心代码: public static void ExportToExcel(DataTable dataList, st ...

  8. android:ellipsize的使用(转)

    EidtText和textview中内容过长的话自动换行,使用android:ellipsize与android:singleine可以解决,使只有一行. EditText不支持marquee 用法如 ...

  9. html学习第二天—— 第七章——CSS样式基本知识

    外部式css样式,写在单独的一个文件中外部式css样式(也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css”为扩展名,在<head>内(不是在<s ...

  10. python 线程之 threading(二)

    在http://www.cnblogs.com/someoneHan/p/6204640.html 线程一中对threading线程的开启调用做了简单的介绍 1 在线程开始之后,线程开始独立的运行直到 ...