十分钟分享:web3d-抗锯齿

为什么会出现

这里我们就不得不说一下webgl的光栅化的工作了。试想一下我们怎么去在纸上绘制一个3d物体,我们是不是只需要绘制我们人眼能看到的部位,并且因为每个物体都有自己的颜色,所以我们绘制完轮廓时还需要给物体上色。

但是手绘和在屏幕中上色有一些不同,因为屏幕之所以能够展示是因为它的无数个小像素点。

举个例子:我们能在屏幕上看到一个红色三角形,是因为在屏幕当前处于三角形区域的像素当前展示的为红色,如下图

图来自网络

仔细观察上图,我们发现像素点由一个个矩形组成,它是绘制时的最小单元。上图中其实只是理想状态,实际的光栅化过程中,在三角形边缘处的像素点(如果按照简单的包含关系着色)都会被染成红色。

那么此时体现在视觉上,就出现了锯齿感

一系列处理方案

ssaa

在渲染时,采用更高的分辨率。

举个例子:你的屏幕分辨率是1920x1080,而你采用了一种2x2的SSAA技术来渲染图像。这意味着实际渲染的分辨率将是3840x2160。在这种情况下,原本屏幕上的一个像素现在对应着4个渲染像素「"超采样像素"」(2个宽度方向上的,2个高度方向上的)。在渲染过程中,每个超采样像素都会被单独计算,包括它的颜色、亮度等信息。然后,在图像最终被输出到屏幕之前,相关的超采样像素会被合并(通常是取平均值或其他形式的过滤)到一个"普通"的屏幕像素中。这个合并过程会考虑所有相应的超采样像素,从而生成一个在视觉上更加平滑、减少锯齿的图像。

缺点:高性能消耗

msaa(webgl渲染器可自动开始)

这个技术其实是对ssaa性能方面的改进,可以说ssaa是将渲染区内的所有像素都进行了更细粒度的划分而mass仅是细分处与边缘处的像素点

缺点:需要硬件支持(不过大多数设置支持),同时还具有一定的局限性

后处理

fxaa

fxaa通过分析像素之间的亮度差来检测边缘,并对这些边缘进行平滑处理。它使用一种特殊的算法来模糊锐利边缘,从而减少锯齿。

优点:算法消耗成本低故此方法性能不错

smaa

smaa使用更复杂的模式和技术来识别图像中的边缘,包括对色差和亮度差的分析。它利用子像素级别的信息来更精确地检测和处理边缘。它通过对边缘周围的像素进行智能处理,包括重建锐利的角点和线条,从而提高了图像质量。

优点:性能也不错

还有需要:csaa、eqaa、txaa等可以自己去了解

相关推荐
cos1 分钟前
React RCE 漏洞影响自建 Umami 服务 —— 记 CVE-2025-55182
前端·安全·react.js
ConardLi8 分钟前
分析了 100 万亿 Token 后,得出的几个关于 AI 的真相
前端·人工智能·后端
阿珊和她的猫16 分钟前
UTF - 8 编码在 HTML 中的重要性
前端·html
加油乐34 分钟前
css及js实现正反面翻转
前端·javascript·css
恶猫40 分钟前
抖音直播时,飘窗提示的html窗口,主播不在,正在喝9
前端·html·直播·抖音·素材
霁月的小屋1 小时前
Vue组件通信全攻略:从基础语法到实战选型
前端·javascript·vue.js
腾讯云云开发1 小时前
【你可能不知道的开发技巧】一行代码完成小程序的CloudBase鉴权登录
前端·后端·微信小程序
Micro麦可乐1 小时前
前端真的能防录屏?EME(加密媒体扩展) DRM 反录屏原理 + 实战代码
前端·媒体·eme·drm·前端防盗录
一个很帅的帅哥1 小时前
three.js和WebGL
开发语言·javascript·webgl
一 乐1 小时前
校园社区系统|基于java+vue的校园悬赏任务平台系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot