当前位置:网站首页>【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、深度等),对最终的颜色进行混合处理。混合的方法也有多种:叠加…
整体流程总结
边栏推荐
- LeetCode 128最长连续序列(哈希set)
- 205. isomorphic string
- 谷粒学院微信扫码登录过程记录以及bug解决
- Complete knapsack problem
- Addition without addition, subtraction, multiplication and division
- FCN全卷積網絡理解及代碼實現(來自pytorch官方實現)
- 复习专栏之---消息队列
- The method to measure the similarity of two vectors: cosine similarity, pytorch calculate cosine similarity: torch nn. CosineSimilarity(dim=1, eps=1e-08)
- Sort linked list (merge sort)
- The difference between MFC for static libraries and MFC for shared libraries
猜你喜欢
访问阿里云存储的图片URL实现在网页直接预览略缩图而不直接下载
【TA-霜狼_may-《百人計劃》】2.3 常用函數介紹
后台系统右边内容如何出现滚动条和解决双滚动条的问题
Complete knapsack problem
复习专栏之---消息队列
Take you through a circuit board, from design to production (dry goods)
Leetcode 128 longest continuous sequence (hash set)
5. [WebGIS practice] software operation - service release and permission management
Listener listener
idea插件备份表
随机推荐
Feature pyramid networks for object detection
How to display scrollbars on the right side of the background system and how to solve the problem of double scrollbars
187. 重复的DNA序列
SEM of C language_ Tvariable type
ECMAScript 6.0
[daily training] 1175 Prime permutation
8. 字符串转换整数 (atoi)
Leetcode 128 longest continuous sequence (hash set)
【TA-霜狼_may-《百人计划》】2.1 色彩空间
Bilinear upsampling and f.upsample in pytorch_ bilinear
171. excel table column No
168. excel table column name
Leetcode 31 next spread, leetcode 64 minimum path sum, leetcode 62 different paths, leetcode 78 subset, leetcode 33 search rotation sort array (modify dichotomy)
二叉树神级遍历:Morris遍历
AfxMessageBox和MessageBox的用法
Random seed torch in deep learning manual_ seed(number)、torch. cuda. manual_ seed(number)
Split(), split(), slice(), can't you tell?
数据库DDL(Data Definition Language,数据定义语言)知识点
72. 编辑距离
[小样本分割]论文解读Prior Guided Feature Enrichment Network for Few-Shot Segmentation