Kongouuu's Blog

慢慢学图形

渲染引擎开发笔记6

描述符堆管理

前言 目前开发的进度已经可以加载模型和贴图、使用ShadowMap、以及配置好了ImGui。在前面陆续开发这些功能的时候都是用一个比较笨拙的方式去处理整个DX12的描述符堆。但是因为考虑到后面需要大量的使用类似OpenGL的FBO的这样的东西,所以对描述符堆的进阶管理是不可少的。讲了怎么管理描述符堆后,在贴图,阴影贴图,和ImGui适配上会很明显的感受到描述符堆管理的重要性。 在开始正文...

渲染引擎开发笔记5.2

单例模式

正文 一个引擎内部一般都会有很多管理类吧。拿我这个来说无论是引擎侧还是渲染器侧都需要很多管理类去统一的管理不同的数据。为了更好的去使用这些类我们需要用到单例模式的设计模式。 为什么使用单例 抛开基础的什么减少内存开支和避免不必要的创建销毁来说,使用单例还有一些额外的好处,个人感觉。 增加一个管理类的可调用范围 不使用单例的话那么我们会在需要使用到管理类的的类中去定义一个管理类的实例...

渲染引擎开发笔记5.1

场景管理

前言 上一章节比较草草了事的简单提了一下Input Assembly部分的一些思路吧,并没有特别的细节,毕竟也只是个人反思。 实际上我们加载很多物体的时候我们不能像DX12龙书那种功能示范性代码一样去直接的去直接的建立不同的Mesh然后不对他们进行管理。想当然我们肯定是要对物体建立一个管理类。 很多的引擎的做法是用一个Scene Graph去管理场景的物体。如果我没有理解错的话这就是像...

渲染引擎开发笔记5

DX12绘制方块初始化

前言 上一章节主要是构思在渲染一个物体时引擎端和渲染器端的交互。现在开发进度已经到在做阴影贴图了,路上也对整个架构进行了许多的迭代和更改。总的来说上一章节的想法并没有太大的问题,不过有一点是我前面的思路太过于想要让不同的模块变得独立,反而起到了一些反效果。我的渲染器本质上就应该是适配我的引擎的,所以有很多的信息是他们应该能得到的,比如说输入格式/变换矩阵/材质格式等信息。 模块化的最终目...

渲染引擎开发笔记4

绘制物体设计思路

前言 原本想要一点进度一点进度的去写这系列笔记。不过在当前的一个架构下去绘制一个方块的整体开发流程特别的繁琐。我整个开发的流程是先从渲染器侧去先渲染一个方块,然后再一步一步把建立一个物体的操作移动到引擎那边。 这里首先是要对DX12本身用到的很多东西去包装,比如说Shader,PSO,DescriptorHeap等。由于我们要考虑到在继承自引擎的不同程序里,会进行不同数量的物体和贴图的加...

渲染引擎开发笔记3

代码框架

前言 在前两篇笔记的过程中,主要是稍微设想了一下程序的结构,并且添加了很多子系统(例如窗口)。随着代码量的增加肯定是不可以把所有的东西全部放在一起的,要把他们全都分开,不过个人去Github上参考别人的渲染引擎的时候发现每个人的手法都是比较不一样的,这边也记录一下设计代码结构的一个过程。 代码结构 大体框架 首先,因为当时考虑的是一个比较固定的引擎(DLL),并且把加载不同的物体这样...

渲染引擎开发笔记2

建立DX12窗口

前言 上一篇文章其实挺杂乱的,最主要还是学习了一些可以用到的工程技巧吧。从稍微纵观的方向来看,本质上写的东西就是:建立了一个控制整个渲染引擎的Application/应用类,然后他目前可以在初始化阶段建立窗口。 除此之外加了个Debug用的Log系统。虽然感觉工作量不是很多,但在工程上和结构上其实还是对我提供了不少开导吧。 作为人生的第一个渲染玩具,也不想考虑太多什么【可兼容多个渲染AP...

DX12笔记 - DX12渲染流程

如何包装DX12到渲染引擎

前言 前阵子看了DX12龙书,并且感觉自己对整个流程有一定的理解,可以修改示例来达到自己想要的效果。这几天想搓个小渲染器,发现其实自己 根本不懂DX12。之前写的笔记其实用处也不大。是的,笔记也是写的很离谱的杂项记录。 这里的话主要还是整理一下整个DX12最基础的一个渲染流程,了解一下每个阶段应该做什么,并且了解什么数据是可以运行时动态的去更改(添加)的。这样有益于之后的渲染引擎的开发,...

渲染引擎开发笔记1

引擎基本架构

前言 想要开发一个渲染玩具来实践一些渲染知识,不过在学龙书的路上都是用着偏有针对性的(没泛用性)的程序结构,所以需要重新鼓捣一下。本来想着类似于LearnOpenGL那样去进一步的封装,比如说把贴图,VBO,根参数等全部都封装好,加个stb读纹理,加个assimp读模型,不过感觉又好像差点什么。总之先一步一步来开始搓。 这里我选择称呼我的项目为一个渲染引擎,因为注重的点是渲染。 不叫渲染...

图形实战 - NiagaraSPH水体模拟

用UE4实现可互动水体

前言 前阵子在实习的时候有被要求做一个单人的mini,当时我想要做一个类似TRINE(三位一体)的横向卷轴交互解密游戏。并且我希望有元素的互动,比如说让水结冰啥的。做的过程其实本来里面大部分都是苦力活,没啥特别的,唯一有趣的就是中间摸了一下Niagara做小特效,不得不说这系统真的强。 当时就想,demo里需要有一个充满技术力的卖点吧,那当然 就是水体了!这是个很自然的想法,如果我能让水...