DirectX12TechDemo

所属分类:DirectX
开发工具:C++
文件大小:288311KB
下载次数:0
上传日期:2019-12-23 09:48:37
上 传 者sh-1993
说明:  技术演示,展示我的DirectX 12初级基本编程技能
(Technical demo to show my DirectX 12 basic junior-level programming skills)

文件列表:
DirectX12TechDemo-Release (0, 2019-12-23)
DirectX12TechDemo-Release\TechDemo (0, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\ClassDiagram.png (190526, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\Output-Debug.txt (17655, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\Screenshots (0, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\Screenshots\TechDemo_1.jpg (6839802, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\Screenshots\TechDemo_2.jpg (5428687, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\Screenshots\TechDemo_3.jpg (6802899, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\Screenshots\TechDemo_4.jpg (1512400, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo.sln (1494, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo (0, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\ApplDataStructures.h (3457, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\ApplException.h (856, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\ApplLogger.cpp (773, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\ApplLogger.h (512, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BasicDXGI.cpp (13937, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BasicDXGI.h (3846, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BlurRender.cpp (6367, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BlurRender.h (1033, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BoneAnimation.cpp (2279, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BoneAnimation.h (727, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BoneData.cpp (2797, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BoneData.h (1176, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BoundingMath.h (3605, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\BoundingMath.inl (13183, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\Camera.cpp (9421, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\Camera.h (4369, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\Canvas.cpp (5258, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\Canvas.h (2530, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\ClassDiagram.cd (18041, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\ComputeRender.cpp (8222, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\ComputeRender.h (1648, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\DebugRender_Axis.cpp (5486, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\DebugRender_Axis.h (627, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\DebugRender_Light.cpp (3154, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\DebugRender_Light.h (664, 2019-12-23)
DirectX12TechDemo-Release\TechDemo\TechDemo\DebugRender_Normals.cpp (4420, 2019-12-23)
... ...

# DirectX12TechDemo **Please find a video with TechDemo application demonstration on YouTube: https://youtu.be/uSJOSiK7oxk** **Goal**: A Technical demo to show my DirectX 12 basic/junior-level programming skills **Description:** Hello, my name is Dmitriy and i want to be Rendering/Graphics Engineer. This Project is to put together and upgrade my C++ and DirectX 12 programming skills. This project looks like some kind of 3D Engine, with possability to load a scene from several FBX files and render it using some render techniques. But in the same time, it does not claim to be 'real' 3D Engine. The goal was to create a solid 3D application with attention to using next topics: * DXGI * Factory, Device, Adapter * SwapChain * The main parts of DirectX 12 application * Command Queue and Command List * Pipeline State Object * Rootsignature (defined in Shaders files) * Descriptions and Description Heaps * Resources and Heaps (CommitedResources in Upload and Default Heaps) * CPU/GPU synchronization with Fences * Mathematic / Algorithmic part * 3D Mathematic (Matrix, Vectors, Coordinate transformation) * Bounding Objects mathematic (Books[4]. Chapter 8) * View Frustum Culling * Octree * Skeleton animation * Reading FBX file (using FBX SDK) * Some Rendering Techniques * Lighting model: Lambert's cosine law + Fresnel equations (Schlick approximation) * Screen Space Ambient Occlusion * Dynamic Shadows (Sun light with Orthogonal projection) * Normal Mapping * Water simulation on Computer Shaders (Books[4]. Chapter 15 ) **Screenshots (3840x2160):** ![Alt text](https://github.com/TechDemo/Screenshots/TechDemo_1.jpg?raw=true "Screenshot 1") ![Alt text](https://github.com/TechDemo/Screenshots/TechDemo_3.jpg?raw=true "Screenshot 2") ![Alt text](https://github.com/TechDemo/Screenshots/TechDemo_4.jpg?raw=true "Screenshot 3") **Application architecture:** ![Alt text](https://github.com/TechDemo/ClassDiagram.png?raw=true "ClassDiagram") * Application part 1. __*Canvas*__ class creates a basic windowed application 2. __*BasicDXGI*__ extents __*Canvas*__ by inheriting to add a support of DXGI to application 3. __*TechDemo*__ class extents __*BasicDXGI*__ by inheriting to add application logic. Inheriting is used to allow child-class, using virtual methods get access to main loop in Canvas class. * Resource part 1. __*FrameResourceManager*__ allows application to store GPU and CPU resources requied for each frame: - Command allocator to store recorded Command list for frame - Constant buffers with data which should be updated for every frame 2. __*ResourceManager*__ allows to store GPU data for Scene data: Meshes, Textures (DDS format) and Materials data * Scene part 1. __*FBXFileLoader*__ using FBX SDK loads a FBX file to the application, moving data from it to: - __*ObjectManager*__ - stores all objects in a Scene, using Object layers (Opaque, Transparent, Sky etc) - __*SkeletonManager*__ - stores Skeleton data 2. __*Scene*__ class adds some more abstraction to __*ObjectManager*__ idea: representing the scene, it allows to some Object Layers to be turned on/off for drawing, it is a source of data for Renders. Using View Frustum culling and Octree it creates list of visible Object's Instances for each frame * Render part - Renders, using __*Scene*__ object, implement some render technique (__*SSAORender*__, __*ShadowRender*__ etc) or final scene drawing (__*FinalRender*__). Each Render has its own set of Pipeline State Objects (PSOLayers) for each Objects Layer (Opaques objects, Transparent objects, Opaque Skinned Objects etc). But because PSOLayer for some Render has the same RootSignature for all Objects Layers, it is no need to set all RootSignature arguments every time when we draw a Objects Layer, changing a PSO for this. **Application Control:** - Camera rotation: a mouse - Camera moving: W/S/A/D - Camera animation on/off: C - Light animation on/off: L - SSAO turn on/off: NumPad7 - Shadows turn on/off: NumPad8 - Normal mapping turn on/off: NumPad6 - Water reflection turn on/off: NumPad4 - Water simulation turn on/off: NumPad9 - Water drop add: NumPad5 - Which texture to show: - Final Image: 1 - SSAO View-space Normal Map (if SSAO is turned on): 2 - SSAO AO Map (if SSAO is turned on): 3 - SSAO AO blured Map (if SSAO is turned on): 4 - Shadow map (if Shadows are turned on): 5 **Books:** 1. "Thinking in C++. Volume One: Introduction to Standard C++. Second Edition". Bruce Eckel. 2. "Thinking in C++. Volume Two: Practical Programming. Second Edition". Bruce Eckel, Chuck Allision. 3. "Introduction to 3D Game Programming with DirectX 12". Frank D. Luna. 4. "Mathematics for 3D Game Programming and Computer Graphics. Third Edition". Eric Lengyel. **Contacts:** Please feel free to contact me (bobkovds285@gmail.com) if you want to get more information. **Thank you.**

近期下载者

相关文件


收藏者