原文链接

可编程渲染管线处理数据的流程可分为以下3大阶段

1. 应用阶段

这个阶段大概会由CPU处理4件事情。首先会对模型数据进行可见性判断。模型数据由顶点位置、法线方向、顶点颜色、纹理坐标等构成。然后会将模型数据加载到显存以提高读取速度。再为每个图元设置常数寄存器和渲染状态。最后为一个渲染图元列表调用DrawCall指令。

图元可以是点、线、三角形。

2. 几何阶段

这个阶段由GPU进行处理,会对每一个需要渲染的图元进行逐顶点、逐多边形处理,最根本的任务是将顶点的模型坐标转换到屏幕空间。

2.1 顶点着色器

顶点着色器的基本任务是将顶点转换到齐次裁剪空间,还可以进行的其他任务有:

  • 逐顶点着色操作,如逐顶点光照
  • 纹理计算
  • 逐顶点蒙皮
  • 逐顶点程序式动画(procedural animation)

2.1.1 投影变换

透视投影

在摄像机使用透视投影的时候,为了呈现出近大远小的透视收缩(perspective foreshortening)效果,需要对顶点进行透视投影变换。使用透视投影矩阵进行变换后,并没有进行裁剪,只是使得w值有了意义,为后面的裁剪做准备。

Unity透视投影矩阵(右乘)

会改变空间手系,从右手系变成了左手系,因为Unity的观察空间是右手系,NDC空间是左手系

观察空间中的顶点(x,y,z)透视投影到齐次裁剪空间后变为

透视投影齐次裁剪空间中坐标的w值为

正交投影

$正交投影远(近)裁剪平面高度=2 \cdot Size$

Unity正交投影矩阵(右乘)

会改变空间手系,从右手系变成了左手系,因为Unity的观察空间是右手系,NDC空间是左手系

观察空间种的顶点(x,y,z)正交投影到齐次裁剪空间后变为

正交投影齐次裁剪空间中坐标的w值为1

2.2 曲面细分着色器

用于细分图元

2.3 几何着色器

  • 几何着色器的功能是修改、剔除、创建图元,可以实现以下效果:
  • 阴影体积拉伸(shadow volume extrusion)
  • 渲染立方体贴图(cube map)的6个面
  • 在网格的轮廓边拉伸毛发的鳍(fur in)
  • 从点数据生成例子四边形
  • 动态镶嵌
  • 把线段分形细分(fractal subdivision)以模拟闪电、布料
  • 将数据传到管线开头重新进入管线
    • 用例:在顶点着色器内对头发样条的控制点进行物理模拟,在几何着色器内把样条镶嵌成线段,通过流输出将线段传到管线开头重新进入管线进行渲染

      2.4 裁剪

      裁剪的作用是将每个三角形在平截头体以外的部分切掉,把在平截头体以外的三角形剔除。

满足以下条件的顶点才会被保留下来:

2.5 齐次除法

所谓的齐次除法就是让x、y、z都除以w,这时就可以得到NDC空间中的坐标

上图右边都是OpenGL的NDC,DirectX的NDC也和上图右边类似,但z范围在[0,1]

2.6屏幕映射

视口空间:程序运行窗口构成的空间

矩阵中的X、Y是视口空间原点的屏幕坐标

3. 光栅化阶段

这个阶段由GPU来决定绘制哪些片元以及这些片元的颜色

片元=片段:三角形被栅格化后,其中的每一个小方块都是一个片元,可以看成是还不确定最终是否可以呈现到屏幕上的像素

3.1 三角形设置

这个阶段的任务是找出三角形边界所覆盖的像素

3.2 三角形遍历

这个阶段会对每个三角形进行栅格化,即找出每个三角形覆盖的像素区域。区域中的片元中信息(屏幕坐标、深度值、法线坐标、纹理坐标)由3个顶点数据进行插值(必要时会采用透视校正插值)得到

3.3 提前深度测试

如果用户没有在片元着色器中改变深度或自我丢弃(discard),显卡会自动开启该功能

3.4 片元着色器

用于执行逐像素着色操作,如纹理采样、多重纹理采样、逐像素光照

3.5 逐片元操作

3.5.1 模板测试

if 开启了模板测试 then比较参考值(使用读取掩码)和模板缓冲区中的模板值(使用读取掩码)if not 通过模板测试 then舍弃该片元end根据已设置的渲染状态更新模板缓冲区中的值(使用写入掩码)
end

3.5.2 深度测试

if 开启了深度测试 then比较该片元的深度值和深度缓冲区中的深度值if 通过了深度测试 thenif 开启了深度写入 then将深度值写入深度缓冲区endelse舍弃该片元end
elseif 开启了深度写入 then将深度值写入深度缓冲区end
end

3.5.3 混合

if 开启了混合 then用alpha混合函数(alpha blending function)将该片元的颜色值和颜色缓冲区中的颜色值进行混合
else直接使用该片元的颜色值
end
更新颜色缓冲区中的颜色值

