GAMES101学习笔记——光栅化

news2024/11/17 17:32:52

一:什么是光栅化(Rasterization)

把空间里的物体画在屏幕上。

屏幕由一个个阵列排布的像素点组成,屏幕大小指宽度方向由width个像素点,高度方向由height个像素点。
像素点索引范围:(0, 0) 到 (width - 1, height - 1)
像素点(x, y)的中心坐标为(x + 0.5, y + 0.5), 每个像素点是有面积的。

Canonical Cube:由MVP矩阵变换后所得,xyz在[-1, 1]之间的正方体。
在这里插入图片描述
模型是由三角形组成的,因为三角形是最基本的几何平面,能保证是平面,且容易进行插值操作(重心坐标)。
光栅化的过程就是将三角形离散显示在屏幕的每个像素点。
在这里插入图片描述

二:光栅化最重要的点:判断中心点与三角形的关系

判断三角形abc 和 点p 的关系
方法如下:

1. 重心坐标法

在这里插入图片描述
点p在三角形abc内,满足以下等式:
S a b p + s b c p + s c a p ≤ s a b c S_{abp} + s_{bcp} + s_{cap} \leq s_{abc} Sabp+sbcp+scapsabc
点p在三角形abc外,满足以下等式:
S a b p + s b c p + s c a p > s a b c S_{abp} + s_{bcp} + s_{cap} > s_{abc} Sabp+sbcp+scap>sabc

2. 同侧法

在这里插入图片描述
如果p在ab的左侧,p在bc的左侧,p在ca的左侧,则p在三角形内,否则不在三角形内。
即红绿蓝三组向量分别叉乘,同号为同一侧。

三: 什么是采样

采样就是把一个函数给离散化的过程
在这里插入图片描述
循环屏幕上每个像素格子,判断中心是否是否在三角形内部,是的为1,否为0。
在这里插入图片描述

优化手段:

  1. 使用AABB包围盒,获取三角形xy的最小/最大的坐标形成AABB包围盒,在包围盒外的像素绝对不会在三角形内,以此剔除屏幕上大部分像素。
    在这里插入图片描述

  2. 获取每一行像素在三角形内的起始点和终止点,则中间的像素均在三角形内,适合斜 4 5 。 45^。 45狭长的三角形。
    在这里插入图片描述

四: 光栅化后的问题

采样产生的一些问题:

  1. 锯齿
  2. 摩尔纹
  3. 人眼在时间上的采样跟不上速度
    本质:信号的速度太快,采样速度跟不上变化的速度

因此需要抗锯齿,反走样
在这里插入图片描述

抗锯齿其实并没有让像素面积更细,而是让像素颜色不是非0即1,取中间的某一个值,从而在宏观上看不会锯齿明显。
抗锯齿后,边界看上去会模糊。

什么叫走样

同样的采样方法采样两种不同频率的函数,得出的结果我们无法区分它。
即采样不足导致锯齿。
在这里插入图片描述

数字图像处理:滤波 Filtering

傅里叶级数展开: 任何一个周期函数,可以写成一系列正弦、余弦的组合以及一个常数项。
傅里叶变换: 所谓傅里叶变换就是将函数分解成各个不同频率的函数的组合。
傅里叶变换可以理解为将信号从时域变换成频域。

滤波:
从频率的角度上来说,去掉一些特定的频率
通过频域上的分析,不同的频率和信号的变化
在这里插入图片描述
去掉中中间的低频信息 高通滤波
高频率 边界
在这里插入图片描述

低通滤波,去掉高频信息,变模糊
在这里插入图片描述
低频高频都去掉了 留下了其他信息
在这里插入图片描述

简单的定义:Filtering(滤波) = Convolution(卷积) = Averaging(平均)

什么是卷积?

在这里插入图片描述
卷积定理:时域的卷积等于频域的乘积

采样与走样在频域上的解释

Sampling = Repeating Frequency Contents
采样 = 重复频域上的内容

走样:采样不够快,导致频谱上复制粘贴间隔变小,发生混叠
在这里插入图片描述

五: 反走样/抗锯齿

