GAMES104:13 引擎工具链基础-学习笔记

news2024/11/14 14:40:58

文章目录

  • 一,工具链
  • 二,复杂的工具
    • 2.1 界面GUI
    • 2.2 设计模式Design Pattern
    • 2.3 数据的加载和存储
    • 2.4 资产引用
  • 三,资产加载Deserialization
    • 3.1 资产解析Parse
    • 3.2 资产版本兼容性(Compatibility)
  • 四, 如何制作高鲁棒性的工具
    • 4.1 Undo & Redo、Crash Recovery
  • 五, 如何制作工具链
    • 5.1 Schema
    • 5.2 引擎数据的3种view
  • 六, 所见即所得
  • 七, 可拓展性
  • QA

  • 总览
    在这里插入图片描述

一,工具链

  • 用户到引擎架构图
    在这里插入图片描述

  • 工具链是衔接不同岗位、软件之间的桥梁,比如美术与技术,策划与美术,美术软件与引擎本身等,有Animation、UI、Mesh、Shader、Logical 、Level Editor等等。一般商业级引擎里的工具链代码量是超过引擎Runtime的,可见工具链非常重要(但大家都不愿意干工具呢··)。
    在这里插入图片描述

二,复杂的工具

2.1 界面GUI

图形用户界面GUI(Graphics User Interface)其实就是工具的操作界面

  • 两种 GUI 实现方式:
    1. Immediate Mode:每次绘制时由游戏逻辑直接发出绘图命令。在帧之间不会存储场景模型,需要不间断发出指令。好处是直接、简单、快,坏处是扩展性差、更多的工作给到游戏逻辑,压力大。
    2. Retain Mode: 图形库将场景的模型存储在内存中。 如果需要绘制,图形库会将场景转换为一组绘图命令。如果不需要更新,就不用发出命令。好处是扩展性强,性能高、可维护性高,大部分游戏工具gui用这种,比如UE UMG、QT GUI等。

2.2 设计模式Design Pattern

当一个工具由几十上百个功能时,就需要遵循设计模式来规划了。

  • MVC:Model(管理应用数据)->View(信息归总表)->Controller(总结指令)->,路径是单向的,原始数据不会被弄脏。最经典,变种也最多的设计模式。
    在这里插入图片描述
  • MVP:Presenter从model里取数据呈现给view,然后从view的用户交互里反馈给model。超大型软件工程中的unit test(单元测试)适用,代价是presenter会比较臃肿。
    在这里插入图片描述
  • MVVM:与MVP相似但是用ViewModel代替Presenter,执行责任上用设计师代替开发人员,完全把view和model区分开。现代最常用,好处是独立开发、方便测试和复用,坏处是不太好迁移、debug困难、对简单ui需要overkill了。
    在这里插入图片描述
  • 在游戏引擎工具链中,需要有非常强的工程可扩展性,一定不要自己造轮子,选择最成熟的结构和方案。

2.3 数据的加载和存储

  • 序列化(Serialization)和反序列化(Deserialization)其实就是save 和load,将游戏中的一些对象、数据转化成二进制块方便存储,也与后期的Network工作相关
  • 存储形式:
    1. Text File:TXT、Json、YAML、XML。好处是易读,容易debug。比如unity用subset of YAML,Cryengine用XML或Json。引擎推荐首先支持此类
    2. Binary File:二进制,例如:UAsset(Unreal)、FBX Binary、unity Runtime等。好处是存储容量小,并且容易加密,安全性高。比如FBX Binary比FBX text占用小很多,同时还省去了语义的兼容过滤处理,总体加载速度能快10倍。因此上线产品一般用这种形式。

2.4 资产引用

在游戏中,很多东西会重复出现,为了节省内存,我们需要资产引用:只存储引用,通过引用实例化(Instance)重复对象(Prefab),这是资产系统和工具链最核心的底层逻辑。

  • 对象实例化变体(Prefab与Prefab Variant)
    1. 通过复制的方式构建变体:复制原先数据并修改,但是比较低效并且丧失关联性。
    2. 通过数据继承(Data Inheritance)的方式构建变体:继承原数据并override。

三,资产加载Deserialization

3.1 资产解析Parse

  • 资产树状结构
    在这里插入图片描述

  • 树状结构在text和二进制文件里的形式:
    在这里插入图片描述

  • Endianness字节端序,不同端口规则还不一样,做游戏平台适配时需要注意
    在这里插入图片描述

3.2 资产版本兼容性(Compatibility)

