Bonjour à vous,
Dernièrement, j’ai voulu me replonger dans les shaders, notamment via GLSL, et j’ai tenté de suivre une vidéo de OGLDev :
J’ai donc essayé de reprendre son vertex shader et son fragment shader :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #version 420 core out vec3 WorldPos; uniform mat4 viewMatrix; uniform mat4 projectionMatrix; const vec3 positions[4] = vec3[4]( vec3(-1.0, 0.0, -1.0), // TL vec3(1.0, 0.0, -1.0), // BL vec3(1.0, 0.0, 1.0), // BR vec3(-1.0, 0.0, 1.0) // TL ); const int indices[6] = int[6](0, 2, 1, 2, 0, 3); void main() { // gl_VertexID [0 : 5] because the shader is use a gldraw with 6 as parameters WorldPos = positions[indices[gl_VertexID]]; vec4 Pos = projectionMatrix * viewMatrix * vec4(WorldPos, 1.0); gl_Position = Pos; }Je place ma camera de sorte a ce qu'elle soit parfaite en face du plan crée. Il se trouve que certaines ligne sont plus transparente que d'autre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #version 420 core in vec3 WorldPos; out vec4 FragColor; void main() { float gridCellSize = 0.25; vec4 blackColor = vec4(0.0f, 0.0f, 0.0f, 1.0f); float lx = length(vec2(dFdx(WorldPos.x), dFdy(WorldPos.x))); float ly = length(vec2(dFdx(WorldPos.z), dFdy(WorldPos.z))); vec2 dxdy = vec2(lx, ly); float d = mod(WorldPos.z, gridCellSize); float lod0a = 1.0f - d / ly; FragColor = blackColor; FragColor.a *= lod0a; }
J’ai tenté de chercher une cause par moi-même ainsi qu’en utilisant ce bon vieux ChatGPT, mais malheureusement aucune des réponses qu’il m’a données ne m’a convaincu.
Je pense bien évidemment que cela est lié à l’utilisation de dFdx / dFdy, mais je trouve cela étrange que certaines lignes verticales au centre soient plus transparentes que celles situées aux extrémités,
puisque la taille projetée sur un pixel devrait normalement être plus grande aux extrémités du plan qu’en son centre, du fait de la projection perspective et donc en utilisant la fonction lod0a du fragment shader, les lignes les
plus aux extrémité du plan devrait être transparente. Si quelqu'un a une réponse a ce problème je suis fort intéressé.
Note : J'ai deja pu résoudre mon soucis en changeant de formule mais je n'arrive toujours pas à expliquer le problème dont j'ai parlé...






.
Répondre avec citation



. J'ai pensé à des imprécisions dû aux virgules flottantes, ou encore au possible trans-typage, mais je ne vois pas le problème. Est-ce que cela pourrait être le setup ?


Partager