Autor Wątek: Tworzenie hierarchical-z map - problem z rozmiarem nie będącym potęgą 2  (Przeczytany 682 razy)

Offline Montjet

  • Użytkownik

# Październik 15, 2017, 13:39:22
Witam, mam problem - próbuję dla depth map'y stworzyć mip mapy, gdzie wyższy poziom mip będzie przechowywał maksymalną wartość poprzedniego poziomu.

Dla depth mapy o rozmiarze potęgi dwójki działa prawidłowo - problem pojawia się z innym rozmiarem.
Algorytm GLSL:
#version 400 core

uniform sampler2D lastDepthMip;
uniform ivec2 lastMipSize;

in vec2 texCoord;

void main(void)
{
vec4 texels;
texels.x = texture(lastDepthMip, texCoord).x;
texels.y = textureOffset(lastDepthMip, texCoord, ivec2(-1, 0)).x;
texels.z = textureOffset(lastDepthMip, texCoord, ivec2(-1,-1)).x;
texels.w = textureOffset(lastDepthMip, texCoord, ivec2(0,-1)).x;

float maxZ = max(max(texels.x, texels.y), max(texels.z, texels.w));

vec3 extra;
if (((lastMipSize.x & 1) != 0 ) && (int(gl_FragCoord.x) == lastMipSize.x - 3))
{
if (((lastMipSize.y & 1) != 0 ) && (int(gl_FragCoord.y) == lastMipSize.y - 3))
{
extra.z = textureOffset(lastDepthMip, texCoord, ivec2(1, 1)).x;
maxZ = max(maxZ, extra.z);
}
extra.x = textureOffset(lastDepthMip, texCoord, ivec2( 1, 0)).x;
extra.y = textureOffset(lastDepthMip, texCoord, ivec2( 1,-1)).x;
maxZ = max(maxZ, max(extra.x, extra.y));
}

if (((lastMipSize.y & 1) != 0 ) && (int(gl_FragCoord.y) == lastMipSize.y - 3)) {
extra.x = textureOffset(lastDepthMip, texCoord, ivec2(0, 1) ).x;
extra.y = textureOffset(lastDepthMip, texCoord, ivec2(-1, 1) ).x;
maxZ = max( maxZ, max(extra.x, extra.y));
}

gl_FragDepth = maxZ;
}

Kod pochodzi z http://rastergrid.com/blog/2010/10/hierarchical-z-map-based-occlusion-culling/ (dokument o occlusion culling).
Próbowałem zmieniać przesunięcia na różne sposoby - błąd dalej występuje.
Sprawdziłem czy spełnione są kiedykolwiek warunki:
int(gl_FragCoord.x) == lastMipSize.x - 3(lastMipSize.x & 1) != 0dla tych spełniony, dla:
int(gl_FragCoord.x) == lastMipSize.x - 2niespełniony, czyli tak jak powinno być.

Jakieś sugestie?



« Ostatnia zmiana: Październik 15, 2017, 13:42:07 wysłana przez Montjet »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Montjet

  • Użytkownik

# Październik 15, 2017, 18:24:20
Niemalże napisałem algorytm na nowo - czy mi się wydaje czy ten z kursu jest totalnie zły? I to w nie jednej kwestii?

Mój jest niestety wolniejszy ale jeszcze zoptymalizuje go pod wieczór.