DOTS-研究学习
1. What is DOTS? DATA-ORIENTED TECH STACK 多线程式数据导向型技术堆栈 核心-高性能 充分利用多核处理器,多线程,让游戏运行速度更快。 组成部分如下: C# 任务系统, Job System,用于高效运行多线程代码 实体组件系统,ECS, 默认编写的高性能代码的框架结构 Burst编译器,用于生成高度优化的本地代码 Job System 与ECS是独立的,两者结合实际才能发挥最大优势。 2. Job System 在Job System之前,unity 仅在内部支持多线程,外部都必须运行在主线程上 C#虽然支持多线程,但在unity中只处理数据,如网络消息,下载等等,且在线程中调用Unity的API是不行的。 有了Job System,可以充分利用多核CPU,比如在多线程中修改Transform等 例:MMO游戏判断碰撞,大量同步角色坐标,大量血条飘字等较为适合 不必过于担心线程安全,加锁的问题 配合Burst更佳 2.1 HPC# -High Performance C# 介绍: IL2Cpp虽然将IL转成C++,但实际还是模拟...
Effective C++学习记录
条款1: 习惯C++ C++ 领域的四大块: 1.C: 基础,语句,数组,指针等等 2.Object-Oriented C: 继承,多态,封装 3.Template C++: 泛型编程 STL: 一种特殊的Template程序库,容器,迭代器,算法,对象等等规约 条款2:尽量以const, enum, inline替换 #define 宁用编译器替换预处理器。 1.使用声明式与定义式:如 //头文件class GamePlayer{private: static const int NumTurns = 5;//声明时候指定数值}//实现文件const int GamePlayer::NumTurns;//无需再次定义了 2.使用enum当int数组用 class GamePlayer{private: enum{NumTurns =5}; int scores[NumTurns];} 3.对于函数宏定义,使用Inline替代 //替换以下define语句。//#define CALL_WITH...
GEA-P1
(1.2)What is Game? In his excellent book, A Theory of Fun for Game Design a game to be an interactive experience that provides the player with an increasingly challenging sequence of patterns which he or she learns and eventually masters. 游戏: 一个交互性的经历提供一个玩家学习或将要学习的技能的挑战集合(持续提升的) soft real-time game & hard real-time game soft 意味着deadline不影响玩家,hard往往造成严重的后果。 (1.4) Game genres FPS first-person shooters aim to provide their players with the illusion of being immersed in a detailed, hyp...
GEA-P2
1 介绍 (1.6) Runtime Engine Architecture 自底向上的顺序大概为: 硬件层 驱动层 系统层 SDK层 >平台独立层 核心库 资源库 渲染,调试,物理检测,游戏平台基础 >游戏级渲染,各上层动画机制,相机机制,AI机制 >游戏逻辑层 操作系统层 分为PC与主机(游戏)系统,PC系统如windows 提供了一种线程的机制为分享硬件资源,而主机游戏一般来说则可占用所有的硬件资源,但这两者的差距在逐渐减少。 Operating systems like Microsoft Windows employ a time-sliced approach to sharing the hardware with multiple running programs, known as preemptive multitasking. On a console, the game typically “owns” the entire machine. So the gap between console and PC development is gra...
GEA-P3
3 引擎基础 (3.1) C++ Review and Best Practive imperative languages: C object-oriented languages: C# , Java scripting languages: python lua,perl functional languages: Lisp, scheme, F# Multiple Inheritance(MI) Most C++ software developers avoid multiple inheritance completely or only permit it in a limited form. 多继承容易让结构混乱,提升技术难度,引发deadly diamond问题(当父类们存在相同函数时,子类不知道实现哪个?) 实际应用中,多继承应继承自无父的类对象 Most C++ software developers avoid multiple inheritance completely or only permit it in a limited form. A c...
GEA-P4
5 引擎的支持系统 (5.1) 子系统的启动与关闭 游戏引擎由若干子系统组成,在启动时如果系统间有相互依赖,同销毁时的顺序也需要按要求。如B系统依赖A,则A需要先启动再启动B,销毁时则是B先销毁再销毁A。 处理各子系统启动关闭的方式 单例模式: 第一次使用时,构造函数中初始化所依赖的其他子系统 【推荐】使用另一个管理器,统一管理所有的子系统启动与关闭。 (5.2) 内存管理 内存影响性能的两个方面: 动态内存分配 :malloc或new。将比较低效,可以避免一次性分配 CPU内存的高效性与普通大内存 5.2.1 优化动态内存分配 规则: Keep heap allocations to a minimum, and never allocate from the heap within a tight loop. 效率低下的原因: 1. 堆分配器的管理消耗。 2. 大部分操作系统free()函数调用需要切换模式。(用户切到内存,再切回来) 保证越少分配越好,从不要在update中申请堆内存。 5.2.1.1 自定义动态内存分配器 Stack -Based...
性能优化相关
1.渲染 利用reflect probe代替反射、折射,尽量不用RTT、GrabPass、RenderWithShader、CommandBuffer.Blit (BuiltinRenderTextureType.CurrentActive…) 建立统一后处理框架(bloom、hdr、DOF等)代替多后处理,可以共用模糊函数,减少多次blit;另外要注意RTT的尺寸。 空气折射、热浪扭曲等使用GrabPass不是所有硬件都支持,改为RTT或者后处理来优化。 建立统一shader材质代替单一shader,充分利用shader_feature、multi_compile,并将宏开关显示于界面。 图像混合代替多通道纹理,阴影投射、阴影接收、MetaPass、forwardadd 等pass不需要时要剔除。 少用alpha test、discard、clip、Alpha Converage等,因为会影响Early-Z Culling、HSR的优化。 避免Alpha Blend穿透问题(权重混合、深度剥离等透明排序方法代价太大了)。 光照贴图代替动态阴影、尽量不用实时光;阴影贴图、环境贴...
Game Engine Architecture - English
hence adv. 因此;今后 emit vt. 发出,放射;发行;发表 derivative n. 派生物;金融衍生产品;派生词;(化学)衍生物;导数 adj. (艺术家或艺术作品)模仿的;受……影响的;(金融产品)衍生的 comprise vt. 包含;由…组成 manipulate vt. 操纵;操作;巧妙地处理;篡改 indistinguishable adj. 不能区别的,不能辨别的;不易察觉的 vehicle n. [车辆] 车辆;工具;交通工具;运载工具;传播媒介;媒介物 loosely adv. 宽松地;放荡地;轻率地 intuitive notion 直觉概念 insanely adv. 疯狂地;狂暴地;精神错乱地 mod ...
Jenkins打包事项
Jenkins 打包说明 脚本准备 自动化脚本 AutoCi.rar文件 将文件解压至与Assets同级目录即可 Unity脚本 Editor 目录下创建类BundleMakerUtil.cs, 添加如下函数: public static bool HasRawArg(string name){ var args = System.Environment.GetCommandLineArgs(); for (int i = 0; i < args.Length; i++) { if (args[i].Trim() == name) { return true; } } return false;} Editor目录下创建类BuilderMenu.cs 使用命名空间SGameBundleMaker. (也可自定义,但需要修改auto_ci.py里的配置) BuilderMenu.cs类中创建 bu...
开言_Bargaining in the market
预习 souvenior 纪念品 jeez 叹词 no can do 无能为力。 Dialog Excuse me sir, how much is this souvenior? Oh, that one there is $30. Jeez! That’s a lot! is that the best price you can give me? I don’t go bargaining. $25 is the cheapest I can go. I see ,are you sure you can’t go any lower? Sorry , I can’t, and you won’t find a better price in the market. How about two for 40? No can do. But I can do three for 60. Thanks, but no thanks. Ok, ok! Two for 40! Deal! You take credit? Cash only , sir! D...







