计算机图形学入门07:光栅化中的采样与走样

1.什么是光栅化?

        在前面的章节里提过,光栅化(Rasterization)就是将物体投影在屏幕上的图形,依据像素打散,每一个像素中填充不同的颜色。

        如下图中的老虎,可以看到屏幕上有各种多边形,这些多边形经过各种变换和操作后,会形成屏幕空间的多边形。这样还不够,还需要进一步将多边形打散成像素,告诉每个像素的值应该是什么,这一步的过程就是光栅化

2.三角形网格

        在图形学中,三角形网格(Triangle Meshes)构成了物体表面结构,如下图所示为三维物体和二维物体,都是用三角形构成而来。

        那么为什么使用三角形作为基本形状单元(Fundamental Shape Primitives)呢?因为有如下优点:

        1.因为三角形是最基础的多边形:

                任何多边形都可以用三角形组成,任何多边形都可以拆成三角形。

        2.三角形独特的性质:

                三角形内部一定是个平面,在三角形内部给定三个点连成一个三角形一定是一个平面。

                三角形内外定义非常清晰,可以通过向量叉乘来判断点是否在三角形内部。

                定义良好的三角形顶点插值方法,实现颜色的平滑过渡。

3.采样

        那么如何将三角形填充到屏幕像素中呢?如下图所示:

        这里就用到了采样(Sampling)。所谓采样就是一个连续的函数f(x)在不同x值拿到这个函数的值是多少,相当于把一个函数给离散化的过程。采样在图形学说是非常重要的概念,会有各种各样的采样,这里说的采样是指利用像素的中心对屏幕空间进行一个采样。还可以采样时间、位置、法线,反射光等。

3.1三角形采样

        利用像素的中心对屏幕空间进行采样,就是判断每个像素的中心是否在三角形内部。如下图所示:

        定义一个二进制函数inside(t,x,y),这个函数的作用是给一个屏幕空间中的任意一个点Point(x,y),判断这个点是否在三角形内部,如果在三角形内返回1,否则返回0。

        那么使用这个函数对屏幕空间上所有点进行计算,如下示意代码:

        判断点是否在三角形内部则是通过向量叉乘的方法实现,在前面线性代数的章节中有解释。那么,如果一个像素点中心刚好在三角形边缘怎么处理?有规范参照规范,没有规范自己决定是否在三角形内部或外部。如下图所示:

3.2采样过程优化

        上述对一个三角形进行采样的时候,把屏幕上所有的像素都进行了遍历,如果改三角形只是占屏幕中很小的范围,那么就会造成极大的浪费。这时,就需要进行优化。

3.2.1 AABB包围盒

        如下图所示,左侧白色部分肯定不在三角形内部,右侧蓝色区域为三角形覆盖的最大区域,给定一个包围盒,指轴向包围盒,称为AABB包围盒(Axis-Aligned Bounding Box)。而在包围盒之外区域的像素点自然不需要去判断了。

3.2.2逐行检测

        当一个三角形本身覆盖不了多少像素,但是使用AABB包围盒覆盖了很多像素,比如很窄长又旋转的三角形。对于这种情况,使用AABB包围盒检测方式有些浪费,这时候可以进行逐行检测,就是从三角形左下角开始往右检测,检测完一行再检测上一行,直到检测完最上一行。如下图所示:

3.3采样分类

3.3.1位置上的采样

        对于任何一个拍出来的照片,如果放大都可以看到一个个格子,也就是在分辨率上的像素。图像信息到达感光元件时,把他们离散为屏幕上一个一个的像素,这么一个过程的采样,就是位置上的采样。如下图所示:

3.3.2时间上的采样

        采样不仅发生在不同位置,也可以发生在不同的时间。在不同时间段采样就是时间上的采样。比如视频、动画都是一帧一帧播放的,每一帧就是一张图,将每一张图片叠加在一起就是如下图所示:

4.走样

        走样(Aliasing),表示失去原来的样子。在图形学中表示在光栅化三角形的时候,得到的结果与原本变样了。常见的走样有锯齿(Jaggies)、摩尔纹(Moire)、车轮效应(Wagon wheel effect)

