11月2日是在日本兵库县神户会议中心召开的【SIGGRAPH ASIA 2015】的第一天,在游戏开发专门的研究会【R&D in the Video Game Industry】上,展开了【FINAL FANTASY XV】的物理模拟的解说会议【Physics Simulation R&D at SQUARE ENIX】。

原文作者:西川善司



负责演讲的 Witawat Rungjiratananon(SQUARE ENIX 动画研发工程师)

    Rungjiratananon,是从东京大学加入了SQUAR ENIX的第2商务事业部,现在是SE的自研游戏引擎Luminous Studio和FFXV的物理模拟的设计和开发人员。Rungjiratananon在东京大学时以物理模拟和动画技术的专门研究为主,即便是同样的主题,学术界和游戏行业里独特和不同的部分也很多。因此这次演讲,感觉也是加入从学术界跳入到游戏业界的感想的同时,介绍FFXV开发项目中携带的技术,以独特的结构展开。

学术界和游戏产业界研究文化的不同

    首先,Rungjiratananon是从学术界与游戏产业界的【研究开发的方式】的不同方面开始话题。
    学术界,是选择要研究和解决的主题   ,在把研究结果用沦为来发表的【动机驱动】的世界。



学术界,是以目的驱动来进行研究开发的

    另外一方面的游戏业界,开发中的团队是以想要做的表现为主题,为了实现一边参考已有的论文一边开发新的技术,是在游戏和游戏引擎中加入【成果驱动】的世界。虽然也有游戏业界的研究成果的论文发表,但发布论文并不是目的,最终还是以在游戏里实现为目的的。


游戏产业界中,是以成果驱动来进行研究开发的

    Rungjiratananon提出,作为游戏业界特有的研究开发特征之一的,就是【美术设计师的存在】。

    游戏业界的情况是,无论开发出多么优秀的技术,都是要有美术师来制作成果物的,如果引擎团队开放的新技术,美术师并不方便使用的话,就无法把结果反映到游戏里。因此,为了可以使用开发的新技术也需要配置方便使用的UI,为了满足美术师的要求而努力。


开发的新技术,要由美术师使用才能生效

    另外,物理不正确也可以,能表现出想表现的内容就是“正义”这点,也是和学术界不同的部分。
    游戏的话,为了可以看到效果,加入欺骗或造假也是允许的,与必须是物理正确的学术研究领域想比,是非常大的差异,

   对资源限制的严格这个问题, 在游戏技术里也存在。游戏中,需要实时的运行开发的技术,CPU和GPU的演算资源,并不能全提供给这个技术使用。AI和图形,以及其他要素要共用计算资源。总之,开发的新技术,必须要在和其他使用计算资源的游戏要素一起运动时,也可以使用。
   

游戏业界的【新技术开发】,并不要求物理的正确,而是要有说服力,看起来足够好。

    这样听的话,游戏业界的新技术开发,必须在各种各样的限制中来解决。

FFXV的布料模拟和毛发模拟

    接下来的话题是,FFXV中导入的物理模拟,首先,Rungjiratananon对FFXV中的【布料模拟】(Cloth Simulation)进行了说明。


布料模拟,是基于顶点还是基于骨骼来实现,FFXV选择了后者

    布料模拟的实现方法是,通常是生成对象的布料模型(例如衣服)的低多边形版本的模型,在顶点单位上进行模拟的方法。但是在FFXV里,为了把角色运动会翻弄布料的举动,在牺牲一些物理正确的同时,可以按照美术师的想法来运动,采用了在布料里加入骨骼的【基于骨骼的模拟】的方法。
    
    采用这种方法的理由,Rungjiratananon解释是“SQUARE ENIX的美术师更习惯在3D模型里配置骨骼”。



美术师想要运动的要素,也要预先准备好

    实际的FFXV中,把物理模拟的真实的结果,通过美术师以演出为主导来做Fake,取得运动平衡来表现,导入了像【0.0:软】,【1.0 硬】这样的骨骼运动的控制的正规化参数。另外,也加入了把实现准备好的手工制作的动画,与基于骨骼的物理模拟的结果做合成的方法。


把模拟的结果,通过美术师手动修改来取得表现平衡的结构也被导入了

    毛发模拟也是,导入了很容易反映美术师表演意图的结构

    关于毛发模拟,实现了头发随风的飘动,激烈的战斗动作中的摆动,这样柔软的毛发运动。另外,因为也有"角色特有形象"的漂亮发型不能破坏的“维持发型”的要求,和布料模拟一样,实现了通过骨骼来模拟毛发的运动的结构。


