目录
笔记导航:
LE7--渲染系统4:渲染管线,后处理:https://blog.csdn.net/m0_56399931/article/details/124790469
LE6--渲染系统3:游戏中的地形/天空/云渲染:LE6--渲染系统3:yo地形/天空/云渲染_This is MX的博客-CSDN博客
LE5--渲染系统2:光照、材质、Shadow:Games104笔记---LE5--渲染系统2:光照、材质、Shadow_This is MX的博客-CSDN博客
LE4--渲染系统1:渲染基础:Games104笔记---LE4--渲染系统1:渲染基础_This is MX的博客-CSDN博客_渲染系统
LE3--基础架构2:数据组织与管理:Games104笔记---LE3--基础架构2:数据组织与管理_This is MX的博客-CSDN博客
LE2--基础架构1:引擎架构分层整体Pipeline:Games104笔记---LE2--基础架构1:引擎架构分层整体Pipeline_This is MX的博客-CSDN博客
LE1--现代游戏引擎导论:Games104笔记---LE1--现代游戏引擎导论_This is MX的博客-CSDN博客
怎样构建游戏世界:
抽象现实中的物体:
抽象出属性和行为
![](https://img-blog.csdnimg.cn/img_convert/291b2b842c0282aaa338a0b296d5abcc.png)
继承出新的物体
![](https://img-blog.csdnimg.cn/img_convert/d890fb99cf6ee2d880fa2f33abfb9a3b.png)
组件化:
组件化这个事情,编程届有一句话“组件优于继承”。Unity和Ue也都是有组件的
组件优于继承,这是为什么呢?一方面其实是很多继承来的功能对于特定对象来说其实可能是不需要的,如果我们把它加载进来其实也是会消耗性能的,另一方面组件化有着更高的复用性,但是这也就意味着更高的颗粒度。
Unity和UE中的组件化:
![](https://img-blog.csdnimg.cn/img_convert/cb06bba500b62aa6071c0ebf38b2c53d.png)
组件的更新:
![](https://img-blog.csdnimg.cn/img_convert/f2dcef1d3dee64b61fbd8ed5113484c9.png)
事件系统:
为什么需要事件系统呢,因为如果做游戏逻辑的时候直接硬编码每个物体查询一次,消耗太高,并且耦合太高了,所以产生了事件。
一个好的游戏引擎需要有一个可拓展的事件系统,允许程序员自己注册自己类型的事件,并进行通知。
事件的实现可以参考这个:ouzel/EventDispatcher.cpp at master · elnormous/ouzel · GitHub
场景管理:
我们必须把复杂度降低到下o^2以下,我们可以对其进行空间划分,使用八叉树、BVH、BSP等结构进行管理。这个管理可以看一下光追的BVH生成,后续我也会写一下。
![](https://img-blog.csdnimg.cn/img_convert/2e77bd21fbfbc800e17e4bb7e939a1e6.png)
![](https://img-blog.csdnimg.cn/img_convert/c867e3bf341c392be616bf842c5e4155.png)
感谢大佬
![](https://img-blog.csdnimg.cn/img_convert/70060c97d984a2cb6c6f32456ba30172.png)
问题:
一个模块Tick事件太长?
解决方法:优化引擎的处理,比如说一帧处理全部的炸弹碎片,那可以把炸弹碎片多帧里面处理
Tick的时候渲染线程和逻辑线程怎么同步?
一般会有多个线程来做渲染的数据准备,逻辑线程一般会比渲染线程早一些。
空间已经划分了,动态物体怎么处理?
一般是不同场景采用不同的空间划分方法,一般实现的时候要实现多种空间划分方法,让引擎择优选择。
组件模式有什么缺点?
在切换组件的时候成本很高;组件之间也要有通信接口机制,并且有可能是要不断的query,这个高频调用里消耗也是很大的。
事件机制怎么进行调试?
其实最有效的还说打log,引擎开发者也可以开发出可视化的事件通知debug模式。
物理和动画互相影响要怎么处理?
对物理和动画进行插值,比如说开始的时候是动画权值较大,后面就是物理权值较大。
学习资料:
games104
ouzel/EventDispatcher.cpp at master · elnormous/ouzel · GitHub