二、D3D12学习笔记——渲染流水线

龙书中说:渲染流水线是以摄像机视角生成2D图像的一系列过程。个人感觉:渲染流水线是以摄像机视角生成2D图像一个像素的一系列过程。

GPU生成多个像素是并行的,每个像素都由渲染流水线这个串行过程。把这个过程想象成一个工厂流水线:

一、输入装配阶段(分拣员)

今早车间进购了一批原材料,不仅有整车的原料(各种Buffer),还有原料清单(描述符堆/描述符),分拣员的工作就是对照原料清单把原料分拣归纳。

CPU给GPU(我们的流水线车间)发来了一堆的顶点数据(vertex)和数据组(index),输入装配根据图元拓扑关系进行分拣组合

cmdList->IASetVertexBuffers(0, 1, &ri->Geo->VertexBufferView());
        cmdList->IASetIndexBuffer(&ri->Geo->IndexBufferView());
        cmdList->IASetPrimitiveTopology(ri->PrimitiveType);

分拣的具体要求:结合图元拓扑关系组合数据,例如:把第偶数个三角形前两个顶点索引翻转,保证绕序一致。

二、顶点着色器(只会矩阵的数学天才)

for(auto item:Invertices){OutVertices.push_back(VertexShader(item));}

这个加工工具VertexShader,可以把分拣员给他的每个节点item都加工一下,主要进行矩阵变换,然后进入下一阶段。

三、曲面细分(专业摸鱼)

近距离盯着才有作用,稍远就无作用(摸鱼)

作用:

  1. 1.CPU内存存储维护低模,占用资源少,流畅;
  2. 2.CPU端低模状态模拟动画和物理效果,交给后续GPU使用高模获得好的视觉效果。

四、几何着色器(关系户)

这是个关系户,他知道一些别人不知道的特殊规则,对于前三位同事的结果,他会对于某些特别要求的细节他会进行丰富(把一个点拓展为一个线,面等)或者销毁。

五、剪裁(1#质检员)

用透视除法(齐次坐标)去检查,所有不在他这个范围内的点都不能要。这个过程是硬件封装好的,在VS之后,PS之前做。

六、光栅化(网格员)

将裁剪后的结果放到视口里边,在NDC中来看,这叫做视口变换,之后将这些结果插值变成一个一个小方格(纹素)给下一阶段。

七、像素着色器(画家)

for(auto item:Infragments){OutVertices.push_back(FragmentShader(item));}

是个画家,他会根据今天天气光线,场景,聚光灯位置,颜色等等不同选择不同的颜色给他的小方格作品着色。

八、输出合并阶段(组装员)

进行逐个组装(Alpha Test和Stencil Test等),对于不合格的他会直接丢弃(discard)。有时候他会把要求一起打包的混合后给出来(blend)。

分拣员,数学天才,摸鱼哥,关系户,1#质检员,网格员,画家和组装员,简单的记忆如下:

分数摸(莫)关系,质(织)网画(化)组装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值