毛发是物理模拟来实现真实的摇摆,角色的发型不能崩坏。FFXV里,也需要对应美术师方面手动调整的要求。
    
    同时支持模拟的毛发运动和头发风格的维持,在毛发上,导入了可以灵活控制的【柔软毛发的约束条件】和【坚硬的毛发的约束条件】来对应


实现了可以让毛发变得柔软或坚硬的灵活的系统。

    使用这个系统,当角色接近静止状态时,要维持头发风格,毛发变得很硬,要漂亮的运动时,头发风格崩坏,更容易受到毛发模拟的控制。现实中的话,毛发是根据负荷移动和风力,不用关心发型的来运动,而游戏的情况是要重视角色的形象,优先漂亮的毛发运动而无视物理法则是很合理的。



根据角色的情况,变成【维持发型的硬的头发】或是【摇晃的柔软头发】

FFXV实现的风和草木的表现

    FFXV,因为是以开放世界为舞台的游戏,【风】也是重要的表现要素。在FFXV中,通过带有【影像范围】【3D方向】要素的Wave函数,实现了关卡设计师可以在游戏世界的任意场所设定吹风的结构。


FFXV XV,是看不出是程序化(Procedural)实现的风的表现为目标

    【设定Wave函数】的话,美术师制作设定数据很难。最后的方法,是在引擎团队开发了可以在关卡编辑器上绘制吹风情况的UI,提供给美术师使用。


只是设定Wave函数的话,美术师很难工作。



开发出用绘画UI的方式让美术师直观的设定风参数的结构

    这样,通过这种结构实现的随风飘动的草木,最初一看的话是有枝叶和茎的,而实际是在板型多边形上贴了草木Texture的Billboard。

    Billboard如何实现了【随风飘动】的表现?Rungjiratananon说明,是制作了用颜色的浓淡来表示【受风的影像的弯曲程度】的UI,通过视觉的来进行设定。设定的单位是顶点单位,对顶点颜色做设定。具体的,设置深色的顶点,更容易受到风的影响运动。

    还有,Billboard随风飘动时,在可以设定伸缩的上限。风到什么强度,草木就不会伸展,设定了控制过度伸长的结构。


板型多边形表现的草木Billboard的随风飘动的情况和伸展控制,也可以通过绘制来设定。

    还有,因为风的运动太有规则的话,看起来像作假的,在通过Wave函数生成风的强弱和方向上,导入了增加Noise的结构,使用【不规则的Texture】来给予风的强弱。例如用【V字形状分布浓淡的Texture】给予广阔草原上吹风的效果。可以做出草原在V字型上随风飘动的表现。


在Wave函数里加入Nosie,就增加了吹风的不规则性,尽管如此,还是有不足的情况。


为了表现立体的风的强弱,用浓淡Texture来设定强弱。通过这个,可以使用Texture给予的体积形状来让草木随风飘动。

    回过头来,因为草木是用Billboard来表现的,看到的枝叶也实际是板型的多边形。虽然倾斜的飘动,板型多边形也会倾斜摇动,但草木产生的阴影没有变化。FFXV里,在对受风倾斜的草木Billboard做光照时,旋转草木Billboard的法线向量,也加入了扰动的动画。



随风飘动的草木阴影的复杂变化的表现,是通过法线的扰动和旋转来实现的。

    完全是Fake的手法,因为法线方向是随着随风摇动的来扰动的,这样草木Billboard的光照条件每次都会变化,阴影也跟着变化。远处看的话,枝叶是以复杂的方向变化的,是相当好的方法。

研究者看到的【游戏业界快乐的地方】

    Rungjiratananon在会议的最后,通过SQUARE ENIX中FFXV的开发,总结了【游戏业界快乐的地方】 


Rungjiratananon所认为的,游戏业界快乐的地方
    
    一个是在各种混合环境中进行开发,最新的大作游戏,是由物理和数学,AI和光学等等,各种各种的计算机科学组合而成,作为研究主题非常的有挑战性

    另外,虽然基础方面还是有强硬派的科学技术,但通过这种的Fake和Trick,超越现实的【作出有很高说服力的假想世界】这点,也是游戏开发才有的魅力。

    除此之外,“使用顶级美术师制作的高品位角色3D模型,进行各种技术的实验也很有意思”,“各个领域的优秀人才,拿出各自专业领域的知识,协力同一个内容制作的过程也很有意思”等等,很热情的讲述了SQUARE ENIX中工作的快乐。