很多软件都只做到向下兼容,那怎么做到向上兼容?—在元宇宙、分布式部署这类场景里非常需要

  • Unreal :给资产添加版本号,对于高版本新增的数据类型,读取时添加这些类型的Default Value,对于新版本删除的数据类型,不进行读取。----老师认为这方法不好
  • Google :给数据的每一个属性定义 UID,并且相对于上一个属性的 UID 是单调递增的;读取时UID不认识就跳过,没有的用默认值。

四, 如何制作高鲁棒性的工具

鲁棒性(Robust)是指一个系统在面对错误输入、异常情况或意外事件时,仍能保持稳定性和可靠性的能力。

4.1 Undo & Redo、Crash Recovery

  • Command:记录用户所有操作(分解为多个Command)并记录
    在这里插入图片描述
  • Command的定义:UID是唯一、累加的,用于记录执行顺序
    在这里插入图片描述
  • Command的3种主要操作:Add创建、Delete、Update

五, 如何制作工具链

各个工具如Animation、UI、Mesh、Shader、Logical 、Level Editor,如果全部单独写的话,那将没有任何扩展性。我们需要找到这些工具通用的部分,因为任何复杂的结构都可以由简单的building blocks构成,我们需要一个标准的语言去描述它们:Schema。

5.1 Schema

  • Schema 结构的标准描述语言工具通用、可以生成标准ui;
  • 比如圆定义为半径r,长方体定义为长宽高、曲线定义为key point等
  • 可以数据继承
  • 两种定义方式:
    1. file:好定义;但需要代码生成器,可能有版本问题,同时无法定义api
    2. code(UE):可以包装function等,支持性好;但对鲁棒性要求高

5.2 引擎数据的3种view

  • 硬盘Runtime中:二进制或者text格式;在乎加载和运算速度
  • 内存中:二进制;在乎写入速度和内存占用
  • 工具中用户:需要更可理解的界面和多样的编辑模式

六, 所见即所得

工具体系的核心精神:所见即所得,即工具是什么样运行时就是什么样(与运行环境配置一致)

  • Stand-alone Tools:早期可以独立运行的工具。好处是工具开发简单,但是难以做到所见即所得。现在基本不用了。

  • In Game Tools:直接在游戏引擎上做的工具。开发成本高,需要做复杂的ui,但完全in-game editing,对生产效率提升帮助巨大

  • Play in Editor(PIE):在编辑器里直接就能play(需要区分editor和play的数据,避免污染,但很难)或有PIE mode(类似沙盒,相当于做分身,更可靠)

七, 可拓展性

将引擎作为一个平台,让用户可以用插件Plugin形式制作工具,比如unity商店。
那么引擎需要提供对应的 API ,比如增加按钮等,以增加引擎的可拓展性。

QA

  • 工具链开发需要具备什么能力:对游戏制作和流程的基本理解(经验),软件工程能力、架构思维、设计师思维
  • 工具链用web前端做的多不多:目前还不多,但随着h5越来越强大,未来有可能,因为底层逻辑很接近
  • 协同编辑有没有很好的实现:基础理论已经成形,就是工程问题,5年内应该能解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搞安全必看——IPS和IDS到底有啥区别?

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 随着数字化转型的加速推进,网络安全已成为各行业不可或缺的一环。对于现代企业和组织而言&#x…

【JavaEE初阶】多线程6(线程池\定时器)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 实例3:线程池 参数解释 核心线程数, 最大线程数 允许空闲的最大时间 ,时间单位 任务队列(阻塞队列) 线程工厂>工厂设计模式 拒绝策略 使用举例 模拟实现一个线…

从零开始讲DDR(0)——DDR的前世今生

一、计算机组成 计算机组成结构(Computer Architecture)是计算机系统的核心,它定义了计算机的基本工作原理和设计模式。计算机的组成可以分成以下3大类:中央处理器(CPU)、存储器和输入/输出子系统。 1.1 中…

Linux文件IO-基础知识了解及文件描述符

1、简介 本章给大家介绍 Linux 应用编程中最基础的知识,即文件 I/O(Input、Outout),文件 I/O 指的是对文件的输入/输出操作,说白了就是对文件的读写操作;Linux 下一切皆文件,文件作为 Linux 系…

深度学习 之 常见损失函数简介:名称、作用及用法

引言 在机器学习和深度学习中,损失函数(Loss Function)是模型训练过程中一个不可或缺的部分。它用来度量模型预测结果与真实值之间的差异,从而指导模型参数的优化。合理选择损失函数对于提高模型的准确性和泛化能力至关重要。本文…

Mint Expedition Season 3 拉开帷幕:登顶高峰的时刻到了

