Log / Linear Z-Buffer シャドウ マップ

Log / Linear Z-Buffer シャドウ マップのソリューション
は以下のとおりです:

問題は、遠方の影にアーティファクトが現れることです。対数深度バッファを作ってみたいのですが、どこでどのようにすればいいのかわかりません… 全方向シャドウマップにポイントライト方式を使っています

頂点シェーダー :

#version 460 core
layout (location = 0) in vec3 aPos;

uniform mat4 model;
uniform float zCoef;
//out vec4 pos;

void main() {
    gl_Position = model * vec4(aPos, 1.0f);
//    gl_Position.z = log2(max(1e-6, gl_Position.w + 1.0)) * zCoef - 1.0;
//    gl_Position.z *= gl_Position.w;
}

ジオメトリ シェーダー :

#version 460 core
layout (triangles) in;
layout (triangle_strip, max_vertices = 18) out;

uniform mat4 shadowMatrices[6];
uniform float zCoef;

out vec4 FragPos; // FragPos from GS (output per emitvertex)

void main()
{
    for(int face = 0; face < 6; ++face)
    {
        gl_Layer = face; // встроенная переменная, указывающая на то, какую грань мы рендерим
        for(int i = 0; i < 3; ++i) // для каждой вершины треугольника
        {
            FragPos = gl_in[i].gl_Position;
            gl_Position = shadowMatrices[face] * FragPos;
//            gl_Position.z = log2(max(1e-6, gl_Position.w + 1.0)) * zCoef - 1.0;
//            gl_Position.z *= gl_Position.w;
            EmitVertex();
        }
        EndPrimitive();
    }
}

フラグメント シェーダー :

#version 460 core
in vec4 FragPos;

uniform vec3 lightPos;
uniform float farPlane;
uniform float zCoef;

void main() {
    float lightDistance = length(FragPos.xyz - lightPos);

    lightDistance = lightDistance / farPlane;

    gl_FragDepth = lightDistance;
}

皆さん、助けてください。線形化深度を使用しようとしましたが、うまくいきませんでした..