十分钟分享:web3d-抗锯齿

为什么会出现

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

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

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

图来自网络

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

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

一系列处理方案

ssaa

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

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

缺点:高性能消耗

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

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

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

后处理

fxaa

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

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

smaa

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

优点:性能也不错

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

相关推荐
Bingo_BIG20 小时前
LOV列表的查询
前端·javascript·lov
Setsuna_F_Seiei1 天前
前端转型 Agent 开发 04 之 MCP 与 Skill(赋予 Agent 更广工作能力)
前端·agent
刘发财1 天前
前端2秒生成500页矢量PDF,rust真的强到没朋友
前端·javascript·rust
郑州光合科技余经理1 天前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
梦想平凡1 天前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
yume_sibai1 天前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
计算机魔术师1 天前
特朗普上台打给黄仁勋:AI末日论是骗局,我们绝不让它发生
前端
troy1281 天前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
计算机魔术师1 天前
CEO说要慢下来,黑客说别做梦了——同一篇论文,两种命运
前端
kyriewen1 天前
我花3天抓了一个幽灵bug,凶手藏在第4层
前端·javascript·程序员