GAMES104:14 引擎工具链高级概念与应用-学习笔记


一,世界编辑器

其实是一个平台(hub),集合了所有能够制作地形世界的逻辑
在这里插入图片描述

  • editor viewport:可以说是游戏引擎的特殊视角,会有部分editor only的代码(不小心开放就会变成外挂入口)
  • Editable Object:人、物、房、云等都是可编辑对象
  • Object管理:场景对象结构(一般是树)、layer、搜索等功能
  • 属性面板
  • Content Browser:资源管理浏览器
  • 鼠标选取:用到Ray Casting,用包围盒或者用ObjectID Buffer区分物体(粒子或透明物体需要特殊处理)
  • transform、快捷键、高亮等交互
  • Height Brush:地形刷,需要设计smoothing或让艺术家自定义笔刷
  • 环境规则:比如路上不能有树,把结果保存为图,再进行程序化生成或刷子效果(甚至可以控制风格)
    在这里插入图片描述

二,编辑器插件架构

插件需要同时考虑引擎系统和对象2个维度,如图,支持矩阵性数据访问
在这里插入图片描述

  • 插件的4种组合方式:
    在这里插入图片描述
    在这里插入图片描述
  • 版本控制:引擎接口修改后可能会导致插件功能失效,这就需要引擎端设计接口时就考虑到这些问题,老师认为没有10年引擎经验可以不用考虑这些问题,同时老师不认为程序员写了5-10年代码就应该做管理,没有10-20年沉淀很难理解其中复杂度和丰富度,架构师也是程序员的终极归宿。

三,设计叙事工具

游戏做的越来越像电影,Storytelling就变得很重要,下图的时间线在ue里叫Sequencer,相当于电影导演的统筹安排,游戏中一些过场动画就是这样做的。这个过程中涉及到很多工具的实现
在这里插入图片描述

四,Reflection和Gameplay

  • 游戏玩法不断更新就需要不断提供新的工具、接口,现代引擎中可视化编程可以部分处理这种可拓展性,比如ue的蓝图;

  • 但是在增加逻辑后,接口、工具都需要有相应的更新,工作量是非常大的,那就需要用到反射Reflection(高级语言基本都支持,如java和c#)。「反射允许程序在运行时检查、修改和操作其自身的结构和行为」即引擎实现功能后,通过反射告诉工具有哪些开放类和接口可以访问,这时在蓝图中创建对象时,其接口参数全部可以展现

  • c++中如何实现反射?
    c++在编译时会翻译成抽象语法树(Abstract Syntax Tree,AST),比如类就会被翻译成一个树状结构表,在这个表里就比较容易提取接口和参数。课程小引擎用的是Clang,其中还涉及部分代码生成的内容

五,协同编辑

协同编辑是引擎发展方向,但大量数据、不同版本如何协作?

  • 冲突:用类似git的方式管理merge冲突;
  • 避免冲突:分层分配、分块分配、One File Per Actor
  • 在线同步操作:类似在线文档,需要同步,并解决Undo、Redo、Merge,比如用资源锁,或下述方法
    ,

QA

  • 反射会不会影响运行效率:Runtime基本不会,但在编辑工具里频繁调用会有消耗
  • 现代游戏开发中,DCC工具和引擎的分工是什么:DCC很多有渲染系统,引擎也想把DCC功能加入引擎里,两边都在大量融合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值