adjacent shapes抗锯齿情况下的alpha blending问题

问题描述:

Unfortunately I stumbled across the issue with adjacent shapes.
On a transparent background (in the plain color space) I draw mutiple 
polygons, some are connected others are not and each polygon has a 
different color. The polygons do never overlap. If two polygons are 
connected, instead of a smooth transition from the color of one polygon 
to the color of the other I get a contour. I know this is a well known 
issue and in my case it comes from a slightly drop of the alpha-channel 
on the transition from one polygon to the other.
I wanted to know if there are any good work arounds? In one example 
conv_contour was used but this is not possible for me I think. In an 
other post I read something about using a different blending rule (0.5 + 
0.5 = 1.0 instead of 0.5 + 0.5 = 0.75).

该问题主要是在渲染有覆盖区域的图像的时候,为了实现抗锯齿的功能,从而调用alpha blending会有一个颜色渲染的问题。如下是作者提供的解决方案:

es, there is a problem. The alpha blend operation works namely in this very 
way, that is 0.5 over 0.5 is 0.75. It looks like you have a glass and paint 
with a translucent color on it. In case of translucent ink you theoretically 
will never achieve full opacity. And anti-aliasing is implemented namely via 
alpha-blending (and I don‘t see any other reasonable way to do so).

But in certain cases it‘s quite possible to get rid of those adjacent edges 
artifacts. First, you need an RGBA buffer with premultiplied colors. 
Initially you clear it with rgba8(0,0,0,0) - and no other color. Then you 
use compositing operation "plus" instead of alpha-blend:

        typedef agg::comp_op_rgba_plus<color_type, component_order> 
blender_pre_type;
        typedef agg::comp_adaptor_rgba<blender_pre_type> blender_type;
        typedef agg::pixfmt_custom_blend_rgba<blender_type> pixfmt_type;

And the restriction is that the shapes must not overlap.
Then, after you render the scene you can alpha-blend the buffer over the 
parent layer. BTW, it can be RGB, not obligatory RGBA. But since your buffer 
is premultiplied, you are supposed to use a premultiplied renderer too, for 
example:

        typedef agg::pixfmt_rgba32_pre pixfmt_pre;
        typedef agg::renderer_base<pixfmt_pre> base_ren_pre_type;
        . . .
        pixfmt_pre pf_pre(rbuf_window());
        base_ren_pre_type ren_base_pre(pf_pre);

        ren_base_pre.blend_from(image_buffer);
时间: 2024-10-07 07:55:01

adjacent shapes抗锯齿情况下的alpha blending问题的相关文章

【转载】浅谈抗锯齿技术-老文章(供参考)

原文:http://vga.zol.com.cn/2002/1007/48701.shtml 一代又一代的图形芯片和显卡不断的推出,PC图形子系统的图形处理能力也随之大幅度的提高,这使得我们有可能在计算机上看到更精美的实时生成的图像.无论图形芯片如何改进,在图形输出技术没有革命性变化的今天,我们看到的最终图像依然是由上百万个显示屏上的像素组成的.正是因为像素的存在,使得图像总是存在一个近乎于无法完全克服的缺点:锯齿. 在现实世界中相邻的两个物体边缘一般是光滑的,但是在电脑上生成的图像中相邻的物体

Linux 下 netbeans 字体抗锯齿正解

转自:http://leenjewel.blog.163.com/blog/static/601937922010124444051/ 说来这个不难,主要是我看网上有的写的不是很明确,甚至有的写的根本不对,在这里写个正解. 在netbeans安装目录找到 etc 目录下的 netbeans.conf 文件,用你喜欢的编辑器打开这个文件,在其中加入这个选项          -J-Dawt.useSystemAAFontSettings=on 这里你要注意了,我用的是6.8版本,别的版本我没实验,

SSE图像算法优化系列二十四: 基于形态学的图像后期抗锯齿算法--MLAA优化研究。

偶尔看到这样的一个算法,觉得还是蛮有意思的,花了将近10天多的时间研究了下相关代码. 以下为百度的结果:MLAA全称Morphological Antialiasing,意为形态抗锯齿是AMD推出的完全基于CPU处理的抗锯齿解决方案.对于游戏厂商使用的MSAA抗锯齿技术不同,Intel最新推出的MLAA将跨越边缘像素的前景和背景色进行混合,用第2种颜色来填充该像素,从而更有效地改进图像边缘的变现效果,这就是MLAA技术. 其实就是这个是由Intel的工程师先于2009年提出的技术,但是由AMD将

