博客
关于我
【unity shader 入门精要】CH2 渲染流水线
阅读量:305 次
发布时间:2019-03-04

本文共 982 字,大约阅读时间需要 3 分钟。

文章目录

渲染流程

应用阶段(CPU)

把数据加载到显存中

硬盘 --> 内存 --> 显存

数据:顶点的位置信息 / 法线方向 / 顶点颜色 / 纹理坐标

设置渲染状态

设置 顶点着色器 / 片元着色器 / 光源属性 / 材质

调用 Draw Call

CPU 通过调用 Draw Call 来告诉 GPU 开始渲染,一个 Draw Call 会指向本次调用需要渲染的图元列表

几何阶段(GPU)

在这里插入图片描述

顶点着色器(Vertex Shader)

实现顶点的空间变换(把顶点坐标从模型空间转换到齐次裁剪空间)、顶点着色

在这里插入图片描述

在这里插入图片描述

细节:
在这里插入图片描述

曲面细分着色器(Tessellation Shader)

细分图元

几何着色器(Geometry Shader)

逐图元着色 / 产生更多图元

裁剪(Clipping)

裁剪掉不在摄像机视野内的顶点 / 某些三角图元的面片

在这里插入图片描述

屏幕映射(Screen Mapping)

转换图元坐标到屏幕坐标系(屏幕坐标系和 z 坐标一起构成窗口坐标系)

在这里插入图片描述

光栅化阶段(GPU)

在这里插入图片描述

三角形设置

计算光栅化一个三角网格所需的信息

三角形遍历

会检查每个像素是否被一个三角网格所覆盖。如果被覆盖的话,就会生成一个片元 (fragment)

在这里插入图片描述

输出结果是一个片元序列

片元着色器

逐片元着色

在这里插入图片描述

逐片元操作

  1. 决定每个片元的可见性(深度测试、模板测试)
  2. 如果一个片元通过了所有测试,就要把这个片元的颜色值和已经存储在颜色缓冲区中的颜色进行混合

底层

在这里插入图片描述

CPU 与 GPU 并行工作——命令缓冲区

在这里插入图片描述

减少 Draw Call —— 批处理

在这里插入图片描述

固定管线渲染

固定函数的流水线 (Fixed-Function Pipeline),也简称为固定管线,通常是指在较旧的 GPU 上实现的渲染流水线。这种流水线只给开发者提供一些配置操作,但开发者没有对流水线阶段的完全控制权。

固定管线通常提供了一系列接口,这些接口包含了一个函数入口点 (Function Entry Points) 集合,这些函数入口点会匹配 GPU 上的一个特定的逻辑功能。开发者们通过这些接口来控制渲染流水线。换句话说,固定渲染管线是只可配置的管线。一个形象的比喻是,我们在使用固定管线进行渲染时,就好像在控制电路上的多个开关,我们可以选择打开或者关闭一个开关,但永远无法控制整个电路的排布。

其他文章

下一章:

专题文章:

转载地址:http://cjlq.baihongyu.com/

你可能感兴趣的文章
【java】115. 不同的子序列----学会动态规划,时间复杂度O(n^2)!!!
查看>>
【java】92. 反转链表 II---无需额外空间,时间复杂度O(n)!!!
查看>>
【java】368. 最大整除子集---使用动态规划,快速解决子问题!!!
查看>>
莫比乌斯函数
查看>>
第十一届十月份蓝桥杯省赛 H - 子串分值和:求字符串所有子串的不同字符个数和(思维/线段树)
查看>>
HDU - 6514 Monitor(二维差分+二维前缀和)
查看>>
LINUX延时函数使用
查看>>
数据结构第七章(图---总结一)
查看>>
2020-12-24
查看>>
JDBC——(5)使用Statement操作数据表的弊端
查看>>
JDBC——(6)PreparedStatement的使用
查看>>
JDBC——(6)PreparedStatement的使用——实现查询操作
查看>>
JDBC——小知识:PreparedStatement 和Statement的比较
查看>>
JDBC——(6)PreparedStatement的使用——图解查询操作流程
查看>>
JDBC——(6)PreparedStatement的使用——针对不同表的查询操作
查看>>
MyBatis——(3)MyBatis_接口式编程
查看>>
MyBatis——小知识:MyBatis_映射配置文件_参数值获取
查看>>
MyBatis——小知识:MyBatis_映射配置文件_#{}:更丰富的用法:
查看>>
Java后端技术体系-学习顺序总结
查看>>
Java多线程学习笔记
查看>>