原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION) 学习目标 熟悉环境光遮蔽的基本思路,以及通过光线跟踪的实现方法: 学习如何在屏幕坐标系下实现实时模拟的环境光遮蔽. 1 通过光线追踪实现的环境光遮蔽 其中一种估算点P遮蔽的方法是光线跟踪.我们随机跟踪点P半圆内的光线,然后查看和网格相交的光线.如果跟踪了N条光线,相交了h条,那么点P的遮蔽值为: 只有交点q…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 曲面细分阶段包含渲染管线中的三个阶段,用以细分几何物体,它在顶点着色器和几何着色器之间.使用曲面细分的主要原因: 基于GPU的LOD: 物理和动画的优化,可以在低面模型上计算物理效果和动画,然后细分为高面模型用以渲染: 节…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader) 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes GPU已经被优化为处理单个地址或者连续地址(流操作)的大量内存数据:这和CPU的随机内存访问形成鲜明对比.因为顶点和像素可以独立处理,所以GPU被架构为大量的并行运算:比如NVIDIA…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 模板缓冲(stencil buffer)状态是通过配置一个D3D12_DEPTH_STENCIL_DESC实例,并且赋值到PSO中的D3D12_GRAPHICS_PIPELINE_STATE_DESC::DepthStenci…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 学习如何定义将一个纹理映射到一个三角形上: 学习如何创建和启用纹理: 学习纹理如何被过滤后生产一个更加平滑的图像: 学习如何将一个纹理通过地址模式展开多次: 学习如何将多个纹理合并成一个新贴图和特殊效果: 学习一些基本的纹…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 理解基本的材质和光照之间交互方式: 熟悉局部光照和全局光照之间的不同: 学习如何用数学的方式描述平面上一个点的方向,以便于计算入射光和平面之间的夹角: 学习如何准确的变换法向量: 区分环境光,漫反射和高光: 学习如何实现点…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二) 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 理解本章中针对命令队列的更新(不再需要每帧都flush命令队列),提高性能: 理解其他两种类型的根信号参数类型:根描述和根常量: 熟悉如何通过程序方法来绘制通用的几何形状:盒子,圆柱体和球体: 学…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化 第一章:向量代数 1.向量计算的时候,使用XMVECTOR(可以利用SIMD优点):类成员变量使用XMFLOAT2 (2D),XMFLOAT3 (3D),和XMFLOAT4 (4D) . 2.向函数传递参数的时候(XMVECTOR可以直接传递到SSE/SSE2)前三个参数类型要定义为FXMVECTOR: 第四个要定义为GXMVECTOR: 第五个…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十七章:拾取 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 学习如何实现拾取算法,我们将它分解为下面几个步骤: 当点击屏幕上s点时,计算对应的透视窗口上的点p: 在视景坐标系下计算拾取射线: 将射线和要进行检测的模型变换到同一个坐标系下: 检测模型是否和射线相交,取深度值最小的那…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 学习如何实现硬件实例化: 熟悉包围体,学习如何创建和使用它们: 学习如何实现截头锥体剔除. 1 硬件实例化 给每个实例都复制一份顶点和索引是非常浪费的,所以我们只保存一份物体在局部坐标系下的数据,然后使用…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十二章:几何着色器(The Geometry Shader) 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 假设我们没有使用曲面细分阶段,几何着色器阶段就是在顶点着色器和像素着色器之间的一个可选的阶段.几何着色器输入的是基元,输出的是一个基元列表:假如我们绘制的是三角形列表,那么几何着色器…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数 学习目标: 理解矩阵和与它相关的运算: 理解矩阵的乘法如何被看成是线性组合: 理解单位矩阵.转置矩阵.矩阵的行列式和逆矩阵: 熟悉DirectX Math库中矩阵相关的类和函数: 1 矩阵的定义 一个m x n的矩阵M是一个有实数组成的m行n列的矩阵. 两个具有相同行数和列数的矩阵,每个对应的元素都相等的情况下,两个矩阵相等: 两个矩阵具有相同的行和…