游戏开发中的过程化生成技术(Procedural Generation)让开发者能使用少量的代码,生成一个无限可能的空间,随着目前大世界沙盒生存游戏的发展,PCG相关的技术刚开始在国内大公司引起重视没几年,尽管这种理念已经在国外作为游戏工业化生产的标准,以前国内传统的场景制作流程一般还是先出个layout白模,然后由场景地编将游戏世界中的一草一木都是手工精心调整,需要大量的人力来维护和更新,一旦遇到整个场景的迭代,所有时间与过程将浪费,大量成本人力会急剧的上升。不同这些的是PCG的理念是通过配置一些生成的规则,然后由生成算法自动去生成游戏世界,运用得当可以进行快速迭代,节省大量的美术的工作量和成本。它的完整的设计的目的就是为了允许在项目的任何阶段都可以进行快速的迭代。

对于技术的使用通常需要在游戏的原型设计阶段开始介入,从游戏大世界内容制作到游戏批量内容迭代一直贯穿,在制作流程上,需要拆分成不同的模块进行制作,这样不同模块之间可以根据需要相互协同,并且有可以进行复用。从介入时间和模块化划分的好处是可以保证整个流程的制作是与项目所需的美术风格是一致的,同时可以根据必要的美术需求进行定制化工具的开发,而作为整个工具链的目标产出是帮助美术可以使得所有内容通过极少的参数和输入进行控制并以这种方式来加速美术内容的制作。希望使得在相同的参数的输入下,输出的内容一定是完全一致的。

我们在实际的操作中可以把所有的美术制作内容都可以归类到几个不同的抽象层,按照不同抽象层之间的依赖关系,制作每一个抽象层本身的生成规则,当每一层的规则足够复杂时,就可以一定程度上去仿造美术的制作流程,综合所有抽象层的输出,完成对一个完整游戏关卡世界的按照规则参数的输出。

抽象流程

而在实际的操作时候不同的分层之间其实是有依赖关系的,必须需要按照依赖关系来处理。生成的时候需要要遵循一定的顺序进行比如道路的生成是需要地形相关的数据,而后道路的生成又为村庄的分布提供了基本数据;再比如需要根据地理环境的数据例如草地、土壤、岩石、房屋等分布,来布置整个世界上的草地、树林和沙滩的位置。

下面说说我们在游戏项目中实践的Pipeline,基本可以归纳为五步走:

1.游戏概念设定:为了保证整个场景风格一致,需要统一的概念设定和参考,通常由原画和文案一起给出相应的概念稿给KFZ全员,统一大家对于游戏的认识

2.分析建立规则:其实对于大部分的设计都可以转换成一系列规则,手游账号买卖平台关卡美术或者关卡策划用自然语言提炼出相应想做的世界的规则,这些规则比如:高纬度的树应该比低纬度树矮,道路两边草应该比较稀疏,并且有大量裸露地面。有了这些自然的规则TA或者程序才能去分析,然后根据这些规则去构建程序化的分层规则,从而构建出规则引擎。

3.模块化划分:第二条的规则既然已经可以被程序所表达出来,那么通过这些规则就可以制作对应的模块了,我们的规则越丰富则效果越接近预期,模块的建立辅助引擎搞定从美术的DCC到正式可用资源之间的桥梁。比如公路这个模块就可以拆分为:直线公路组件,弯曲公路组件,十字路口和三岔路口模型组件,已到达生存公路的目的。

4.关卡布置与参数调整:完成的模块组件可以通过mask图或者曲线划定区域在场景里大量布置,并通过对应的参数进行调整。

5.最终效果调整:最后必然会存在需要美术或者关卡策划特别关注和表现的区域,这里就需要人工进行干预了,由人来对最后的效果进行细化来提升,保证最终的交付效果。这样的区域也可以提前就MASK图层建立,防止在自动化生成结果冲掉这些需要特殊表现的区域。

最后以我们熟悉的FPS大世界类游戏为例来说说实际开发中的阶段的划分:

1.游戏开发初期:这个时期我们需要快速验证游戏的原型,确认游戏的风格,前期就可以快速的自动生成整个包括植被、道路和村庄布局的8km*8km的地图,这样就可以帮助策划就可以对玩法和地图进行快速想法的验证。

2.堆量和细化中期:这个时期主要是量的产出问题,由于规则建立的靠谱那么全地图的树木、灌木和各种掩体以及所有刷新点的密度和分布都是通过几个参数快速调整的,还可以快速填充野外非建筑区域的资源量。

3.全地图效果后期:这个时期主要是配合测试反馈进行各种细节的调整阶段,内容包括了根据反馈调整障碍物、掩体密度,根据优化反馈调整全地图过于密集的物体,在上线前快速大量添加延期的外包美术物件,根据已有场景物件大量布置三级物件,如果有需要还可以做对全地图的所有树木密度和分布进行了大规模重新分布。

技术本身看似美好,但是想要做好也是蛮有挑战的一件事情,下面几篇是近几年来在GDC上分享的很有价值的文章,大家可以一看:

