[Résolu] script material canal Alpha, l'arbre qui cache...

Généralités sur la programmation 3D
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

[Résolu] script material canal Alpha, l'arbre qui cache...

Message par Dudule »

Bonjour,
Je tente d'intégrer dans mon projet un objet mesh dont les textures sont définies par un script material.
Ces textures sont des png avec un canal alpha pour la transparence.
J'obtiens de drôles de choses : là où on devrait seulement voir à travers les faces associées à la texture concernée, il arrive qu'on voit aussi à travers les objets placés derrière (comme des rayons X), mais pas à tous les coups !
J'ai fait plusieurs tentatives avec les paramètres scene_blend et même transparent_sorting, mais je ne parviens pas à trouver la solution.
Plus fort, le résultat obtenu n'est pas le même suivant l'image de texture associée au material. Et même en essayant d'associer la même texture à deux material différents, le résultat est bon pour l'un, mais pas pour l'autre. (par exemple, ça semble moins bien fonctionner avec le feuillage vert qu'avec le brun dans mon archive). Le résultat est aussi différent suivant l'ordre dont on définit les material dans le script. Un casse-tête !
J'ai dû manquer un truc...

L'archive est ici http://lecartablededudule.pagesperso-or ... _alpha.zip
Voyez les feuilles brunes, c'est nickel. Voyez les feuilles vertes, bêrk !
J'aimerais bien mettre une capture ici, mais je ne sais pas comment faire.

Un extrait de mon fichier material

Code : Tout sélectionner

material arbre_1_obj#3
{
	technique
	{
		pass
		{
			ambient 0 0 0 1
			diffuse 0.5 0.5 0.5 1
			specular 0 0 0 1
                        scene_blend alpha_blend
			//transparent_sorting force

			texture_unit
			{
				texture arbre_1.png
			}
		}
	}
}

material arbre_1_obj#4
{
	technique
	{
		pass
		{
			ambient 0 0 0 1
			diffuse 1 1 1 1
			specular 0 0 0 1
                        scene_blend alpha_blend
			//transparent_sorting force

 			texture_unit
			{
				texture arbre_2.png
			}
		}
	}
}
Quelqu'un connaît la solution ?
Dernière modification par Dudule le dim. 17/janv./2016 11:53, modifié 1 fois.
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

Re: script .material et canal Alpha, l'arbre qui cache la fo

Message par Dudule »

J'essaie encore, mais j'ai comme un doute. J'ai l'impression que le moteur n'accepte qu'une face texturée avec un canal alpha par objet mesh. Sinon l'objet s'auto-cache lui-même.
A terme, je ne veux mettre qu'une seule texture feuille dans l'arbre, mais sur plusieurs faces orientées dans différents plans. On dirait que le problème est là : ça ne fonctionne que sur un plan. Les autres plans font disparaître l'objet à l'endroit de la transparence de la texture.
Ce n'est pas parce que les faces se croisent. J'ai fait attention à cela car j'imagine que ce n'est pas conseillé.
je pensais aussi à la profondeur de l'image. C'est du 32 bits. Mais j'ai essayé avec du 8 bits et là j'ai du noir au lieu de la transparence. Et avec du gif je reviens au problème initial.

Pour que ce soit plus clair, une archive ici : http://lecartablededudule.pagesperso-or ... al_alpha_2

a noter que si j'enlève la ligne 'transparent_sorting force', eh bien l'arbre fait disparaître certaines face de la maison en arrière plan.

Code : Tout sélectionner

material arbre_1_obj#3
{
	technique
	{
		pass
		{
                        scene_blend alpha_blend
			transparent_sorting force

			texture_unit
			{
				texture arbre_1.png
			}
		}
	}
}
Ça n'est pas loin de me gaver...
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

Re: script .material et canal Alpha, l'arbre qui cache la fo

Message par Dudule »

Et avec la ligne 'depth_write off', il y a du changement, mais ce n'est encore pas convaincant : il y a confusion entre les faces, qui pourtant ne se croisent pas.

Code : Tout sélectionner

material arbre_1_obj#3
{
	technique
	{
		pass
		{
            scene_blend alpha_blend
             depth_write off
			 
			texture_unit
			{
				texture arbre_1.png
				 }
		}
	}
}
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: script .material et canal Alpha, l'arbre qui cache la fo

Message par comtois »

essaye avec ça (material récupéré ici)

Code : Tout sélectionner

material arbre_1_obj#3
 {
     technique
     {
         pass
         {
             lighting off
 
             ambient 1 1 1 1
             diffuse 1 1 1 1
             specular 0 0 0 0
             emissive 0 0 0
 
             // by increase this number, we will get more transparent objects
             alpha_rejection greater 128
             depth_write on
 
             texture_unit
             {
                 texture arbre_1.png
                 tex_coord_set 0
                 colour_op modulate
             }
         }
     }
 }
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

Re: script .material et canal Alpha, l'arbre qui cache la fo

Message par Dudule »

Ça fonctionne !
Le truc qui change tout, c'est donc la ligne 'alpha_rejection greater 128' qui vaut mieux que 'scene_blend alpha_blend'. J'ai enlevé tout le reste qui n'a aucun effet sur la scène.
Je testerai, si j'ai le temps, avec d'autres valeurs d'alpha_rejection, et je tenterai peut-être de comprendre pourquoi scene_blend ne fonctionne pas. Mais l'important est que ça fonctionne, et que je peux maintenant poursuivre mon apprentissage jusqu'au prochain obstacle...

Merci beaucoup !
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: [Résolu] script material canal Alpha, l'arbre qui cache.

Message par comtois »

Il est aussi conseillé de ne pas laisser en blanc la partie de l'image non visible, mais d'utiliser une couleur proche de la partie visible , dans ton cas du vert. Et peut-être que dans ce cas ton script initial aurait pu fonctionner ? faut expérimenter.
lu ici.
Another thing to know: the non visible part of your texture, don't let it white, give it a near color of your visible part. Here, a green color.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Répondre