Probleme
Apres le fix de layout atlas (session 78), les modeles crab et autres aliens
présentaient TOUJOURS des zones noires sur le corps. Les tiles de textures
utilisees (tile 22, 26 pour le crab) contenaient bien du contenu dans l’atlas,
mais ~40-50% des pixels etaient noirs (rgb=0,0,0).
Diagnostic
Outil VectObjFlagsInventory cree pour lister les flags render de chaque poly :
========== RESUME crab ==========
Total polys: 52
Holes (flags!=0): 1 (1.9%)
Glare (gouraud!=0): 49 (94.2%) <-- quasi tous !
94% des polys du crab utilisent le mode GLARE (gouraud!=0). En regardant
drawpolGL dans objdrawhires.s :
drawpolGL:
move.b (a0,d0.w*4),d3 ; sample pixel index
beq.s itsblack ; <-- SKIP si index = 0 !
...
Le mode GLARE (et le mode HOLES via drawpolh) skip les pixels d’index
palette 0, les rendant transparents au lieu de les dessiner en noir.
Cause racine
- Le rendu Amiga utilise l’index palette 0 comme « transparent » pour les
modes glare et holes (crab, mantis, wasp, etc.) - Notre atlas PNG etait rendu en RGB plein ou index 0 donnait rgb(0,0,0)
- Les pixels transparents etaient dessines comme noirs opaques
Fix (2 fichiers)
TextureMapConverter.java : atlas regenere en RGBA (TYPE_INT_ARGB)
if (rawIdx == 0) {
img.setRGB(V, U, 0x00000000); // alpha = 0 (transparent)
} else {
int mappedIdx = shadeData[32 * 256 + rawIdx] & 0xFF;
img.setRGB(V, U, 0xFF000000 | (palette[mappedIdx] & 0xFFFFFF));
}
VectObjConverter.buildMaterial() : activation du blend alpha + discard
mat.setFloat("AlphaDiscardThreshold", 0.5f);
mat.getAdditionalRenderState().setBlendMode(BlendMode.Alpha);
Outil de diagnostic ajoute
VectObjFlagsInventory.java: liste tous les polys d’un vectobj avec leurs
flags (holes/glare/normal) et texOffsets, + resume statistique par texOffset.- Task gradle
dumpVectObjFlags -Pvectobj=<nom>.
Procedure de test
./gradlew convertTextureMaps # regenere atlas PNG en RGBA
./gradlew convertVectObj # regenere .j3o avec nouveau material
./gradlew run # teste en jeu
Fichiers modifies
src/main/java/com/ab3d2/tools/TextureMapConverter.java: atlas RGBAsrc/main/java/com/ab3d2/tools/VectObjConverter.java: material alphasrc/main/java/com/ab3d2/tools/VectObjFlagsInventory.java: nouvel outilbuild.gradle: ajout taskdumpVectObjFlags