由于还要搬砖,没有办法一一回复私信把学习资料发给大家。我直接整理出来放在下面,觉得有帮助的话可以下载下来用于学习

链接:https://pan.baidu.com/s/1C-9TE9ES9xrySqW7PfpjyQ 提取码:cqmd

小弟才浅,如果本篇文章有任何错误和建议,欢迎大家留言 感谢各位人才的点赞收藏关注

可编程渲染管线(Scriptable Render Pipeline, SRP)相关推荐

  1. 3D图形的概念和渲染管线(Render Pipeline)

    3D图形的概念和渲染管线(Render Pipeline) 前面介绍了3D图形历史,接下来要解说的是3D图形的处理流程. 3D图形管线的流程图 图1是3D图形的流程模型.这个虽然是对应DirectX ...

  2. 【西川善司的3D图形技术连载】3D图形的概念和渲染管线(Render Pipeline)(9~13回)

    3D图形的概念和渲染管线(Render Pipeline) 前面介绍了3D图形历史,接下来要解说的是3D图形的处理流程. 3D图形管线的流程图 图1是3D图形的流程模型.这个虽然是对应DirectX ...

  3. Lightweight Render Pipeline

    (翻译) Lightweight Render Pipeline (LWRP),轻量级渲染管线,是一个Unity预制的Scriptable Render Pipeline (SRP).LWRP可以为移 ...

  4. Unity-TA 成长之路(三)URP-Universal Render Pipeline

    因为Unity版本为2020.3.20,推荐使用Universal RP 10.6.0,所以去看了这个版本的文档. 而unity.cn也未对此部分做中文解释: 所以只能去看外文网站了,蹩脚的英文水平, ...

  5. unity hub是什么东西_Unity可编程渲染管线(SRP)教程:一、自定义管线

    本文翻译自Catlike Coding,原作者:Jasper Flick. 本文经原作者授权,转载请说明出处. 原文链接在下: https://catlikecoding.com/unity/tuto ...

  6. micro hdmi引脚定义义_Unity可编程渲染管线(SRP)教程:一、自定义管线

    本文翻译自Catlike Coding,原作者:Jasper Flick. 本文经原作者授权,转载请说明出处. 原文链接在下: https://catlikecoding.com/unity/tuto ...

  7. unity绘制管道_Unity可编程渲染管线(SRP)教程:一、自定义管线

    控制渲染 创建pipeline asset 和 instance. 剔除.过滤.排序.渲染. 保持内存清洁. 提供良好的编辑体验. 这是Unity scriptable render pipeline ...

  8. Unity可编程渲染管线系列(一)自定义管线(控制渲染)

    本文重点: 1.创建管线资产和实例 2.剔除.过滤.排序.渲染 3.保持内存干净 4.提供良好的编辑体验 这是涵盖Unity可编写脚本的渲染管线的教程系列的第一部分.本教程假定您首先阅读了Unity基 ...

  9. Unity可编程渲染管线系列教程(1):自定义渲染管线

    前言     Jasper Flick<Unity可编程渲染管线>系列教程之:自定义渲染管线.该教程分享了用户如何在Unity引擎从头构建简易的渲染管线.原文链接可见该博客末尾. 目录 创 ...

最新文章

  1. Spring.NET学习笔记(5)-对象生命周期和创建者对象
  2. 关于FATFS文件系统挂载多个磁盘
  3. 学习dubbo(二): 第1个例子
  4. 如何在 Linux 中启用 Shell 脚本的调试模式
  5. linux控制台单人五子棋简书,Java控制台版五子棋的简单实现方法
  6. kubectl命令自动补全功能
  7. App设计灵感之十二组精美的酒店预定App设计案例
  8. SpringMVC整合Redis2.9.0
  9. introduce of servlet and filter
  10. MATLAB学习笔记(十二)
  11. vant 动态 粘性布局_CSS Viewport 单位,很多人还不知道使用它来快速布局
  12. 最高76%破解成功率!GAN已经能造出“万能指纹”,你的手机还安全吗?
  13. Shadow Mapping续
  14. 常用三角公式、变形及图形
  15. 长翅膀的不一定是天使
  16. 在html中字怎么修改位置,css怎么设置字体位置?
  17. python 显示字典内容_在pythontkin的标签中显示字典内容
  18. FreePic2Pdf 制作书签
  19. html 超链接打开Excel,excel超链接打不开解决方法
  20. 推荐算法架构2:粗排

热门文章

  1. html两条下划线重叠,解决文字与下划线重叠的问题
  2. MacOS12安装联想CM7120W打印机,实现彩色打印
  3. 我为什么选择了电商行业?
  4. 月薪一万和月薪十万的差距真的只有十倍吗?
  5. 【转】淘宝技术牛p博客整理
  6. oracle12c收缩临时表空间,Oracle12CRAC关于临时表空间的一点启示
  7. 芯片翻译之ICM20602(一)
  8. 合工大合肥工业大学计算机考研
  9. 合工大计算机与信息学院保研,合肥工业大学计算机与信息学院(专业学位)电子与通信工程保研夏令营...
  10. k8s- HPA应用