自 7 月 15 日 Mint Expedition 启动以来,Mint,一条专注于 NFT 行业的以太坊 Layer 2,日常交易量和交易额都出现了爆发式增长。这一成功离不开 Mint 社区的合作,包括 Minters、Web3 去中心化应用程序的开发者,以及大量…

模电模块(一)

这个看起来功能挺全的,就是小贵,有时间自己做一个: 首页-康威科技-淘宝网 (taobao.com) 画一个集成板,集合上述模块的功能。

深圳国际VR/AR博览会圆满落下帷幕

近日,深圳国际VR/AR博览会在深圳国际会展中心2号馆圆满落下帷幕。该展会于9月11日至13日举行,是一个与光博会同期举行的大型盛会。 据主办方介绍,深圳国际VR/AR博览会(Shenzhen International VR/AR Expo),…

力扣最热一百题——缺失的第一个正数

目录 题目链接:41. 缺失的第一个正数 - 力扣(LeetCode) 题目描述 示例 提示: 解法一:标记数组法 1. 将非正数和超出范围的数替换 2. 使用数组下标标记存在的数字 3. 找到第一个未标记的位置 4. 为什么时间复杂…

【与C++的邂逅】--- C++的IO流

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 与C的邂逅 本篇博客我们来了解C中io流的相关知识。 🏠 C语言输入输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 sc…

数据处理与统计分析篇-day03-Numpy环境搭建

概述 python优势 Python作为当下最为流行的编程语言之一 可以独立完成数据分析的各种任务 数据分析领域里有海量开源库 机器学习/深度学习领域最热门的编程语言 在爬虫,Web开发等领域均有应用 常用开源库 numpy NumPy(NumericalPython) 是 Python 语言的一…

创客中国AIGC专题赛冠军天鹜科技:AI蛋白质设计引领者

“落霞与孤鹜齐飞,秋水共长天一色——这句出自《滕王阁序》的诗句,是我作为江西人熟记于心的佳句。它描绘的天地壮丽景色常浮现于我的脑海,正是这种豁达与壮观,启发我们将公司命名为‘天鹜科技’,我们希望将源自自然的蛋白质与现代科技的创新精神相结合,打造蛋白质设计与应用的…

OpenBayes 教程上新 | AI 时代的「神笔马良」,Hyper-SD 一键启动教程上线!

每次脑海中的画面栩栩如生,想画下来却难以下笔? 每次画完自己觉得非常像,但是旁人却一头雾水? 每次想用文生图,但不知道如何精确地输入 prompt? AI 时代的「神笔马良」Hyper-SD 来了! 仅需简…

基本仪表放大器+基本电容耦合隔离放大器+OTA(基本OTA电路+OTA增益)

2024-9-18,星期三,21:37,天气:多云,心情:晴。大家中秋节都过的怎么样啊,如果没过爽也没有关系,因为再上八天班就能迎来10.1长假啦!!!!…

【机器学习】--- 自然语言推理(NLI)

引言 随着自然语言处理(NLP)的迅速发展,**自然语言推理(Natural Language Inference, NLI)**已成为一项重要的研究任务。它的目标是判断两个文本片段之间的逻辑关系。这一任务广泛应用于机器阅读理解、问答系统、对话…

五星级可视化页面(30):本系列最后一期,压轴出场。

不知不觉分享了30期高品质的五星级可视化大屏界面,该系列文章也该收尾了,本期为大家分享最后一批界面,我们下一个系列专辑见。

力扣之181.超过经理收入的员工

文章目录 1. 181.超过经理收入的员工1.1 题干1.2 准备数据1.3 题解1.4 结果截图 1. 181.超过经理收入的员工 1.1 题干 表:Employee -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | | salary | int | | mana…

W25QXX系列Flash存储器模块驱动代码

目录 W25QXX简介 硬件电路 W25Q128框图 Flash操作注意事项 驱动代码 W25QXX.h W25QXX.c W25QXX简介 W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景 存储介质:Nor Flash&#xff0…

Apache SeaTunnel Zeta引擎源码解析(三) Server端接收任务的执行流程

作者:刘乃杰 编辑整理:曾辉 引入 本系列文章是基于 Apache SeaTunnel 2.3.6版本,围绕Zeta引擎给大家介绍其任务是如何从提交到运行的全流程,希望通过这篇文档,对刚刚上手SeaTunnel的朋友提供一些帮助。 我们整体的文…

ios xib 子控件约束置灰不能添加约束

添加约束时发现置灰不可点的问题 layout切换为inferred,就可以添加约束了