电话+V:192606-48052 ,欢迎咨询piccolo引擎编译,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]
在王希老师的GAMES104现代游戏引擎入门课程学习中,我通过阅读Piccolo引擎的源码来深入理解,尽管我在C++和图形学方面尚属新手,若有不足之处,还望大家不吝赐教。
首先,通过VisualStudio构建引擎,找到并运行exe文件。接着,通过RenderDoc启动,可以截取并分析帧,事件浏览器展示了绘制流程,包括vkcmd指令和自定义标签,如"DirectionalLightShadow"和"ForwardLightShadow",这些都是由引擎中的vulkandebug函数设置的。
为了验证修改,我在代码中将绘制方法从默认的deferred改为forward,通过添加特定标签并在RenderDoc中再次截取,确认了设置效果。接着,切换到TextureViewer查看不同阶段的输出,如平行光阴影pass和点光源阴影pass,尽管原始工程未包含点光源,但引擎对所有mesh进行了处理。
主相机pass中,物体逐个绘制并混合到管线的colorattachment,展现了forwardrender的特性,即避免无效绘制。天空盒和billboard粒子的添加,以及ToneMap和ColorGrading(使用lut调色)等后期处理,进一步提升了画面效果。Imgui用于绘制编辑器界面,而CombineUI则整合了最终结果。
现代游戏引擎:理论与实践的交汇点
在王希老师的GAMES104现代游戏引擎入门课程中,我通过阅读Piccolo引擎源码进行学习,作为C++和图形学新手,我将分享对Piccolo,这个轻量级但功能齐全的实验性引擎的理解和探索,特别是其图形渲染部分。
Piccolo是GAMES104课程团队的成果,尽管代码量只有几万行,但包含资源管理、动画、物理等多个模块。我主要关注图形学,通过它理解理论如何转化为实践。反射是引擎开发中不可或缺的技术,它允许在运行时动态操作对象,如获取和修改属性。
在startEngine函数中,反射逻辑占据重要位置。进入main函数后,PiccoloEngine没有显式的构造函数,初始化工作主要在startEngine和initialize中进行。我们首先聚焦于反射部分,特别是TypeMetaRegister类的Register和Unregister函数,它们起到了数据类型包装和转发的作用,使得代码清晰易读。
以Color类型为例,其rgb通道的每个操作(如取值、赋值、通道名查询等)被封装为FieldFunctionTuple函数元组。这个元组模板反映了域(Field)的概念,颜色通道被视作Color类型的子类型,具有统一的操作接口。
函数的具体实现中,可以看到所有操作函数被声明为静态,以确保在类实例化前也能使用。然后,这些函数包通过REGISTER_FIELD_TO_MAP宏存储在multimap中,实现了Color类型及其通道的映射关系。
对于Color类型的注册,除了基本的函数封装,还包括序列化操作,这部分主要在PSerializer类中进行,涉及到文件操作,但具体细节未详。
电话+V:192606-48052
机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。