三维渲染流程

输入装配

顶点缓存(位置,颜色,法线,纹理坐标)
顶点索引缓存
CPU传输到GPU 通过图形总线PCI Express
定义顶点拓扑结构

坐标系转换 Vertex Shader

网格的数据是局部坐标系
变换到世界坐标系 -- 通过矩阵的平移、旋转、缩放
变换到观查坐标系 -- 为了后续的投影变换及其他变换效率,进行取景变换(以摄像机为原点,光轴与Z轴一至的全体变换)

曲面细分 Shader Model 5.0

Hull Shader 细分控制着色器
Tessellation Stage(曲面细分)
Domain Shader 细分计算着色器

几何着色器 Shader Model 4.0

Geometry Shader(几何着色器)
顶点处理,与Vertex Shader不同的是一次一批顶点,可增加或减少几何数据
stream-output stage 输出流保存数据

屏幕映射:

这一步主要是调用硬件接口
裁剪 -- 视域体(视截体)外的去掉
透视投影 -- 为产生近大远小视觉效果,用视域体创建投影矩阵
视口变换 -- 将投影矩阵的顶点坐标转化为屏幕的视口坐标

背面消隐 -- 根据模型对摄像机朝向标记背面

光栅化

决定最终屏幕上的像素数量。
绘制每个三角形单元,计算构成三角形单元的每个像素的值。

像素着色阶段 Pixel Shader

它的输入是顶点间插值后的顶点属性(位置,法向量),还有纹理等,由此计算出一个颜色
利用冯氏光照计算模型,计算光照效果
多重纹理可将自定义光照贴图与目标混合实现自定义光照效果,多重纹理对应多重纹理坐标。
纹理可使用索引引用纹理坐标。

输出混合阶段 Output-Merger Stage

模板测试 -- 是否开启模板测试?比较模板缓冲区值,未通过的舍弃。
深度测试 -- 是滞开启深度测试?比较深度值,未通过的舍弃。
混合 -- 通过的以上测试的像素开始混合操作。

相关资料

Shader语言相关

  1. GLSL语言基础
  2. GLSL使用
  3. HLSL官方文档
  4. 高级着色语言Wk(日语版的更详细)

渲染流程相关

  1. 概览
  2. DX11渲染管线
  3. WK渲染管线
  4. MS DX渲染管线
  5. 相关计算

着色器介绍

  1. 像素着色器
  2. 曲面细分着色器
  3. 几何着色器

UE相关

虚幻4中SceneDepth , PixelDepth ,Customdepth,CustomDepth StencilValue的区别
https://blog.csdn.net/qq_16756235/article/details/78303695
2. 009 寻找UE4的D3D设备
3. 跨平台引擎Shader编译流程分析1
4. 跨平台引擎Shader编译流程分析2

DirectX9.0 3D游戏开发编程基础
UNITY SHADER入门精要

实例代码

  1. OpengGL
  2. DirectX
  3. GLFW

其他

  1. cgToolkit
  2. Dx3D历史
  3. DX9自带光源: 点光源,方向光,聚光源
原文地址:https://www.cnblogs.com/mattins/p/10797748.html