回击MLAA:NVIDIA FXAA抗锯齿性能实测、画质对比

PC游戏玩家肯定会对各式各样的AA抗锯齿技术非常熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA(形态抗锯齿),但远比后者低调,所以很多玩家可能还从来没听说过,但是如果你玩过<永远的毁灭公爵>或者<F.3.A.R>,应该会有所耳闻.今天我们就来实际测测多款显卡上的FXAA性能和画质表现,并将其与MLAA进行简单对比. 什么是FXAA? FXAA全称为"Fast App

未来抗锯齿,FXAA/TXAA

前言:未来抗锯齿,FXAA/TXAA回顶部 [PConline 应用]在3D图像中,我们不可避免的遇到"锯齿".锯齿是由于受到显示设备分辨率和图像生成原理制约,不可避免的会出现的一种图像失真现象,具体表现为画面中物体的边缘呈现出直角的锯齿状.为了获得更好的视觉体验,让物体边缘看起来更柔和.自然,需要进行消除锯齿(Anti-Aliasing,简称AA)处理. 未来抗锯齿技术的方向:FXAA/TXAA 虽然抗锯齿了,但是模糊了 虽然FSAA全屏抗锯齿技术十分成熟,但是无论怎样发展,是不能够

抗锯齿技术简介

虽然3D图形渲染技术的飞速进步给我们带来了一次次的视觉震撼,电影级的画面早已经不是遥远的梦想,但电脑在计算3D画面时所出现的锯齿效果仍是不可避免的,这种效果在物体边缘最为明显.画面上那些跳牙咧嘴的锯齿每每令我们如蟹在喉,不吐不快.为了消除这些碍眼的锯齿,抗锯齿技术应运而生,并在图形处理技术不断发展的推动下日趋成熟和完善. 1. FSAA抗锯齿技术 最早的抗锯齿技术来自于3DFX,名为FSAA (FuliSceneAnti-aliasing,全屏抗锯齿).我们都知道,画面的分辨率越高,锯齿感就越不

UE4在PSVR中的抗锯齿和优化相关知识

UE4目前版本(4.15)在PS平台上并不支持MSAA,在未来的版本会加入.也就是说目前没有办法在PS平台上使用Forward Rendering + MSAA的组合 FXAA效率最高,但效果最差,只做了最后的图像边缘锐化 MSAA的优点是物体边缘和贴图分开处理,边缘会比较清晰.缺点是开销会比TAA稍大(即使有硬件支持),另外会有Specular aliasing.在使用MSAA时,可以在材质中打开normal to roughness,这样会使normal上突出的部分更加粗糙,减少高光闪烁.

基于图片的抗锯齿方法(一)

目前为止,MSAA仍是抗锯齿效果的黄金标准.然而MSAA需要硬件支持,并且要在RT中存放子像素信息,这大大增加了内存和带宽开销.在使用HDR管线或者G Buffer时此问题显得更加严重. 由于这些限制,基于后处理的抗锯齿方案逐渐成为主流.这类方案并不需要改变渲染管线,而是在图片中寻找被人眼识别为锯齿的像素,再对应模糊处理.morphological antialiasing(MLAA)即是其中之一. MLAA的思路很简单,考虑锯齿图中的一个微元,它常常是下图中B的样子.而如果分辨率无限加大,可以

【ShaderToy】基础篇之再谈抗锯齿(antialiasing,AA)

写在前面 在之前的基础篇中,我们讲到了在绘制点线时如何处理边缘的锯齿,也就是使用smoothstep函数.而模糊参数是一些定值,或者是跟屏幕分辨率相关的数值,例如分辨率宽度的5%等等.但这种方法其实是有一种问题的.这需要我们从绘制的图像说起. ShaderToy中绘制的很多图像可以说是一种Procedure Texture,过程纹理,即是计算机生成的纹理.拿之前画的圆和线来说,这些圆和线的绘制过程,是我们计算每个fragment到"期望图像"的距离,然后根据距离来判断使用哪种颜色.如果