增加采样率(受制于物理限制,不可能将屏幕分辨率弄高)

1,做模糊操作,先模糊再采样

在这里插入图片描述
即先把一个信号 高频信息拿掉,让频谱覆盖的面小一些,再采样,以原本的间隔复制它,
在这里插入图片描述

2. MSAA

在一个像素格子里增加多个采样点,得到近似的像素格子覆盖率。
增大了计算量来达到抗锯齿的效果。
如下图:每个像素采样四个点,最后按采样点在三角形内的个数比例决定颜色比例。
在这里插入图片描述

3. FXAA (Fast Approximate AA)

找到有锯齿的边界,把边界换成没有锯齿的边界(和采样无关,在图像层面上抗锯齿)
通过颜色变化找到边界后,进行颜色混合,起到抗锯齿的作用
在这里插入图片描述

4. TAA(Temporal AA)

在不同的帧时间上,用像素中的不同的点来采样像素颜色。即将MSAA的采样分解在时间上。

5. 超分辨率/超采样/ DLSS (Deep Learning Super Sampling)

通过降低游戏内的渲染分辨率,同时再通过人工智能算法模型和AI加速硬件单元(Tensor Core)来拉伸输出画面,提高显示分辨率,例如使用1080P的渲染分辨率再通过AI算法和Tensor Core运算输出4K(2160P)的显示分辨率,以此来达成提升帧数的目的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java开发】JUC进阶 03:读写锁、阻塞队列、同步队列

1 读写锁(ReadWriteLock)📌 要点实现类:ReentrantReadWirteLock通过读写锁实现更细粒度的控制,当然通过Synchronized和Lock锁也能达到目的,不过他们会在写入和读取操作都给加锁,影响性能&#x…

黑马程序员SSM框架教程之学习笔记1

P44-SpringMVC入门案例 1.在pom.xml中导入坐标springMVC与servlet 2.创建一个SpringMVC控制器类 3.创建springMVC配置文件springMvcCponfig 4.定义一个servlet容器启动配置类,在里面加载spring的配置 5.在pom.xml文件中配置tomcat插件 运行结果显示 P45-springMVC入…

2023-03-05:ffmpeg推送本地视频至lal流媒体服务器(以RTMP为例),请用go语言编写。

2023-03-05:ffmpeg推送本地视频至lal流媒体服务器(以RTMP为例),请用go语言编写。 答案2023-03-05: 使用 github.com/moonfdd/ffmpeg-go 库。 先启动lal流媒体服务器软件,然后再执行命令: go…

linux通过nginx映射指定目录文件给外部访问

修改配置文件 #user www-data; #将user www-data;注掉改为root user root; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on; }http {### Basic Settings##sendfile on;tcp_nopush …

【C语言学习笔记】:三子棋具体步骤和代码

一、问题描述 用c语言实现三子棋。 二、基本流程 在写三子棋的代码之前,我们来看看实现这个游戏的逻辑: 1.菜单界面选择开始或者退出游戏。2.创建棋盘并初始化。3.打印棋盘。4.玩家落子(玩家输入行列坐标的方式来落子),x’表示玩家落子。5…

既然有MySQL了,为什么还要有Redis?

目录专栏导读一、同样是缓存,用map不行吗?二、Redis为什么是单线程的?三、Redis真的是单线程的吗?四、Redis优缺点1、优点2、缺点五、Redis常见业务场景六、Redis常见数据类型1、String2、List3、Hash4、Set5、Zset6、BitMap7、Bi…

ESP32学习笔记01-环境搭建

本文参考博客https://blog.csdn.net/weixin_43599390/article/details/123944479 1.下载离线版本的 ESP IDF esp idf 下载地址 2.安装 esp idf 2.1应用修复,后,再下一步 2.2 2.3 2.4 2.5

跨屏设计规范

跨屏设计规范 以windows10x 为例,其在具体交互上,到底有哪些常见的交互模式和硬件要如何结合 6.1跨平台的双屏交互设计逻辑 这种那个品的设计范式,其实是跨平台的通用规则, 在很大程度上,这套交互逻辑是不受操作系统…

