摘要: 每个游戏都是由种类繁多的资源构成,例如:网格、材质、纹理、着色器、动画、音频等。导入并管理这些资源文件,是游戏引擎必备的能力。资源管理包含两部分:离线管理和运行时管理。 在 Unity 2019 LTS 中,对应的解决方案分别是 Asset Import Pipeline v2(下文简称 AIP v 阅读全文
posted @ 2020-07-21 23:12 何三思 阅读(2326) 评论(0) 推荐(0) 编辑
摘要: 通常受限于:填充率、内存带宽、顶点处理 填充率 定义:GPU每秒输出到屏幕上的像素数(在游戏开发中,周期可细化到每帧)。 判别标准:降低分辨率,导致性能提升 优化方法: 1)优化片元着色器 2)使用消耗更低的官方着色器(比如用 Mobile 着色器替代 Standard 着色器) 3)如果需要 St 阅读全文
posted @ 2020-07-21 22:54 何三思 阅读(553) 评论(0) 推荐(0) 编辑
摘要: CPU在渲染管线中的工作 1)检测需要被绘制的对象 2)准备发送给GPU的指令 3)向GPU发送指令 多线程渲染 0)Unity 包含三种线程类型:主线程、渲染线程、工作线程 1)主线程:大部分的CPU工作,和部分渲染任务 2)渲染线程:专门用于CPU向GPU发送指令 3)工作线程:执行单独的任务( 阅读全文
posted @ 2020-07-21 22:53 何三思 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 图形优化没有银弹,与具体游戏、目标硬件和操作系统有关。 三步:发现、定位、优化。 渲染管线 1)CPU搜集需要被渲染的对象,及其渲染状态 2)CPU向GPU发送渲染指令 3)GPU处理渲染指令 CPU流程 1)搜集场景中需要被渲染的对象;不被渲染的对象被剔除(culled) 2)获取对象的信息(网格 阅读全文
posted @ 2020-07-21 22:50 何三思 阅读(374) 评论(0) 推荐(0) 编辑
摘要: Garbage:内存被“不再使用的数据”占据。 Garbage collection:使上述内存被重新分配。 两种类型代码:核心引擎代码、用户代码(托管代码) 1)核心引擎代码:使用手动内存管理,不使用垃圾回收。 2)用户代码:使用自动内存管理,不需要知道内存管理细节 自动内存管理中的垃圾回收 1) 阅读全文
posted @ 2020-07-21 22:47 何三思 阅读(687) 评论(0) 推荐(1) 编辑
摘要: CPU每帧需要处理数百万条指令,如果没有按时处理完,就会导致游戏卡顿。 打包过程 Untiy将代码编译为 CIL(Common Intermediate Language) ① AOT:CIL在打包时编译为机器码 ② JIT:CIL在运行前编译为机器码 源码与机器码的关系 没有被编译的代码称为源码, 阅读全文
posted @ 2020-07-21 22:46 何三思 阅读(396) 评论(0) 推荐(0) 编辑
摘要: IL2CPP 与 Mono 1)IL2CPP 优缺点 ① 可以调试C++代码 ② 可以使用 Engine code stripping 减少代码大小 ③ 编译慢 ④ 只支持 AOT(Ahead of Time) 2)Mono优缺点 ① 编译快 ② 支持JIT(Just In Time compila 阅读全文
posted @ 2020-07-21 22:43 何三思 阅读(914) 评论(0) 推荐(1) 编辑
摘要: 作用:针对不同的运行时环境,使用不同的内容。 一、变体 1、使用举例 1)不同目标平台,简化对应AB加载 举例:一个AB包含用于PC平台的高清纹理,另一个AB包含用于安卓手机的低清纹理,但是他们使用相同的AB名和资源名,只有变体名不同。于是在运行时,不需要更改加载代码,就可以加载对应的AB变体。 2 阅读全文
posted @ 2020-07-21 22:40 何三思 阅读(898) 评论(0) 推荐(1) 编辑
摘要: 1、资源重复 1)资源打包进哪个AB,由三种方式决定 ① 在Editor中被明确指定AB名称:只打进指定名称AB中 ② 通过BuildPipeline方法指定AB名称:只打进指定名称AB中,且覆盖方法① ③ 没有指定AB名称:任何引用该资源的AB包,都将包含一份该资源的复制 2) 没有指定AB名称细 阅读全文
posted @ 2020-07-21 22:38 何三思 阅读(340) 评论(0) 推荐(1) 编辑
摘要: 综述 1)一个AB通过 LoadFromFile 被加载时,只有头信息被加载到内存,因此只占用几千字节。但是如果需要加载大量AB,则会产生一定影响。 2)管理AB及其资源,最重要的是要理解 AssetBundle.Unload 使用 true 还是 false 参数,以及何时调用。 ① Unload 阅读全文
posted @ 2020-07-21 22:37 何三思 阅读(447) 评论(0) 推荐(1) 编辑
摘要: 定义:将一个或多个文件,按照一种归档格式,存在一个文件中,Unity可以索引并序列化其中的文件 操作:加载/卸载AB自身、加载卸载AB中某个资源 作用:在游戏安装后,继续分发和更新非代码资源 1)减小游戏包体 2)减小运行时内存压力 3)针对不同设备/平台,加载不同资源 AB结构 1)数据头:ide 阅读全文
posted @ 2020-07-21 22:34 何三思 阅读(336) 评论(0) 推荐(1) 编辑
摘要: 一、Resources 的序列化与加载 在上一篇提到过,Resources 文件夹下所有 Assets 和 Objects,在打包项目的时候,会被序列化为一个二进制文件。 这个文件类似下一篇要提到的 AssetBundle,包含了元数据和索引信息。其中,索引信息包含了一个序列化的查找树,用于将 Ob 阅读全文
posted @ 2020-07-21 22:32 何三思 阅读(387) 评论(0) 推荐(1) 编辑
摘要: 注意: 1、教程中的 Objects 和 Assets 仅是为了这篇教程而做的命名,与 Unity API 的同名概念没有关联。 2、在 Unity API 中,这篇教程中的 Objects 反而一般被命名为 Assets,比如 AssetBundle.LoadAsset 和 Resources.U 阅读全文
posted @ 2020-07-21 22:31 何三思 阅读(309) 评论(0) 推荐(1) 编辑
摘要: 一、渲染一帧步骤 0-1、剔除:摄像机视锥体剔除、代码删除/隐藏Mesh 0-2、从硬盘HDD中加载纹理、Mesh到内存RAM,再将需要渲染的加载到VRAM[1]。 1、设置全局 Render State(Unity中对应SetpassCall),包含:顶点/片元着色器、纹理、材质、光照、透明度等 阅读全文
posted @ 2020-07-21 22:27 何三思 阅读(920) 评论(0) 推荐(1) 编辑