real time rendering 学习笔记(一)

2024-03-12 09:48

本文主要是介绍real time rendering 学习笔记(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Real time rendering 学习笔记(一)

第二章 图形渲染管线

图形渲染管线的作用是在给定视角、三维物体、光源、着色方程、纹理等条件时,产生或者渲染出一幅二维图像。

实时渲染可以被粗略地分为三个连续的阶段,分别是application阶段、geometry阶段和rasterizer阶段。

管线系统中的最慢的一个阶段决定了渲染的速度。

application阶段通常在运行在CPU的软件上实施,geometry阶段通常在GPU上实施,而rasterizer阶段也在GPU中实施。

Application阶段

这个阶段的最重要的任务是为geometry阶段提供要被渲染的基元,例如点、线和三角形。

冲突检测常常在此阶段进行。来自键盘和鼠标的输入也需要在此阶段进行处理,另外,一些运算过程如纹理映射也在此阶段进行。

Geometry阶段

此阶段是进行顶点和多边形操作的关键阶段。它可以被更加详细的分为五个function部分:
1.model&view transform

2.vertex shading

3.projection

4.clipping

5.screen mapping

model&view transform

在被呈现在屏幕上之前,物体的模型需要经历几次变形。首先,每个模型都有自己的局部坐标系。为了对场景(scene)进行处理,需要先将这个场景中的所有模型都用同一个坐标系进行表示,这一坐标系就叫做世界坐标系。
为了减少渲染量,只有处于摄像机视角范围内的物体模型才需要被送往下一管线。为了便于进行投影和剔除,需要对摄像机和场景内的所有物体进行从世界坐标到相机坐标的变幻。

vertex shading

为了使场景更加真实,除了形状和位置以外,物体的外观比如颜色和材质也需要进行渲染。
决定光照在某种材料上的效果的过程被称为着色。这些计算有可能发生在geometry阶段,也有可能发生在rasterization阶段。
着色过程通常被认为发生在世界坐标系中,然而在实际中,将它在其他坐标系中进行计算可能更加方便。因为只要在着色过程中涉及到的物体都被变换到同一坐标系中,它们位置的相对关系就会得到保留。

projection

投影分为平行投影和透视投影两种。
透视投影的原理和人眼观察世界的方法类似。远处的物体看起来较小,而近处的物体看起来则较大。

clipping

只有完全处于或者部分处于视锥内的基元才需要被送入rasterizer阶段进行绘制。前一种基元将原封不动的被送入下一阶段,完全处于视锥之外的基元由于不需要渲染,所以不需要被送入下一阶段,而部分处于视锥内的基元则需要进行剔除处理。例如,一条线的一个顶点位于视锥体内部,而它的另一个顶点位于视锥体外部,那么在进行剔除的时候,位于视锥体外部的那个顶点就被线段和视锥体边界的那个交点所取代。

剔除阶段通常是由固定操作的硬件所处理的,因此程序员无法直接进行控制。

screen mapping

只有视锥中经过剔除的基元才会被传递到这个阶段,此时坐标系仍然是三维的。基元的x和y坐标被转化形成了屏幕坐标系。它和z坐标合起来被称为窗口坐标系。

Rasterizer stage

本阶段的目的是计算和设置像素点的颜色。此过程就是实现从带有z值的屏幕上的二维顶点和每个顶点的着色信息到屏幕上像素的转化。

这个阶段可以分为以下几个子步骤:
1. triangle setup
2. triangle traversal
3. pixel shading
4. merging

triangle setup

在此阶段,三角形表面的微分和其他数据被计算出来,这些计算结果被用来进行扫描转化和对几何阶段产生的着色数据进行插值。专门的硬件会负责处理此过程。

triangle traversal

此阶段需要检测每个像素的中心是否被三角形所覆盖,如果覆盖的话,每一个三角形和像素点重叠的部分都要产生一个碎片。triangle traversal或者scan conversion都是指寻找到在三角形内部的采样点和像素的过程。每个三角形碎片的属性都是通过对三角形的三个顶点的数据插值产生的,这些属性包括了碎片的深度和着色数据。

pixel shading

所有的像素着色的计算都在这里,通过使用输入的已插值的着色数据而进行。结果是一种或者更多的颜色被送往下一个阶段进行处理。前两个阶段都需要专门的硬件进行处理,而此阶段可以通过可编程的GPU实现。在这个过程中所可能使用到的技术中,texturing可能是最重要的一种.

merging

每个像素的信息都被存储在color buffer中。此阶段的主要功能就是将着色阶段产生的碎片颜色和在缓存区中存储的颜色进行混合。

另外一个职责,则是解决可见性的问题。也就是说,当整个场景都已经渲染完成的时候,颜色缓冲中应该包含着从摄像机视角能看到的场景中的基元的颜色信息。对于大部分硬件来说,这都是通过z-buffer算法完成的。z-buffer和color buffer的大小与形状相同,对于每个像素,z-buffer存储着从摄像机到最靠近的基元的z值。这意味着,当一个基元被渲染到某个像素上时,在那个像素点处的基元的z值会和z-buffer中存储的同一个基元的z值相比较。如果新的z值小于z-buffer中的z值,那么正在被渲染的那个基元就比原来最靠近摄像机的基元还要靠近摄像机,因此,z值和那个像素的颜色信息就被更新为正在被渲染的那个基元的相应值。如果z值大于z-buffer中的z值,那么color buffer和z-buffer都保持不变。

除了存储颜色信息的color buffer和存储z值的z-buffer之外,还有其他用来存储和捕捉碎片信息的通道或者缓冲。

∝缓冲通常和颜色缓冲有关,用来存储每个像素的不透明度值。当有一个新碎片时,在深度测试之前,可以进行一个可选的∝测试。这个测试就是将碎片的∝值与某些参考值进行比较。如果测试不通过的话,那么这些碎片就被移除。

stencil buffer是用来记录已渲染的基元位置的缓冲区,每个像素使用8bit来记录信息。

这篇关于real time rendering 学习笔记(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800876

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件