# Noise3D-DirectX11
**Repository Path**: micheal_yu/Noise3D-DirectX11
## Basic Information
- **Project Name**: Noise3D-DirectX11
- **Description**: 基于D3D11的渲染引擎
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-05-02
- **Last Updated**: 2021-11-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Noise3D:基于D3D11的渲染引擎 #
----------------------------------------------
1. 项目正式始于2015.6.12(高考完的暑假)(想不到我在2014.1月的时候,也就是高二上的寒假就已经碰过下d3d11,只不过卡了很久,后来就搞3D扫描仪去了)。直到高考完才叫做正式开始这个项目。唉渲染引擎乃至游戏引擎的架构真的是太重要了,得放慢开发速度,不能整天加new feature就要重构和给以前擦屁股(虽然如果不踩这么多坑,也很难对一些书本学到的东西有深刻印象),多使用和参考一下优秀的开源引擎/商用引擎的架构和实现才行。
2. 因为项目开始的时候还在入门c++,所以其实代码风格都有点歪了,改了很久。也没有考虑跨平台,甚至没有考虑目标平台的问题,暂时就只能用着x86/Win32的目标平台了。
3. 项目一开始的时候用的是DirectX SDK(2010 June),但好像其实在Win8/10之后就基本不太需要这玩意了,头文件和lib都装在Windows SDK上。但是Noise3D里面还有一些对旧版D3DX的依赖(例如数学库)我觉得要慢慢把这些玩意deprecate掉了
4. (2018.7.19)现在正在把旧的D3DX deprecate掉。逐渐用上Win8.1 SDK的东西
----------------------
## Noise3D的外部依赖库(External Dependencies)
* 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做的一个球谐光照相关的可视化。
----------------------
## Features
(TODO: PBR material/shader、阴影贴图(SM,CSM,VSM), Terrain System, Particle System, Billboard, Scene Graph/Node System, Visibility Culling, RayTracer, 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)
* 逐顶点/像素光照。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 Lighting's Utility
--------------------------------------------------
## 一些小工具类
* 计时器(Timer)
* 3D网格切层器(3D Mesh Slicer)
* 体素化器(Voxelizer)
* 基于Marching Cube算法的网格重建器