整活¶
软件重构大计划(已跳票)
小秀一波,文章跳票了,憋了这么久,这次应该会是一个比较正式的独立软件。
Qt 3D UI
整了个花活0.0,在没改Qt源码的情况下,可以很轻松地将一个QWidget进行3D变换。 原理:
-
通过前后两个四边形区域算出中心投影变换矩阵
-
利用中心投影变换矩阵在QApplication中重新映射鼠标位置相关的事件
-
通过QRHI和GraphicsEffect的机制,结合变换矩阵,重新绘制图像
-
根据目标四边形的位置,自动伸缩绘制区域 目前还有一些问题:
-
弹出窗口的位置有偏差
-
焦点事件也对不上
不过现在能做好多有意思的东西了~
国庆内卷
国庆疯狂卷了5000+行代码0.0
把RenderGraph重构了一遍,之前的RenderGraph仅仅是实现了一个便于构造依赖图的结构
重构之后增加了以下功能:
- 异步执行渲染组织逻辑,借助QObject的ThreadQueue机制来完成线程间的数据通信。
- 在RenderGraph中对资源进行了封装,该层面的代码并不直接创建RHI资源,每帧的setup阶段只是创建资源描述,在complie阶段会对资源进行绑定和重建,可以通过资源池对无引用的资源进行复用,并调整了编辑器上的预览视图。
- 封装PrimitiveRenderProxy,主要用于搭建MeshPass(BasePass)中的渲染结构,它可以复用几何数据和流水线结构,来达到外部调用 drawAllMesh(OverrideFragmentShader, OverrideUniformBuffer,OverridePipelineState)的效果,目前用于鼠标的点选机制,后续将用于ShadowMap,屏幕空间反射效果的实现。
明天看下能不能把文章给赶完,忙不过来就得等到下周,弄完这篇文章我可能要跳票了~
我复活辣
我复活辣! Qt 6.7 将正式公开 RHI 接口,作者大大文档都已经写好了: - QRhi Class | Qt GUI 6.7.0
从下周开始,图形引擎的文章会继续更新(刚开始调整状态,更新会有点慢),不过会优先把RHI的接口说完,尽快进入到引擎和渲染架构相关的内容
还有一些关于UE的东西想去整理:
- Niagara性能优化
- 开放世界项目管理
小引擎推进
推进进度 - 景深滤镜(抄来的0.0,感觉效果有点不对,好像是alpha的问题?) - 抄了一个PBR仓库的代码,一点点代码抄了两天,主要是问题出在用QRhi要兼顾DX,GL,Vulkan,比如UV不同,DX没有RWTextureCube,采样器maxLod的问题,还好有renderdoc... - 重构了一波网格材质的构建方式,尽可能的提供自定义扩展的手段 下周整理一下目前的代码,争取下下周能开始继续写文章
小引擎推进1
就昨晚和今天有时间写代码T.T,主要是把之前的一些旧代码搬过来,做了一些重构
- 简单接入ShaderToy和之前用QScintilla搭建的GLSL编辑器
- 重构了一些FrameGraph的接口,简化了一下Pass的定义,修复SSAO的BUG,丫的,看好多教程上都是传Perspective矩阵进去,我傻乎乎只传了裁剪矩阵,后面细看逻辑才发现还得加上View,命名害死人...
- 加入文字渲染的两种策略,纹理策略是通过QPainter绘制的,网格策略是通过QPainterPath加入文字可以得到多边形路径,再使用EarCut算法,去除多边形中的空洞,最终得到文字的网格顶点
小引擎推进2
本周没有划水~
- 视频渲染:用Qt的多媒体框架解码视频帧,使用Rhi渲染,做了几个简单的播放器控件
- 数字信号处理:用Qt的多媒体框架解码音频帧,实时流送到音频输出设备中播放,同时对帧数据加窗,做傅里叶运算(fftw),得到频谱后,用柱状图进行显示
- SSAO:屏幕空间遮蔽,搭好了FrameGraph,还有Bug...
停更说明
停更一两个月:
- Qt目前已经支持下载6.6.0的开发版本,RHI已经包含DX12后端,部分文件结构有所变动,需要调整QEngineUtilities的代码
- 调整了文章的大纲,为了避免之后的章节存在调整和异动,打算把新加入的那些章节的Demo给写完
- 部分章节的Demo比较枯燥,准备加入一些趣味性,如果您有好的建议,请务必联系我~
- 最近工作压力较大,空余时间也一直在忙,身体状态不是很好~