从上面那些大作中可以获知模块化工具的技术积累是非常有必要的,这就要包括积累日常美术制作流程相关的工具,以提高制作效率,积累复杂关卡的生成逻辑来实现更高质量关卡的制作。所有的工具都需要考虑以减少美术制作人员的学习成本为目的,最好能帮助美术在制作时加快预览效果与实际效果对比和最终资源的生产效率,而做好所有这些真的不是靠一两个项目就能够一蹴而就的,它需要一个长期探索与摸索的阶段,还需要一直稳定且互信的团队。

最后说点题外话,如何在游戏项目中推进一个新的事物,那么你就需要把基本的道理说透彻,且让团队成员都能明白这个道理是对的,如果团队成员不理解靠强压推进的方式也是不行的,到后来只会出现相互的抱怨,每个人的角度和立足点毕竟是不同的,还有就是有成功项目去支撑你的观点肯定能事半功倍,当然你如果有足够的个人影响力那是另外回事情,那么事情就能好办的多。

浅聊程序化世界构建流程相关推荐

  1. GDC翻译:Far Cry 5 的程序化世界生成(第一部分:1~5)

    原视频链接:https://www.gdcvault.com/play/1025215/Procedural-World-Generation-of-Far PPT链接:https://www.gdc ...

  2. 浅聊前端程序员,后端程序员,全栈程序员的工作

    浅聊前端程序员,后端程序员,全栈程序员的工作区别 很多时候,编程小白都在思考这样一个问题,找工作到底是选前端,还是后端,今天我们就来看看什么是前端开发,后端开发.为什么美国大多数程序员是全栈程序员? ...

  3. GDC翻译:Far Cry 5 的程序化世界生成(第四部分:总结和QA)

    8. 计划的变更 在这一部分,我想分享一些我们在开发过程中改变的东西.因为事情并不总是按照计划进行,有些想法可能在纸面上很好,但是最终可能并不是那么好. 第一个例子是 Biome Painter: 因 ...

  4. 浅聊OpenSL ES音频开发

    浅聊OpenSL ES音频开发 导语 开发Android上的音频应用,一般是使用Android提供的AudioRecord采集音频,使用AudioTrack播放音频,使用MediaCodec来编解码, ...

  5. 前沿技术探秘:知识图谱构建流程及方法

    作者 | 郑毅 封图| CSDN│下载于视觉中国 出品 | CSDN云计算(ID:CSDNcloud) 随着AI技术的发展和普及,当今社会已经进入了智能化时代.与以往不同的是,在这一波浪潮中,企业不仅 ...

  6. 深度学习(五十六)tensorflow项目构建流程

    tensorflow项目构建流程 博客:http://blog.csdn.net/hjimce 微博:黄锦池-hjimce   qq:1393852684 一.构建路线 个人感觉对于任何一个深度学习库 ...

  7. 【Android 安装包优化】资源混淆 ( 资源混淆效果 | APK 构建流程简介 | 资源 ID 组成 )

    文章目录 一.资源混淆效果 二.APK 构建流程简介 三.资源 ID 组成 四.参考资料 一.资源混淆效果 资源混淆 , 将资源名称与目录进行混淆 , 提高了反编译的难度 , 同时也减小了 APK 文 ...

  8. 玩转webpack(一)下篇:webpack的基本架构和构建流程

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:QQ会员技术团队 接玩转webpack(一)上篇:webpack的基本架构和构建流程 文件生成阶段 这个阶段的主要内容,是根据 chun ...

  9. 区块链基础知识系列 第四课Hyperledger fabric 1.0网络组成及构建流程

    一.fabric网络结构(暂时不包括CA) 如上图所示,在fabric网络中,O表示Orderer,P代表Peer,EP代表Endorsing Peer(endorser),CC代表Chaincode ...

最新文章

  1. jsp访问WEB-INF下面的资源
  2. Java集合框架List,Map,Set等全面介绍
  3. margin 0 auto 什么意思
  4. micropython文件上传软件_ESP32玩转MicroPython(二) 连接WIFI网络 webperl文件传输
  5. UITableView 显示在statusbar 下面
  6. 编程范式,程序员的编程世界观(转)
  7. Get JSON with the jQuery getJSON Method
  8. Eclipse中tomcat的简单配置
  9. 关于Python生成器的一个小问题(StopIteration)
  10. Java Web学习笔记12:CKEditor在线编辑器
  11. 判断手机是否支持闪光灯的
  12. 解压文件win10自动删除
  13. 无线安全之破解WPA/WPA2 加密WiFi
  14. windows中查看端口占用情况以及删除端口
  15. Flink 实践教程-进阶(11):SQL 关联:Regular Join
  16. java代码在图片上画框
  17. r语言 精美rda图_R语言高质量绘图的10条tips
  18. JVM垃圾回收说为学日益,为道日损
  19. 【Matlab】Simulink系统仿真(了解)
  20. Trusted Applications介绍

热门文章

  1. java 多个监听_java中监听一个客户端怎么做?监听多个怎么做?
  2. 列表输出循环左移_互联网人工智能开发语言Python之for循环、break、continue详解...
  3. Codeforces Round #587 C. White Sheet(思维+计算几何)
  4. 互逆矩阵特征值,奇异值的关系
  5. 【原创】Quartz代码详解
  6. UVa 1625 Color Length
  7. Android获得图片资源的三种方式
  8. ASP.NET中过滤HTML字符串的两个方法
  9. 看django视频笔记
  10. 菜鸟学C语言(五)之求定积分