Aller au contenu principal

Session 79 — Fix majeur transparence index 0 (mode glare/holes ASM)

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 RGBA
  • src/main/java/com/ab3d2/tools/VectObjConverter.java : material alpha
  • src/main/java/com/ab3d2/tools/VectObjFlagsInventory.java : nouvel outil
  • build.gradle : ajout task dumpVectObjFlags

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *