Rendu 3D translucide - Le retour
-
Ça je ne pense pas que ce soit possible, mais sinon combiné juste les textures
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
-
Pour utiliser deux textures, il faut couper en deux modèles complètement distincts et faire quelque comme ceci:
utiliser texture1 dessiner modele1 utiliser texture2 dessiner modele2
-
Ah en effet c’est le “complètement distincts” qui fait la différence ^^
Il me reste un ou deux détails à vérifier et je conclurai ensuite sur l’état du sujet, merci pour les infos et conseils
-
Donc à ce que j’ai cru comprendre Minecraft ne me permettra pas d’obtenir mieux que:
:::
Voyez-vous le verre de bière à moitié vide ou à moitié remplis?
:::Malheureusement il y a des bouts des rendus qui ne sont pas copains et certains sont même portés sur la délation puisqu’ils laissent clairement voir où sont leurs camarades…
Mais je suis déjà bien plus à l’aise avec les rendus par transparence et les rendus multiples, alors je vous remercie de m’avoir aidé et/ou éclairé sur certains points et je clos le sujet dans la nuit si il n’y a pas de choses à ajouter.
-
Minecraft ou la translucidité des TESR
I) La bouillabaise du rendu :
On constate assez rapidement quand on commence à faire des rendus de TESR qui sortent de l’ordinaire que Minecraft fait ses rendus en plusieurs phases, jusque là tout va bien. Mais ces phases ont la sale habitude de se marcher sur les pieds, notamment avec les particules et les fluides.
Quand on veux rendre un objet translucide on a le choix d’une flopée **d’attributs **OpenGL pour le faire correctement, néanmoins ces phases viennent mettre leur nez dans tout ça. Minecraft rend les TESR à part des autres blocks et quand il les rends, il le fait en mode “TOUS ENSEMBLE!”. On observe donc des problèmes étranges comme un coffre qui vient faire son rendu par dessus notre block translucide alors que ce coffre se trouve loin derrière.II) A la recherche du fix parfait :
Mettre un ou plusieurs éléments translucides dans un rendu de TESR est un problème qui semble affecter de nombreux moddeurs. Beaucoup n’ont jamais trouvé la solution et ont sont donc partis pour des work-arounds, comme passer leurs rendus en ISBRH. Ou encore enlever les éléments translucides de leurs modèles.
J’ai moi même rencontré ce problème à de nombreuses reprises et après m’y être replongé de nombreuses fois j’ai fait la découverte de fonctionnalités non documentées qui sont la solution divine de ce problème.
Pour reprendre, il nous faut un moyen de rendre les parties opaques de notre modèle lors de la phase habituelle des TESR et ensuite il nous faut rendre les parties translucides dans une phase où juste elles sont rendues pour qu’elles ne viennent pas détruire les rendus opaques préalablement effectués.
Il existe dans la class TileEntity une petite méthode incroyable qui permet de commander dans quelles phases notre TESR doit être rendu :public boolean shouldRenderInPass(int pass) { return pass == 0; }
La phase 0 est là par défaut et consiste en le “TOUS ENSEMBLE!” des TESR, néanmoins peu savent qu’il y a la phase 1, qui elles contient les éléments translucides des TESR.
Il nous faut donc override cette méthode dans nos Tiles possédants des rendus translucides :@Override public boolean shouldRenderInPass(int pass) { return (pass == 0 || pass == 1); }
Néanmoins, après avoir ajouter ceci il n’y a aucun changements visibles à part de nouveaux glitchs, car nous avons oublié une chose très importante : Faire le rendu du modèle opaque uniquement dans la phase opaque, et le rendu translucide uniquement dans la phase appropriée.
Une petite méthode de forge vient ici nous sauver :MinecraftForgeClient.getRenderPass();
Elle renvoi un entier correspondant à la phase de rendu en cours au moment de l’appel.
Si vous mettez un print de cet entier dans votre rendu :@Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f, int destroy) { System.out.println(MinecraftForgeClient.getRenderPass()); }
Vous verrez que votre rendu est appelé deux fois de suite, sur deux phases contingentes : 0 et 1. Si jamais vous enlevez de votre TileEntity la méthode que nous avons ajouté plus haut, le rendu ne sera appelé que lors de la phase 0.
La suite devient donc d’une simplicité déconcertante :if (MinecraftForgeClient.getRenderPass() == 0) this.MODEL.renderOpaque(); else if (MinecraftForgeClient.getRenderPass() == 1) this.MODEL.renderAlpha();
Ainsi, on rend les éléments opaques dans la phase 0 et les autres dans la 1. Les glitchs disparaissent, pour ne **jamais **revenir avec un peu de chance !
III) Le pitfall :
Il est assez facile d’oublier que l’ont fait le rendu de nos TESR avec des ISBRH dans l’inventaire quand on est en 1.7.10 parce que nous sommes des gros fainéants.
Il va falloir ajouter une vérification dans le rendu car il y aura que la phase 0 de rendu quand le modèle est appelé dans l’inventaire, du coup seulement un morceau du modèle sera rendu.
Voilà. Une réponse exhaustive à un problème qui mine les rendus depuis pas mal de versions. On notera également que ce problème a complètement changé à partir de la 1.8, mais ça c’est pour une autre fois. -
Bonsoir (désolé du UP…Si c’en est un ?)
J’ai une entity qui cause le même problème, ou au moins un problème de rendu de vitres. Et je pense qu’il faut que je change l’odre de rendu de certaines shapes de son modèle, je sais pas…Voici ce gif qui illustre mon problème :
Donc on voit très bien que si on regarde par le pare-brise avant de mon bus, les vitres à l’arrière, disparaissent. Donc faut-il que j’utilise ta méthode Ourten, ou y’a-t-il quelque chose de + rapide / facile (même si ça m’a pas non plus l’air très compliqué ^^') ?
-
Je précise que la méthode d’Ourten n’a pas fonctionné pour moi. Sa méthode ne cause pas plus de problèmes ceci dit et m’a permis plus clairement d’arriver au même résultat que la bonne poignée de conseils précédents réunis, entrecoupés et autre.
Est ce que tu fais un rendu pour chaque partie transparente?
-
C-est-à-dire ?
-
C’est à dire que logique si tes autres vitres appliquent la transparence, elles devraient au contraire ressortir comme sur mes screens (quand on regarde un bloc transparent au travers d’un autre bloc transparent, le prob étant que la couleur n’est pas bien appliquée dans ce cas là, mais au moi ils apparaissent)
Donc si dans ton TileEntitySpecialRenderer de ton… Ah mais c’est une entité ou un bloc ton bus au fait?
Toujours est il que si c’est un bloc, dans le TESR tu peux rendre plusieurs modèles différents, chacun étant une vitre différente de ton tout final. C’est chiant à faire mais je suppose que c’est une piste à explorer (car après tout c’est ce que j’ai fais en suivant les conseils précédents).
-
Merci Toutoune, j’ai résolu mon problème. Un peu bête puisque je rendais mes vitres arrières après mon pare brise avant, j’ai donc inversé le sens, et le problème fut résolu