【FFXV】中物理模拟的结构以及游戏业界的乐趣的更多相关文章

  1. JavaScript中的分支结构

    说到JavaScript中的分支结构,我们就不得不提到流程控制这个词,我们所有的程序都是由数据和算法组成的.程序=数据+算法通常我们所说的算法都可以通过"顺序","分支& ...

  2. FPS中受伤UI在VR游戏中的实现思路

    FPS中受伤UI在VR游戏中的实现思路 希望实现的效果 这几天一直在尝试各种解决方案,现在算是不完美的解决啦,记录一下心路历程,思路有了算法都比较简单. V_1 玩家胶囊体指向的方向作为正方向,计算出 ...

  3. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

  4. IntelliJ和tomcat中的目录结构

    IntelliJ和tomcat中的目录结构   IntelliJ的官网帮助中心:http://www.jetbrains.com/idea/webhelp/getting-help.html   pr ...

  5. 通过jdbc获取数据库中的表结构

    通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类   1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等.Met ...

  6. [pjsip]Pjlib中的链表结构

    Pjlib的链表结构跟常见的链表结构有所区别,如下图所示: 图1:一般链表结构 图2:pjlib中的链表结构 可以看到一般的双向链表是链表节点包含数据域,而pjlib中是数据域包含链表节点.一般的链表 ...

  7. (续)一个demo弄清楚位图在内存中的存储结构

    本来续---数字图像处理之位图在计算机中的存储结构一文,通过参考别人的代码,进行修改和测试终于成功运行. 该实例未使用任何API和相关类,相信如果对此实例能够完全理解那么将有进一步进行数字图像处理的能 ...

  8. VSTO学习笔记(八)向 Word 2010 中写入表结构

    原文:VSTO学习笔记(八)向 Word 2010 中写入表结构 前几天公司在做CMMI 3级认证,需要提交一系列的Word文档,其中有一种文档要求添加公司几个系统的数据库中的表结构.我临时接到了这项 ...

  9. Java初认识--Java中的语法结构

    Java中的语法结构(程序流程控制) Java的语法结构有四种: 1.顺序结构. 顺序结构很简单,就是按顺序执行,输出就可以了. 2.判断结构. 判断结构的一个代表性的语句是if:if语句有三种格式体 ...

随机推荐

  1. 使用MySQL索引的几个问题

    1.索引不存储null值 更准确的说,单列索引不存储null值,复合索引不存储全为null的值.索引不能存储Null,所以对这列采用is null条件时,因为索引上根本 没Null值,不能利用到索引, ...

  2. ytu 1301:Excel地址转换(水题,进制转换)

    Excel地址转换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 41  Solved: 11[Submit][Status][Web Board] D ...

  3. Java Hour 22 I/O

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. I/O InputStream, OutStream, Reader, Wri ...

  4. Eigen相关介绍

    最近在用Matlab处理图像,现在要做的是将其用C++语言进行翻译,由于要进行大量的矩阵计算,就研究了一下可以进行矩阵计算的开源库,详细的介绍可以参照http://my.oschina.net/cvn ...

  5. OD hit跟踪 run跟踪使用问题

    刚学习OD不久,现在使用HIT跟踪 run跟踪功能,在我的程序里碰到点问题,还请赐教 选了一部分代码添加到HIT跟踪,在选的代码处设置断点,程序运行到断点,按单步跟踪,当执行到第二个PUSH时,程序就 ...

  6. 基于C#语言利用Microsoft.office.introp.excel操作Excel总结

    终于解决了质量评估测试软件在任意装有excel(2010以下版本)的电脑上正常使用的问题!!!!!!!!!! 可到http://www.microsoft.com/en-sa/download/con ...

  7. android—获取网络数据

    取网络数据主要靠发交易(或者说请求,接口等),而这些交易由java中的网络通信,HttpURLConnection和HttpClient实现,以下是具体例子.   大家都知道,网络通信,发送请求有两种 ...

  8. HTTP基础04--web服务器

    单台虚拟主机实现多个域名 由于虚拟服务器的功能,一台HTTP服务器可以搭建多个Web站点: 在互联网上,域名通过 DNS 服务映射到 IP 地址(域名解析)之后访问目标网站.当请求发送到服务器时,已经 ...

  9. Vijos 1180 (树形DP+背包)

    题目链接: https://vijos.org/p/1180 题目大意:选课.只有根课选了才能选子课,给定选课数m, 问最大学分多少. 解题思路: 树形背包.cost=1. 且有个虚根0,取这个虚根也 ...

  10. C#多线程与异步的区别

    随着拥有多个硬线程CPU(超线程.双核)的普及,多线程和异步操作等并发程序设计方法也受到了更多的关注和讨论.本文主要是想与园中各位高手一同探讨一下如何使用并发来最大化程序的性能. 多线程和异步操作的异 ...