渲染管线部分理解

  1. CPU处理部分

drawcall

耗的原因:许多状态的切换(更新寄存器),设置很多渲染参数(哪些顶点被使用,使用shader),驱动层(验证以及转换你的调用)

setpasscall

如果绘制的material没有变化,就不会有

笼统理解

drawcall和setpasscall都是在cpu提交给gpu的命令缓冲中

Gpu从命令缓冲中逐条取出指令,如果看到的指令是setpasscall,则更新渲染状态

shader不同的pass可能需要不同的渲染状态并且drawcall

合批

srpbatcher

动静分离,将经常变化的如transform信息放到一个大的CBuffer中,而将不常变化的显示材质属性,放到独立的小cbuffer中。每次都还需要drawcall,但是由于并未变更显式属性等数据,无需setpasscall,从而减少cpu的消耗

需要保证shader相同以及变体等相同

gpuinstance

所有需要instance的物件,网格数据相同,将不同物件不同的部分如transform,颜色等放到一个大的CBuffer中,然后shader根据id来索引不同的部分渲染

shader warm up

shader在打包阶段只是编译成平台独立的字节码

需要根据目标硬件通过warmup在转换成目标具体的可执行字节码

数据准备

VBO

表示顶点缓冲的buffer

VAO

指定GPU应该怎么解析VBO

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 sizeof(float), (void)0);

贴图

bind贴图等数据

从磁盘中直接读取到显存

遇到共用贴图的情况:bind与upload也只发生一次

 

  1. 顶点着色器

将顶点转化到clip空间

  1. 曲面细分着色器
  2. 几何着色器
  3. 光栅化

三角形设置

三角形裁剪

三角形遍历

决定图元覆盖哪些片元(包含法线、color,uv等插值后的数据)

MSAA

相机与远近裁剪面关系

修改近裁剪面的距离,物体成像位置以及大小都不变

通过vp矩阵,转到clip空间后,物件在近裁剪面处此时的w分量恰好位near值

clip/w后,处在屏幕内的X、Y、Z的值都在-1,1间

计算光照可以放在vertex或者fragment中,fragment就是光栅化片元,内部数据以及根据重心坐标做过插值(思考渲染时只要想象顶点的数据如何做渲染,并不需要过分考虑片元的渲染)。后处理中根据深度重建世界坐标的做法也仅仅是计算近裁剪面四个顶点的射线,fragment中自动做插值,得到view pace中的射线

改变相机位置时,如果总是对着物体,那么物体边缘始终处于NdotL地方

  1. 片元着色器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值