【译】适合任何人的高性能代码
本周的博客将会讨论产品定制化方面的需求,如何容易的掌握Fabric引擎以及如何在画布(canvas)上使用高级的预设资源,来发挥Fabric的高性能和体现它的易用性,进而节约开发的成本和降低开发的风险。
你可以通过下载Fabric引擎来访问这些节点(ndoes),fabricengine.com/get-fabric/ –并且可以在讨论区获得每日构建的访问权限。
groups.google.com/forum/#!forum/fabricengine
高效的代码
产品是一个世界,变幻无穷,没有什么产品是“开箱即用”的。任何一部轰动的影片或者一个3A级的游戏都会推动新技术更快的到来。用户除了在频幕上展现的效果之外不会关心任何事情,因此开发人员不得不构建那些用户真正需要的东西以保住他们的饭碗。
特殊角色的构建、射击游戏以及特效等均需要专业的解决方案、专业的造型软件以及专业的操作。这些特殊的需求都需要额外的开发,以至于无法实现所谓的“开箱即用”。这意味着,在工作室中需要有一些人来开发相应的工具来迎接上文提到的挑战。
大多数的产品设计人员拥有越来越多的技术型知识,这是从事该行业的基本要求,但是他们并非是真正的技术开发者。Python和MEL是用于快捷的构建产品的通用开发语言。他们的语法相对简单,而且在需要使用时有大量的资源可供参考。使用这些语言在有些时候会存在一定的缺陷,例如有些代码并非是为程序的执行性能而设计的,当你在某些时候需要用到高性能的代码时,这些代码会在程序的执行方面受到限制。这些限制很难解决,除非你使用更加高效的语言进行开发,例如c++等,然而他们的开发需要更加深入的编程技巧。
当对程序的执行性能有所要求时,由于技术型艺术家没有这方面的技能,因此需要技术研发部门来处理该方面的需求。然而,这些产品开发中的突发事件(这些需求发生的太频繁以至于无法被当作是突发事件)为产品的开发制造了大量的障碍。在这种情况下,开发资源将会很快耗尽,并且会累积许多待办事件。由于需要等待新工具,产品的开发变得缓慢。技术开发部门受到这些事情的困扰,会对他们的本质工作造成长期的影响,从而影响部门的整体工作。
这些事情在那些正在朝着大型公司发展的中型企业中十分普遍。而小型企业通常没有专业的技术研发部门,因此,设计开发人员必须使用性能有限的工具进行开发来完成产品的整个开发,这会导致工作变得缓慢、提高成本以及造成很大的压力。
对于上述提到的情况,Fabric引擎能够提供很多的帮助。Fabric在程序设计方面进行了考量,使得技术型艺术家和技术型导演能够十分容易的使用Fabric设计的KL编程语言。KL编程语言的语法类似于Javascript和Python,拥有一个十分强大的内建代码库,能够让所有的用户使用所需要的工具进行复杂的开发工作。KL编程语言的另外一个优势是:能够自动的进行交叉编译,通过GPU加速来使得复杂的任务能够获得最高效的执行性能。经过优化,设计人员将会看到与很好的c++代码相差无几的执行性能,通过GPU的使用,在某些情况下,程序性能甚至会超过使用c++实现的程序。
Fabric引擎的虚拟编程系统——画布——通过让技术型艺术家很容易的构建高性能的程序,从而解决了技术研发部门的瓶颈。虚拟界面可以让用户通过屏幕来观察数据流,而不在通过查阅不同位置的代码来理解整个数据。通过画布,那些具有较少开发经验的人员同样可以进行高级工具的开发。用户可以使用其它库或者是自定义的节点来扩展画布功能,甚至可以直接进行KL编程语言的开发。
使用画布功能,设计人员能够很快的进行原型系统造型的开发,找到合适的解决方案以及很多使用的工具。使用节点图(Node Graph)能够很容易的交换不同的节点,很快的对节点图进行重新排序,从而快速的得到新的解决方案。画布功能有一个强大的节点库作支撑,在创建上下文时,用户操作没有什么严格的限制,设计人员总是能够找到他们所需要的数据。词法分析、解析JSON文件、引用计算机图元或者OBJ文件、运行动力学仿真等等——所有的这些都可以放在同一个节点图中,这意味着你可以使用一个节点来管理你的整个开发工具。
画布功能自带很多高级的预设节点资源——绑定有很多功能,使得用户能够花费少量的工作便可以使用非常有用的功能。对于理解画布功能是如何工作的,预设资源是一个很好的途径和有效的参考教程。用户可以通过层次视图来浏览预设资源库,或者可以直接在画布编辑窗口内使用TAB按键进行搜索。随着设计人员对Fabric引擎越来越熟悉,他们可以开始学习更高级的特性。
随着设计人员对这个引擎的掌握,在大企业中,产品研发部门累计的任务会变得越来越少;在小企业中,设计人员可以根据他们所需要的性能来灵活的使用该引擎。随着设计人员对Fabric引擎越来越熟练,他们甚至可以给整个部门或整个企业提供一个很好的工具。之后,由于画布的底层实际上是KL语言,因此,如果该工具需要进行一些修改,产品研发工程师能够很快的做出调整。代码重写不再需要,产品研发部门可以集中关注于功能性的开发,而不再受限于处理产品研发中的紧急事件。