下图是《unity shader 入门精要》一书中的渲染流程图;
applicationstage阶段:准备场景信息(视景体,摄像机参数)、粗粒度剔除、定义每个模型的渲染命令(材质,shader)——由开发者定义,不做讨论;
gemetrystage阶段:顶点着色器、曲面细分着色器、几何着色器、裁剪、屏幕映射;
rasterizerstage阶段:三角形设置遍历,片元着色器、逐片元操作;
每个阶段具体操作如下图(虚线框是可选阶段):
模型空间——矩阵变换——齐次裁剪空间——透视除法——ndc标准设备坐标——屏幕映射
齐次裁剪空间是视景体空间(台体);
cvv:标准视体-也就是ndc坐标系对应的空间;
透视除法:顶点坐标除以w分量,将当前z深度所在的截面缩放为(2,2,2)的截面坐标;所以w分量记录了z深度信息;
硬件做透视除法获得ndc归一化设备坐标——再经过屏幕映射获得屏幕坐标系下顶点坐标;
unity使用opengl的ndc,z分量在[-1,1罗马假日观后感];
opengl和directx差异
ndc空间——opengl为[-1,1],directx为[0,1],深度z范围不同;
窗口坐标系——directx左上角原点,opengl左下角原点;
投影平面——directx投影平面就是视景体近截面,o各省会简称pengl有视平面;
左右手坐标系——directx左手,opengl右手,叉乘智商的英文顺序;
为什么片元不叫像素?
片元是很多状态的集合,记录了该像素的屏幕坐千纸鹤的折叠方法标,深度信息,法线,uv等;
drawcall为什么会影响性能?
drawcall是cpu向gpu添加渲染命令的过程,过程会由cpu向gpu发送数据(模型信息),drawcall的次数越多cpu消耗性能就越大,drawcall次数过多会导致每一帧cpu来不及发送全部数据给gpu渲染;
gpu有一个命令缓存区(command buffer),cpu的渲染命令都会存储在这里,gpu从命令缓存在校大学生区依次执行渲染命令;
两种渲染命令:渲染模型(cpu提交模型信息也就是drawcall)和改变渲染状态(着色器纹理状态改变,更耗时);
一般情况都是gpu渲染完成等待cpu发渲染命令;
本文发布于:2023-04-04 12:50:14,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/b211184b89d0aafc83e5294c2657cad4.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:图形学之Unity渲染管线流程分析.doc
本文 PDF 下载地址:图形学之Unity渲染管线流程分析.pdf
留言与评论(共有 0 条评论) |