4.1锯齿

        上述采样过程中,得到判断后在三角形内部像素的中心点。如下图所示:

        然后给对应的像素点填充上红色的颜色,就得到下面的左侧图,而实际上的三角形应该是右侧的样子。这种情况称为锯齿。注意:这里是每个像素代表一个小方块,但是实际上的成像屏幕像素并不这么简单,只是方便理解。

        如下图所示,可以明显看到放大后三角形产生了锯齿。

4.2摩尔纹

        如上图所示,把左边图所有奇数行和奇数列像素都去掉,然后把剩下的图像拼接到一起(相当于缩小了照片),然后依旧按照原始大小进行显示,就会出现左边所示的摩尔纹。在日常生活中用手机去拍屏幕也会产生一系列的条纹。

4.3车轮效应   

        在生活中,有些高速行驶的汽车,但是我们的眼睛看他的车轮却反而像是在倒着转,这也是采样所导致的,我们称之为车轮效应。造成这个问题的原因是人眼在时间上的采样,跟不上运动的速度,时间上采样慢也就是采样频率低。

4.4产生走样的原因

        上述三种情况也被称为Sampling Artifacts,当然还有其他情况。锯齿和摩尔纹都是在空间或者位置上采样产生的问题,而车轮效应是在时间上采样产生的问题。总结就是,信号(函数)变换太快,采样速度太慢。采样速度也就是采样频率

4.2.1采样频率

        采样频率可以理解为抽取样本的间隔。应用到光栅化里面,我们可以把三角形当做无数的点组成,而我们屏幕又是由一个个的像素组成,这些像素的中心点对应到三角形中的某些点,等同于所有点中抽取出的样本。那么采样的间隔自然是我们像素的实际物理大小。因此若屏幕大小不变,分辨率变高(即像素越多,像素的中心点物理间隔越小),采样频率越高。

        那么,产生了走样如何解决?将会在下一章说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/686647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线性回归模型详解

一、引言 在机器学习中,线性回归模型是最基础也是最重要的预测模型之一,它是监督学习的一个简单但强大的工具,用于预测输出变量(Y)与一个或多个输入变量(X)之间的关系。线性回归模型以其容易理…

动态IP与静态IP的优缺点

在网络连接中,使用动态和静态 IP 地址取决于连接的性质和要求。静态 IP 地址通常更适合企业相关服务,而动态 IP 地址更适合家庭网络。让我们来看看动态 IP 与静态 IP 的优缺点。 1.静态IP的优点: 更好的 DNS 支持:静态 IP 地址在…

【因果推断python】19_局部平均效应2

目录 局部平均干预效果:后期 对参与度的影响 关键思想 局部平均干预效果:后期 局部平均处理效应明确了我们可以估计因果效应的人群。这也是查看 IV 的另一种方式,它提供了我们可以使用的其他很酷的直觉。在现代 IV 中,我们将工…

气膜乒乓球馆:新型体育设施的投资机遇—轻空间

乒乓球作为我国的国球,不仅在世界舞台上表现卓越,在国民的心目中也占有重要位置。随着科技的进步,气膜乒乓球馆作为一种新型体育设施,正逐渐走入大众视野,为乒乓球爱好者提供了一个舒适、安全、环保的运动场所。那么&a…

加强校园气膜体育馆建设的必要性—轻空间

在现代教育中,体育运动作为学生全面发展的重要组成部分,受到越来越多的重视。为了满足学生的运动需求,提供更好的运动场所,加强气膜体育馆在校园中的建设变得尤为重要。气膜体育馆作为一种新型体育设施,凭借其独特的优…

打造精细化运维新玩法(一)

一、SLO介绍——为什么需要SLO 二、SLO健康度——从0到1构建SLO 三、AIOps赋能——SLO和智能化结合 四、案例介绍——实践场景和运营探索 五、总结 精细化运维是运维演进的必由之路,是综合业务需求、研发效能、稳定性保障、成本优化、架构治理等多种因素驱动的必…

纷享销客集成平台(iPaaS)的应用与实践

案例一 企业系统集成的产品级解决方案 概况 随着国家出台一系列鼓励LED照明产业发展与创新的规划和政策,以及国际市场全球演唱会、音乐会的活跃以及线上零售、商业地产等行业回暖,LED显示行业发展形势积极向好。深圳市艾比森光电股份有限公司&#xff…

