Skip to content

CHINA-JIGE/Noise3D-DirectX11

Repository files navigation

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)

注意:

  • 这些文件得自己去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, 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)

Noise3D GI System

  • 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算法的网格重建器

Packages

No packages published

Languages