タイルを含む大きな2Dテクスチャを使用して3Dテクスチャルックアップをシミュレートするコードを思いつきました。3Dテクスチャは128x128x64で、大きな2Dテクスチャは1024x1024で、128x128の64タイルに分割されています。
フラグメントシェーダーのルックアップコードは次のようになります。
#extension GL_EXT_gpu_shader4 : enable
varying float LightIntensity;
varying vec3 pos;
uniform sampler2D noisef;
vec4 flat_texture3D()
{
vec3 p = pos;
vec2 inimg = p.xy;
int d = int(p.z*128.0);
float ix = (d % 8);
float iy = (d / 8);
vec2 oc = inimg + vec2(ix, iy);
oc *= 0.125;
return texture2D(noisef, oc);
}
void main (void)
{
vec4 noisevec = flat_texture3D();
gl_FragColor = noisevec;
}
タイリングロジックは正常に機能しているようで、このコードには1つだけ問題があります。次のようになります。
ボクセルのレイヤーの間に奇妙な1〜2ピクセル幅の縞があります。縞模様は、変化すると境界線に表示されd
ます。
私はこれに2日間取り組んできましたが、ここで何が起こっているのかまだわかりません。