当前位置:网站首页>【TA-霜狼_may-《百人计划》】1.1 渲染流水线
【TA-霜狼_may-《百人计划》】1.1 渲染流水线
2022-07-01 03:24:00 【zczplus】
【TA_霜狼_may《百人计划》】1.1 渲染流水线
【TA_霜狼_may《百人计划》】1.1 渲染流水线
如题,这是霜狼_may《百人计划》的学习记录,明确了方向,就开始努力学习吧。
1.1.1 应用阶段
准备基本场景数据
基本数据包括:
- 场景物体数据
- 物体变换数据:位置、旋转、缩放
- 物体网格数据:顶点位置、uv贴图
- 摄像机数据
- 位置、方向、远近裁剪平面
- 正交/透视(FOV)
- 视口比例/尺寸等
- 光源阴影数据(这一部分内容较多,阴影相关知识不大理解)
- 光源类型:方向光、点光、聚光
- 光源的其他参数:位置、方向、角度等
- 以及其他全局数据
加速算法
粗粒度剔除
场景之外的可以剔除,被前方物体遮挡的也可以剔除。
基本操作包括:
- 碰撞检测
- 加速算法
- 遮挡剔除
- 其他算法
可见场景物体裁剪的算法有:
- 八叉树
- BSP树
- K-D树
- BVH
设置渲染状态
准备渲染参数
基本操作包括:
- 绘制设置 (不同物体可能由不同的shader(着色器)去渲染)
- 绘制顺序(例如:由近及远渲染还是由远及近渲染,不透明与半透明的渲染先后顺序确定)
- 渲染目标 (渲染结果的目的地设置( RenderTexture or FrameBuffer))
- 渲染模式 (成像渲染 or 延迟渲染)
调用DrawCall
输出渲染图元到显存
所要用到的数据包括:
- 顶点数据
- 其他数据
1.1.2 几何阶段
顶点着色
整体流程如图:
模型变换,视图变换,投影变换组成了MVP(Model、View、Projection)矩阵。
曲面细分
整体流程如图:
几何着色(基于图元的操作)
整体流程如图:
投影
不同的投影有不同的特性,利用透视除法进行处理,分成正交投影和透视投影。
透视投影中,对象的w值随着距离摄像机的距离变远而变大,各个坐标点(xyz)通过除以w的方式得到透视的结果坐标,从而达到透视成像的目的。
正交投影的w值始终为1,可能更类似于2D成像。
这一步就是NDC了。

裁剪
将视野范围外的目标和顶点去除。
裁剪示意图如下:
补充:设备坐标系在openGL和D3D中是不一样的:
- opnGL中,xyz三个维度都是-1 ~ 1
- D3D中,xy为-1 ~ 1,z为0 ~ 1
屏幕映射
将标准坐标系中的位置映射到屏幕坐标系中。
同样需要注意的是,屏幕坐标系的原点位置在openGL和D3D中也是有不同的:
- openGL屏幕原点在左下
- D3D屏幕原点在左上方
1.1.3 光栅化阶段
三角形设置
在知道三角形或者直线的顶点信息之后,要想知道该图元覆盖了哪些像素,就要获取其边界信息。计算边界信息的过程就叫做三角形设置。三角形信息包含了直线信息,之后的内容只讨论三角形的情况。
三角形遍历
通过三角形的边缘信息,利用插值算法,对三角形内部的所有片元进行赋值。
注意,上图中的方框代表的是片元而不是像素,因为在屏幕的同一个像素位置,有可能对应于多个三角形的不同片元。
抗锯齿
多种方法:
- SSAA(将渲染分辨率放大n倍,再重新对buffer进行下采样)
- MSAA
- 只有该方法在光栅化阶段操作
- 对每个像素设置多个子采样点
- 再对每个子采样点进行覆盖测试和遮挡测试
- 覆盖测试即判断该子采样点是否在三角形内
- 遮挡测试则是对该子采样点与深度缓存中的数据比较,看是否能够通过
- 通过上述测试的子采样点属于该三角形
- 在后续的三角形着色环节,通过是否属于三角形的子采样点进行比例着色(这句话有待进一步理解)

1.1.4 逐片元操作
片元着色

颜色混合
包括多种测试环节:
- 透明度测试

- 深度测试、模板测试

这里的模板测试还不是很理解用途和意义,可以做进一步了解。
混合
结合各种信息(包括颜色、Alpha、深度等),对最终的颜色进行混合处理。混合的方法也有多种:叠加…
整体流程总结

边栏推荐
- 389. 找不同
- 10. regular expression matching
- The method to measure the similarity of two vectors: cosine similarity, pytorch calculate cosine similarity: torch nn. CosineSimilarity(dim=1, eps=1e-08)
- 【TA-霜狼_may-《百人计划》】2.4 传统经验光照模型
- 小程序容器技术与物联网IoT的结合点
- 5、【WebGIS实战】软件操作篇——服务发布及权限管理
- Implement pow (x, n) function
- 72. 编辑距离
- 数据库中COMMENT关键字的使用
- pytorch训练深度学习网络设置cuda指定的GPU可见
猜你喜欢

深度学习中的随机种子torch.manual_seed(number)、torch.cuda.manual_seed(number)

Download and installation configuration of cygwin

LeetCode 144二叉树的前序遍历、LeetCode 114二叉树展开为链表

【TA-霜狼_may-《百人计划》】1.3纹理的秘密

Pyramid Scene Parsing Network【PSPNet】论文阅读

复习专栏之---消息队列
![[TA frost wolf \u may- hundred people plan] 1.3 secret of texture](/img/dc/ce2819258632cdcf2e130a4c05600e.png)
[TA frost wolf \u may- hundred people plan] 1.3 secret of texture

Research on target recognition and tracking based on 3D laser point cloud

TEC: Knowledge Graph Embedding with Triple Context

How keil displays Chinese annotations (simple with pictures)
随机推荐
Thread data sharing and security -threadlocal
[party benefits] jsonobject to string, leave blank
快速筛选打卡时间日期等数据:EXCEL筛选查找某一时间点是否在某一时间段内
How keil displays Chinese annotations (simple with pictures)
30. Concatenate substrings of all words
ECMAScript 6.0
IPv4和IPv6、局域网和广域网、网关、公网IP和私有IP、IP地址、子网掩码、网段、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?
jeecgboot输出日志,@Slf4j的使用方法
10、Scanner. Next() cannot read spaces /indexof -1
205. 同构字符串
在线公网安备案保姆级教程【伸手党福利】
小程序容器技术与物联网IoT的结合点
在 C 中声明函数之前调用函数会发生什么?
pytorch nn. AdaptiveAvgPool2d(1)
165. compare version numbers
【EI会议】2022年第三届纳米材料与纳米技术国际会议(NanoMT 2022)
Golang multi graph generation gif
【TA-霜狼_may-《百人計劃》】2.3 常用函數介紹
Edlines: a real time line segment detector with a false detection control
208. 实现 Trie (前缀树)