zoukankan      html  css  js  c++  java
  • 琢磨着写一个Domain Specific Language (DSL)

    之前看了Crytek一个talk讲他们终于要慢慢换掉让备受诟病的Mannequin动画系统,着手研发新的更有拓展性和灵活性的新的animation graph。

    https://www.youtube.com/watch?v=J0eCJ2cAChI&t=1s

    前者确实比起UE4和Unity3D的动画系统更不太 user friendly,

    首先命名法则不是显而易见:

    • fragmentId 指的是一个State或一个Action(走,跑,跳)
    • FragTag指的是这个state或Action中的一种变化(欢快走,喝醉走,受伤走)
    • 还有Scope相当于一个抽象概念部位,如上半身,下半身
    • ScopeContext对应一个asset文件,entity/char/anim db

    (Mannequin指的是卖衣服那种假人,但是飞机大炮什么的也是这么model;Character指的是人吧,但是枪支武器也是modeled as character,乍一听是有点怪)

    State Machine的维护和代码的职责范围不是非常明确,很多flags散作一团那丢给程序员。当然德国人大脑memory是比较大的,喜欢把很多东西先load在大脑里,然后再在很多东西里头reason。他们的桌游就可以反映这个特色,rule非常形式化。所以这样的构架在追求elevator pitch的美国商业化社会会被看作意大利面代码,当然稍微用不好确实是非常混乱,效率低下的。

    当然本质上这些动画引擎都是在解决相同的问题:

    • 状态转换和其过程中的blending
    • 和其他模块的沟通和sync up(比如物理模拟的结果)
    • Attach其他物体, propagate状态,局部的或者是整体的
    • 具有一定的灵活性,同时有不同高度的抽象性定义和组织管理(gameplay level?上下文level?动画状态Level?源文件level?)

    Crytek的解决方式,有点类似UE4 的BP。工作流程类似shader,但不仅仅是通过一系列数学变换改变数据,又多了一维时间轴做各种blending

    为此他们发明了一个DSL,一个新的functional langauge。

    前一阵子和某火箭公司接触,也闲聊到他们在做一个内部语言,这样可以让其他学科的人方便操控火箭。这听起来很胆大,但是想想应该复杂程度不会比一套脚本语言控制xbox box controller复杂太多吧。都是一些列的sensor和控制输入。

    去年开始就在业余写一个新的游戏引擎,用vulkan PBR + glTF格式。动画这个方面是一直感兴趣的。

    刚好最近也在看UE4 BP虚拟机, compiler和一些6502的东西,感觉似乎可以come together着手写一个新的语言?

    https://www.cnblogs.com/ghl_carmack/p/6060383.html

    https://www.unrealengine.com/en-US/blog/unreal-property-system-reflection

    https://www.youtube.com/watch?v=qJgsuQoy9bc&t=243s

    https://www.youtube.com/watch?v=fWqBmmPQP40&t=887s

  • 相关阅读:
    JS 时间格式化函数
    jQuery 输入框 在光标位置插入内容, 并选中
    js Html结构转字符串形式显示
    .aspx 页面引用命名空间
    sql随机实现,sql GUID
    一个清华女大学生与一个普通二本男大学生的QQ聊天记录
    asp.net inc 的使用
    JS编码,解码. asp.net(C#)对应解码,编码
    SQL的小常识, 备忘之用, 慢慢补充.
    Js 时间间隔计算(间隔天数)
  • 原文地址:https://www.cnblogs.com/antai/p/14454653.html
Copyright © 2011-2022 走看看