【Java】static 类方法中注意事项

static 类方法中注意事项 目录 代码示例: package suziguang_d4_staticNote;public class Student {public int score 66;public static String name "zhangsan";// 1.类方法中可以直接访问类的成员,不可以直接访问实例成员public static v…

Virustotal查询恶意进程

1、使用netstat查看可疑进程 执行ls -al /proc/$PID/exe确认可疑进程对应的文件;若文件未被删除,则直接上传文件到Virustotal进行检测,或者计算出文件对应的md5,使用md5去Virustotal进行查询;若文件已被删除&#xff0…

MacOS M系列芯片一键配置多个不同版本的JDK

第一步:下载JDK。 官网下载地址:Java Archive | Oracle 选择自己想要下载的版本,一般来说下载一个jdk8和一个jdk11就够用了。 M系列芯片选择这两个,第一个是压缩包,第二个是dmg可以安装的。 第二步:编辑…

十年数据分析经验分享

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

企业研发数据泄露损失严重,研发数据保护到底怎么才能有效落地?

数据已成为企业毋庸置疑的核心资产,而企业众多数据中,研发数据则占据着重要的角色,近年来,发生了多起企业研发数据被窃取或泄露的事件,给企业带来严重的名誉、经济损失: 小米公司:2023年1月&am…

java学习笔记(持续更新中...)

Java 中的基本数据类型主要包括以下7种: byte:字节型,占用 1 字节,范围-128 到 127。char:字符型,占用 2 字节,范围 0 到 65535。short:短整型,占用 2 字节,…

针对多智能体协作框架的元编程——METAGPT

M ETA GPT: M ETA P ROGRAMMING FOR M ULTI -A GENT COLLABORATIVE F RAMEWORK 1.概述 现有的多智能体系统主要面临以下问题: 复杂性处理不足:传统的多智能体系统主要关注简单任务,对于复杂任务的处理能力有限,缺乏深入探索和…

Dvws靶场

文章目录 一、XXE外部实体注入二、No-SQL注入三、Insecure Direct Object Reference四、Mass Assignment五、Information Disclosure六、Command Injection七、SQL注入 一、XXE外部实体注入 访问http://192.168.92.6/dvwsuserservice?wsdl,发现一个SOAP服务。在SO…

vite项目启动后用局域网不能访问

今天来解决一个问题:基于Vite构建的Vue项目在启动后只能通过localhost这种形式访问 如果把localhost换成本主机的局域网ip地址之后页面无法访问了。 就连用127.0.0.1都无法访问。尝试多次之后,最后证明只有使用localhost这种形式才可以 原因&#xff1…

解锁机器学习的无限可能:深入探究scikit-learn的强大功能

解锁机器学习的无限可能:深入探究scikit-learn的强大功能 第一部分:背景和功能介绍 在数据科学和机器学习领域,scikit-learn(简称sklearn)是一个广泛使用的Python库。它提供了简单高效的工具用于数据挖掘和数据分析&a…

德勤报告:税务合规与转型过程中的技术应用

在当前数据驱动的时代,税务管理已不再是简单的合规问题,而是涉及到企业战略和运营的各个层面。德勤最新发布的《2023年税务转型趋势调研》详细探讨了全球企业在面对日益复杂的税务环境时,如何通过技术手段实现税务合规、税务转型和税务运营的…

乙二醇水溶液物性参数

1.1 乙二醇水溶液的冰点、沸点 乙二醇水溶液作为重要的载冷剂,其物理性质对设备和系统的设计都十分重要,下面是乙二醇水溶液的冰点沸点和其浓度的关系。(数据来源 ASHRAE 手册 2005) 1.2 乙二醇水溶液粘度 乙二醇水溶液作为重要…

【debug】vscode配置c/c++环境及查看调试信息m1 mac

之前用的一直是clion 但是经过反复调整,发现始终查看不了vector里面的数值(只有指针地址),改用常用的vscode后调试成功 安装 安装vscode 以及vscode中的扩展安装 c/c,c/c extension pack,cmake,cmake tools,code runner,codeLLD…