OpenGL прозрачность текстуры на 3д модели

Всем привет, проблема такая: имею 3D модель диска для колец Сатурна, на которую применяю текстуру с прозрачностью в разных местах.

Проблема в том, что прозрачный пиксель OpenGL, видимо, всё равно воспринимает, как пиксель, который что-то закрывает, поэтому прозрачные кольца Сатурна закрывают Солце, когда не должны.

Фрагментный шейдер для планетарных колец:

#version 460 core

uniform sampler2D unColorLookup;
uniform float unInnerRadius;
uniform float unOuterRadius;
uniform vec3 unLightPos;
uniform vec3 unPlanetPos;
uniform float unPlanetRadius;
uniform float unZCoef;

in vec3 fPosition;
in vec2 texCoords;
in vec3 fWorldPosition;
in float fLogZ;

void main() {
    gl_FragDepth = log2(fLogZ) * unZCoef * 0.5;
    float len = length(fPosition);
    float u = (len - unInnerRadius) / (unOuterRadius - unInnerRadius);

    if (abs(u) > 1.0) {
        gl_FragColor = vec4(0.0);
    } else {
        vec4 ringColor = texture(unColorLookup, texCoords);
        //const float smoothingAmount = 10.0;
        //float shadow = clamp(sphereIntersectAmount(normalize(fWorldPosition - unLightPos), fWorldPosition, unPlanetPos, unPlanetRadius) / smoothingAmount, 0.0, 1.0);
        //ringColor.rgb *= 1.0 - shadow;
        gl_FragColor = ringColor;
    }
}

Можно было бы с помощью discard отсекать полностью прозрачные пиксели, но это такое себе, потому что свет Солнца должен проходить даже сквозь полупрозрачные кольца и тд. введите сюда описание изображения

введите сюда описание изображения


Ответы (0 шт):