图片叠加导致过曝 / 粒子系统叠加导致粒子过爆

  • Creator 版本:3.7.2
    在做粒子系统时发现粒子出来的效果和预期不一样
    发现粒子在叠加的过程中,显示的效果会出现类似过曝的效果
    image

后续在排查过程中以及询问了大佬
发现是渲染材质球的问题,材质球中BlendState 的Blend Dst属性应该使用ONE_MINUS_SRC_ALPHA
这样就可以解决透明材质叠加导致的图片过曝问题
image

以下是关于修改材质球中BlendState 的Blend Dst属性GPT的解释:

在材质(Material)渲染中, Blend Src AlphaBlend Dst Alpha 是用于控制混合模式(Blending Mode)效果的关键参数,尤其是在处理透明纹理或图片时。它们分别表示源图(当前纹理)和目标图(屏幕上的已渲染内容)在颜色混合过程中的权重。调整它们可以影响材质在屏幕上叠加时的显示效果。

1. Blend Src Alpha

  • Blend Src Alpha 控制源图(当前纹理)的透明度,即对渲染的像素颜色所取的权重,通常使用 SRC_ALPHA 表示。
  • SRC_ALPHA 会使用当前纹理的 alpha 值作为混合因子,表示“源颜色的透明度”对最终渲染颜色的影响。

2. Blend Dst Alpha

  • Blend Dst Alpha 控制目标图(背景或已渲染内容)的透明度,即对背景颜色的权重,通常使用 ONE_MINUS_SRC_ALPHA 表示。
  • ONE_MINUS_SRC_ALPHA 表示背景颜色会以 1 - 源图的 alpha 值作为混合因子。这在叠加多个透明图像时效果尤为明显,可以防止透明度累加过度导致的过曝(发白)。

3. 解决图片叠加过曝问题

  • 当使用 Blend Dst AlphaONE (完全显示背景颜色)或 SRC_ALPHA (使用背景颜色的透明度)时,透明图片叠加时的透明度累加会导致图像整体发亮或过曝,尤其是多层透明图片叠加时更加明显。

  • Blend Dst Alpha 设置为 ONE_MINUS_SRC_ALPHA 可以让背景颜色的权重随源图透明度增加而减小,这样就避免了多次叠加透明度的累加效应。其公式如下:
    Final Color=(Src Color * Src Alpha)+(Dst Color * (1 - Src Alpha))

  • 这种混合模式可以确保透明度越高的区域对背景颜色的影响越小,叠加效果更加自然,不会过曝。

4赞

好知识,再配合这张

又让我梦回15年前,学习 opengl es

1赞

:rofl:刚入行1年,对着色器shader这一块还不是很熟悉,之前学习了下unity shader,但是没怎么看明白 :sob:

兄弟加油,多看,多写,就行了。
学习过程都是这样,现在还有AI 实在太方便。

想问个问题,就像我遇到的问题与这张图对比


为什么应该使用SRC ALPHA与ONE_MINUS_SRC_ALPHA叠加?
他的渲染逻辑是降低边缘亮度与提亮中心亮度吗?

https://learnopengl-cn.readthedocs.io/zh/latest/04%20Advanced%20OpenGL/03%20Blending/

这个详细解释过程,和对应计算表

1赞

image
替换一下,完美解决…