【CSS】CSS 复合选择器 ③ ( 并集选择器 | 并集选择器与后代选择器示例 )

文章目录一、并集选择器1、语法说明2、代码示例二、并集选择器与后代选择器示例1、添加注释2、HTML 结构3、后代选择器 14、后代选择器 25、并集选择器6、完整代码示例7、显示效果一、并集选择器 1、语法说明 并集选择器 可以选择 若干 基础选择器 选择出的 并集元素集合 ; 并集…

【亲测】Centos7系统非管理(root)权限编译NCNN

前言 由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。 什么是NCNN ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型&#x…

文件异步多备常用方案

业务需求上经常存在需要对同一个文件进行双上传,上传到不同云存储桶,以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况,当然,还有其他措施可以避免,现在只针对通过程序业务代码而双写存储的这个场景。 业务…

Java分布式解决方案(三)

文章目录🔥MySQL事务-MySQL中锁的分类🔥MySQL事务-MySQL中的死锁问题🔥MySQL事务-MySQL中锁的分类 MySQL中锁的分类 从本质上讲,锁是一种协调多个进程或多个线程对某一资源的访问的机制,MySQL使用锁和MVCC机制实现了…

了解基本的html和javascript

用记事本编辑一个文本文件&#xff0c;代码如下&#xff0c; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>my name is bo</title> <script>alert(hello); </script> </head> <body>&…

实验2 设计模式实验1

实验内容: 1. 使用简单工厂模式设计一个可以创建不同几何形状(Shape)&#xff0c;例如圆形 (Circle)、矩形(Rectangle)和三角形(Triangle)等的绘图工具类&#xff0c;每个几何图形均具 有绘制方法draw()和擦除方法erase()&#xff0c;要求在绘制不支持的几何图形时&#xff…

Android 基础知识4-3.6 ToggleButton(开关按钮)Switch(开关)详解

一、ToggleButton(开关按钮) 1.1、简介 ToggleButton 类似开关有开和关两种状态&#xff0c;不同的状态下可以有不同的文本。 public class ToggleButton extends CompoundButton Displays checked/unchecked states as a button with a "light" indicator …

CNN基础

Tip&#xff1a;仅供自己学习记录&#xff0c;酌情参考 1. 前馈与反馈神经网络 神经网络有前馈神经网络和反馈神经网络&#xff0c;前向神经网络也就是前馈神经网络。 前馈型神经网络各神经元接收前一层的输入&#xff0c;并输出给下一层&#xff0c;没有反馈。节点分为两类…

nacos-sdk-rust binding to NodeJs

广告时间 nacos-sdk-rust-binding-node : nacos-sdk-rust binding to NodeJs with napi. Tip: nacos-sdk-nodejs 仓库暂未提供 2.x gRPC 交互模式&#xff0c;为了能升级它&#xff0c;故而通过 node addon 方式调用 nacos-sdk-rust npm 包 -> https://www.npmjs.com/packa…

Spring系列-8 AOP使用与原理

背景 按照软件重构的思想&#xff0c;当多个类中存在相同的代码时&#xff0c;需要提取公共部分来消除代码坏味道。Java的继承机制允许用户在纵向上通过提取公共方法或者公共部分(模版方法方式)至父类中以消除代码重复问题&#xff1b;日志、访问控制、性能监测等重复的非业务…

GO的IO接口和工具

GO的IO接口和工具 文章目录GO的IO接口和工具一、io包中接口的好处和优势1.1拷贝数据的函数二、 在io包中&#xff0c;io.Reader 的扩展接口和实现类型都有哪些2.1 io.Reader的扩展接口2.2 io.Reader接口的实现类型2.3 示例三、io包的接口&#xff0c;以及它们之间的关系3.1 读操…

Raki的读paper小记:Forget-free Continual Learning with Winning Subnetworks

Abstract&Introduction&Related Work 研究任务 用子网络做CL已有方法和相关工作 彩票假说&#xff08;LTH&#xff09;证明了稀疏子网络&#xff08;称为中奖彩票&#xff09;的存在&#xff0c;这些子网络保持了密集网络的性能&#xff0c;然而使用迭代修剪方法在持续…