GAMES101(5~6节,光栅化)

2024-09-07 01:44
文章标签 games101 光栅

本文主要是介绍GAMES101(5~6节,光栅化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

光栅化Rasterization

透视投影已知field和近平面,如何推导宽度?

根据三角函数:tan field / 2 = (height / 2) / ||n||近平面,从而可以求出高度

因为知道宽高比,所以可以求出宽度,高度 * 宽/高

视口变换

经过MVP变换,顶点位于正则化空间坐标,是一个在 [-1,1] ^3 之间的 x, y, z 坐标构成(标准立方体),我们下一步需要做的就是视口变换,将坐标映射到我们的屏幕中

假设定义:

屏幕是一个2维数组,每个元素对应一个像素,指定分辨率决定像素的多少,每个像素有各自的颜色

屏幕坐标系,左下为00,  像素坐标为00到width - 1, height - 1,每个像素坐标+1,像素中心+0.5,

//

视口变换矩阵:

不考虑z,如何将-1---1的宽高拉伸到0---width,或0---height?

比如宽度将坐标缩放* width / 2,那么分别为 - width /2,和 width /2,再平移正数width / 2左下角在原点,高度也一样

采样:

现在变换到了屏幕空间,如何将多边形(比如最简单的三角形)拆分为不同的像素?

也就是说多边形网格由三角形组成,网格已经被映射到屏幕上,我们就可以知道每个顶点的屏幕坐标,但是对于内部区域,并为全部遮挡像素,如何确定这是否被绘制颜色呢?

每个像素中心即为采样点,判断采样点是否在三角形内

对每个坐标循环,如果当前坐标+0.5(即中心)在三角形内,为1,否则为0、

微积分简述:

导数:函数在某一点的瞬时变化率,或者说函数的斜率。导数回答了“函数在某一点上变化的有多快”这个问题。

积分:是导数的逆运算,用来描述累积量。积分回答了“给定一个变化率,累积多少”这个问题。积分可以用于计算面积、体积、总量等。

极限:描述函数在某一点的趋近行为。

信号处理学简述:

与采样关系:

傅里叶级数展开:将一个周期函数展开为一组简单的正弦和余弦函数(或复指数函数)之和的表示方式。

傅里叶变换是傅里叶级数的推广,它将时域转换到频率域(函数),帮助我们分析频谱成分。

去除低频信号后

傅里叶逆变换:将频率域的表示还原为时域的表示

计算方式:通过设置采样点,计算每个采样到的值,再相连。

同时当频率很高时,采样数量不足,将发生走样,比如原本转为频率域应为蓝色线的表示,可是现在因为采样点不足将

对应

为黑色线,产生走样

//

模糊处理:

滤波:把特定频率的部分删掉,也相当于平均(比如从半球采样再求均值)或卷积(比如预滤波环境贴图,就是预先计算的卷积后的环境贴图)

比如可以将低频信号删掉,得到的就是这个图片人物轮廓,那么为什么高频对应人物轮廓呢?

因为边界位置发生了剧烈的变化,所以信号是高频的

可以看到时域和频域对应关系,时域的卷积 相当于 频率的乘积

抗锯齿 | 反走样

增加采样率(提高采样个数)

或者blurred aliasing 算法    先模糊(做卷积)再采样(映射到屏幕像素)、但是反之先采样再模糊不行

//

如何模糊处理?

MSAA:近似处理走样问题,在每个像素增加采样点

SSAA VS MSAA

本质区别在于计算颜色的次数,SSAA首先会将低分辨率转换,对高分辨率每个像素计算颜色,然后在几个像素一组求平均颜色,重新转回低分辨率

而MSAA不用计算每个高分辨率的像素,而是用采样点近似处理,通过对采样点遮挡个数直接计算颜色值

但同时MSAA并不如SSAA精准,但性能更好,

其余的还有FXAA在屏幕层面处理,TAA……

这篇关于GAMES101(5~6节,光栅化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Games101学习 - 线性代数综述

1. 叉积矩阵形式 叉乘矩阵形式通常在物理模拟中有运用,处理四元数旋转也类似这样的形式。 // 定义两个向量 A 和 BFVector A(1.0f, 2.0f, 3.0f);FVector B(4.0f, 5.0f, 6.0f);// 计算叉积FVector CrossProduct = FVector::CrossProduct(A, B);if (GEngine){GEngine

GAMES101图形学笔记1

一、图形学的应用 1.游戏渲染、光照 2.电影特效 3.面部、动作捕捉,如Avatar(阿凡达)中的面部捕捉 4.设计 建筑设计,汽车设计 5.虚拟现实VR 增强现实AR 6.数码插画 笔刷 PS软件等 7.模拟、仿真 8.GUI 界面设计等 9.字体设计typography 二、为什么学习图形学 1.图形学是一门Awesome的学科,能够创造很多有意思的东西,有意思的图像 2.了解并学习一

心怀希望の光栅化

还记得什么是光栅化咩? 将三维空间的几何形体显现在屏幕上,这就是光栅化(游戏、实时图形学的应用) Perspective Projection 在正交投影里如何定义三维空间中的立方体呢? 用x轴的覆盖(左、右),y轴的覆盖(上、下),z轴的覆盖(远、近) 远近用正交投影和透视投影都是一样的,在做透视投影的时候,是需要把视锥变成长方体 那我们如何定义这样一个视锥呢? 从摄像机出

CST电磁仿真软件表面等离子极化激元SPP --- 一维光栅耦合 - 衍射模式, 效率, Floquet端口

这两期我们看一下衍射光栅的高阶衍射、衍射效率、反射率。具体到仿真设置,就是Floquet端口的模式分析,S参数与衍射效率和反射率的关系。那么研究这些衍射和表面等离子极化激元SPP有什么关系呢?关系可大了,光栅是一种能够用来激励出SPP模式的结构,所以我们要了解其衍射特性,才能激励出表面波SPP。 使用等离子激元单元模板,开启计算透射率反射率吸收率: 添加银材料,画个因材料的基底,这里d是光

光栅幅值细分原理与实现

本文介绍光栅幅值细分原理与实现。 光栅是工业测量领域中常见的传感器,如下图。主要厂家有雷尼绍,海德汉,配套的光栅读数头有模拟信号的,也有直接细分输出数字脉冲的,本文的细分针对模拟信号,即有正弦信号,余弦信号,Index信号输出的光栅读数头。光栅细分方法有很多(如锁相倍频细分法,幅值细分法等),本文介绍常用的幅值细分法。 1.细分原理 由于常见的光栅栅距为20um,40um,对应一个正弦或

Games101-动画与模拟(求解常微分方程,刚体与流体)

Single Particle Simulation 规定了任何一个物体任何时刻的速度,知道它的初始位置,求它某个时间后的位置? 如果一个物体是匀速直线运动,用初始位置加上速度和时间的乘积即可 如上图,如果想描述一个粒子在一个速度场(理想的情况:只要知道位置,就知道它这个时刻的速度)中如何运动 任何一个粒子在上面的速度场会沿着类似水流的方向往前走 任何一个位置x和任何时间t,都知道有一个速度

图形学基础笔记II:多边形光栅化算法和显卡三角形光栅算法

为什么三角形就够了 实际对于 3D 来说肯定全是基于三角形的 geometry - OpenGL: Is it more efficient to use GL_QUADS or GL_TRIANGLES? - Stack Overflow,显卡也全部用重心坐标和 AABB 来填充三角形的。 三角形线框模式和非三角形线框模式(GUI、CAD),也很容易实现,使用 bresenham 中点算法

图形学基础笔记I:直线和圆的光栅算法、中点线算法、中点圆算法

实际现代显卡支持的图元就只有点、线、三角形。这是基于这样的事实: 实际对于 3D 来说肯定全是基于三角形的 geometry - OpenGL: Is it more efficient to use GL_QUADS or GL_TRIANGLES? - Stack Overflow,显卡也全部用重心坐标和 AABB 来填充三角形的。 三角形线框模式和非三角形线框模式(GUI、CAD),也

现代计算机图形学笔记(三)——三角形光栅化

三角形光栅化 经过上节课的MVP(Model, View, Projection transformation)变换之后,所有的物体都会在 [ − 1 , 1 ] 3 [-1,1]^3 [−1,1]3的立方体中,本节就来讨论如何将这个 [ − 1 , 1 ] 3 [-1,1]^3 [−1,1]3的立方体画在屏幕上(光栅化)。下面我们给出一些定义: 什么是屏幕? 像素的数组数组的大小:分辨率一

Games101-相机与透镜

成像:光栅化成像(上图)和光线追踪成像(下图) 都是用合成的方法来成像。还可以用捕捉的方法来成像 利用小孔成像原理制作的相机就是针孔相机 如果一个相机没有针孔/透镜,是无法拍照的。 因为任何一个点都有可能收集到来自不同方向上的光。这个点本身作为传感器是不区分来自各个方向上的radiance。则各个方向上能量都被收集到一起,该点收集到的是irradiance,而不是radiance。最终所有东