十分钟分享:web3d-抗锯齿

为什么会出现

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

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

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

图来自网络

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

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

一系列处理方案

ssaa

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

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

缺点:高性能消耗

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

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

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

后处理

fxaa

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

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

smaa

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

优点:性能也不错

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

相关推荐
成都渲染101云渲染66662 小时前
如何在3ds Max中实现更快、更高质量的渲染
前端·javascript·人工智能
闲猫4 小时前
Spring AI 对接Deepseek ChatModel 聊天对话
java·前端·spring
自信的未来6 小时前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
全栈前端老曹6 小时前
【MongoDB】安全与权限管理 —— 用户认证、角色权限、SSL 加密
前端·javascript·数据库·安全·mongodb·nosql·ssl
zhangxingchao7 小时前
AI大模型核心八:从 Agent Skill、长文档 RAG 到知识库更新与训练策略
前端·人工智能·后端
zhangxingchao8 小时前
AI大模型核心七:从 Workflow、RAG、记忆治理到幂等性
前端·人工智能·后端
gyx_这个杀手不太冷静8 小时前
Agent开发进阶指南(第 1 章):AI Agent 到底是什么?
前端·agent·ai编程
小小小小宇9 小时前
模型相关知识
前端
小小小小宇9 小时前
模型相关知识二
前端
IT_陈寒9 小时前
Python装饰器竟然偷偷改了函数名?这个坑我爬了三天
前端·人工智能·后端