-
项目正式始于2015.6.12(高考完的暑假)(想不到我在2014.1月的时候,也就是高二上的寒假就已经碰过下d3d11,只不过卡了很久,后来就搞3D扫描仪去了)。直到高考完才叫做正式开始这个项目。唉渲染引擎乃至游戏引擎的架构真的是太重要了,得放慢开发速度,不能整天加new feature就要重构和给以前擦屁股(虽然如果不踩这么多坑,也很难对一些书本学到的东西有深刻印象),多使用和参考一下优秀的开源引擎/商用引擎的架构和实现才行。
-
因为项目开始的时候还在入门c++,所以其实代码风格都有点歪了,改了很久。也没有考虑跨平台,甚至没有考虑目标平台的问题,暂时就只能用着x86/Win32的目标平台了。
-
项目一开始的时候用的是DirectX SDK(2010 June),但好像其实在Win8/10之后就基本不太需要这玩意了,头文件和lib都装在Windows SDK上。但是Noise3D里面还有一些对旧版D3DX的依赖(例如数学库)我觉得要慢慢把这些玩意deprecate掉了
-
(2018.7.19)现在正在把旧的D3DX deprecate掉。逐渐用上Win8.1 SDK的东西
- FreeType(字体库):https://www.freetype.org/
- FBXSDK(autodesk的FBX模型导入\导出\处理SDK),自己去autodesk网站下载
- DirectXTex(图片/纹理加载):https://github.com/Microsoft/DirectXTex
- Effects11(shader组织框架):https://github.com/Microsoft/FX11
- SimpleMath(DirectXMath wrapper,在DirectXTK下有SimpleMath的封装实现)(2018.7.19):https://github.com/Microsoft/DirectXTK
- Qt 5.7.0 msvc2015-32bit(基于Noise3D应用的GUI框架)(2018.9):https://download.qt.io/archive/
- 这些文件得自己去build,然后把相应的include和lib文件copy到\ExternalInclude和\ExternalLib里面。
- \ExternalInclude里面有一些其他版本的第三方库的头文件,可以根据自己需求魔改成新的版本
- \ExternalLib里面是装第三方库的.lib静态库文件的,自己build好32-bit的debug/release放到对应的路径
- 可能需要修改一下Noise3D VS项目里面的链接选项。
- DirectXMath是一个用SSE指令实现了SIMD优化的数学库,在Win8.1 SDK开始提供,当然也可以在github上找到这个开源库 https://github.com/Microsoft/DirectXMath 。SimpleMath是DirectXMath的一个轻度封装的头文件,在DirectXTK项目下,不需要编译lib。DirectXMath大部分都是内联实现,即使不内联的好像也是开源的,include header就好了)
- Qt只是一个库,虽然它自带QtCreator这个IDE,但一般我是用visual studio来工作的,所以安装好Qt之后还是有装多个Qt-vsaddin比较方便操作。第一个使用Qt的项目是GUI-SHLighting,基于Noise3D做的一个球谐光照相关的可视化。
(TODO: PBR material/shader、阴影贴图(SM,CSM,VSM), Terrain System, Particle System, Billboard, Visibility Culling, LightMapBaker, UV Unwrapper, Post-Processing Effect(xx-Ambient Occlusion, HDR, Bloom, tone mapping, depth-of-field, non-photorealistic render))
-
材质Material:Diffuse Map, Normal Map, Specular Map, Cube Map(reflection)
-
在内存端的纹理的逐像素修改,也有高度图-->灰度图-->法线图的接口(转法线图的卷积核大小为2x2)
-
Scene Graph/Scene Node(支持hierarchical transform,但暂时不支持直接对某场景节点apply其他属性)
-
逐顶点/像素光照。per vertex/pixel lighting
-
基于DInput8的输入引擎
-
天空盒(cube map)/天空球
-
2D元素(点、线、面、三角形、2D贴图纹理)
-
文字渲染
-
模型加载: .stl, .obj, .fbx (.3ds格式不开源,实现不稳定,不建议使用)
-
碰撞检测器(not stable):GPU加速的ray-mesh求交。(以后应该会换成基于第三方物理引擎里面的碰撞检测)
-
模型处理器(not stable):网格简化 (很不稳定,还没实现几何坍缩类的算法,不建议使用);
-
后处理(Renderer):post processing
- 转灰度
- Qwerty Distortion (之前用来做另一个项目Qwerty 3D时候做的,应该是没什么卵用了)
-
拖尾特效(Sweeping Trail)
-
Spherical Harmonics相关的模块
-
用于Path Tracer的基于物理的材质
-
路径跟踪器(DXR风格接口,可使用c++重写软着色器soft shader)(实现了基于物理的Standard Soft Shader,支持Microfacet-Based Diffuse/Specular/Transmission)
-
BxdfUt
-
RandomSampleGenerator
-
计时器(Timer)
-
3D网格切层器(3D Mesh Slicer)
-
体素化器(Voxelizer)
-
基于Marching Cube算法的网格重建器