|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Décapiteur de bugDéveloppeur informatique Inscription : décembre 2005 Messages : 309 ![]() |
Salut,
j'ai créé un polygone de type prisme hexagonal auquel je souhaite appliquer une texture différente pour chaque face (haut, bas, et les autres...). j'ai créé pour cela ma propre structure de vertex : Position Normale TextureUV0 (haut) TextureUV1 (bas) TextureUV2 (autres...) Là où je bloque c'est dans le code hlsl : Chaque vertex faisant partie de 3 faces de mon polygone, comment appliquer une TextureUV différente pour chaque face ? c'est bien au niveau du PixelShader que je dois chercher ? (ce qui m’amène d’ailleurs à poser la question : Connaissez-vous une bonne doc complète en fr de préférence ?) voici ce que j'ai dans mon PS : Code :
Out.Color = tex2D(texture0MapSampler, In.Texture0); merci
__________________
"Essayer est le premier pas vers l'Echec !" (Homer Simpson) |
|
00
|
|
|
#2 |
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 786 ![]() |
Bonjour,
Si vous essayez de mettre une texture différente par face, alors il vous fera un vertex différent pour chaque face (et là, l'indexation n'est plus possible Je me demande s'il n'y aura pas une autre méthode, afin de spécifier que les huit vertex et les 48 texcoords, mais je ne connais pas une telle méthode
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Décapiteur de bugDéveloppeur informatique Inscription : décembre 2005 Messages : 309 ![]() |
Bonjour,
déjà merci pour la réponse malheureusement j'affiche énormément de ces polygones (je fais une sorte de map de jeu volumétrique) et si je passe en non indexé je passe de 120fps à 34 ..., vu que je compte rajouter des machins dessus ultérieurement ca fait short :/ j'ai pensé à faire un mix des deux en restant en indexé mais en doublant les vertices mais je pense que ca reviendrait au même question perf :p j'ai finalement continué à chercher du coté des shader et suis tombé sur un GeometryShader (qui permettrait de toucher non plus aux vertices mais aux triangles) disponible avec ... directx11 ! pas supporté par XNA semble t'il (9.0c je crois) du coup deux solution s'offrent à moi : - soit j'abandonne ce concept de map volumétrique et je reste avec une simple surface - soit je laisse tomber XNA pour me mettre au DX11 - soit j'ai loupé un truc et quelqu'un à une idée qui tue
__________________
"Essayer est le premier pas vers l'Echec !" (Homer Simpson) |
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Développeur de jeux vidéo Inscription : février 2006 Messages : 471 ![]() |
Avec un meilleur dépliage de ta texture ce n'est pas possible ?
( j'ai l'impression que tu reste bloqué sur une façon trop simpliste de texturer : si cela peut t'inspirer : http://blog.khamsin.org/public/Tutor..._01_entete.jpg ) N'hésites pas à poster un Screenshots pour nous aiguiller !
__________________
Suivez le développement de Chibis Bomba twitter : https://twitter.com/MoD_DiB DevBlog : http://moddib.blogspot.fr/ |
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Décapiteur de bugDéveloppeur informatique Inscription : décembre 2005 Messages : 309 ![]() |
Salut,
merci pour ta réponse, cette méthode serait possible si mon polygone avait toujours les mêmes proportions. Or, il a une part d'aléatoire : les vertices sont légèrement déplacés en x,y,z (aléatoirement entre +0 et +0.5) lors de sa création. Cela fait qu'une texture basée sur un objet aux proportions définies ne collerait pas (serait décalée au niveau des raccords). L'avantage d'avoir une texture par face est que je peux compenser les déplacements aléatoire des vertices en jouant sur les coordonnées de la texture. Par exemple pour un cube (plus simple :p) : Si je mappe simplement les coins de mon cubes, une fois aléatoirement déplacés, mes vertices déforment la texture (admirez mes talents de dessinateur...) Si je mappe les coins en prenant un peu de marge sur les cotés (équivalente aux déplacements Max) le rendu ne sera pas affecté : le problème par contre, c'est que toute la partie non mappée (la bordure) de la texture déborde sur les faces latérales. C'est pour ca que j'aurais aimé caser une texture par face. En non indexé ca fonctionne mais c'est ultra lent ! (je passe de 120fps à 34...) et avec le mappage de texture complexe j'aurais forcément des bavures ou déformations de la texture.
__________________
"Essayer est le premier pas vers l'Echec !" (Homer Simpson) |
|
00
|
|
|
#6 |
|
Membre chevronné
![]() Développeur de jeux vidéo Inscription : février 2006 Messages : 471 ![]() |
Ça m'a l'air extrêmement spécifique comme problème : des screens permettraient de mieux cerner ce que tu souhaites.
Par contre passer de 120fps à 34 lorsque tu n'indexes pas je penses que tu as un problème ailleurs aussi : tu affiches certainement une tonne de faces qui ne sont pas visibles, pas de LOD etc...
__________________
Suivez le développement de Chibis Bomba twitter : https://twitter.com/MoD_DiB DevBlog : http://moddib.blogspot.fr/ |
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Décapiteur de bugDéveloppeur informatique Inscription : décembre 2005 Messages : 309 ![]() |
Voila un petit dessin qui permettra peut être de mieux expliquer le problème :
(au MsPaint ... sisi...) je fais tout un maillage de ce genre de figures genre yen a 64*2*64. Du coup en non indexé ca fait chuter le fps : je passe de 14 vertices pour 18 indices à 72 vertices pour chaque polygones... si j'en affiche 64*2*64 = 8192 polygones. en indexé ca fait 8192 * 14 = 114 688 vertices en non indexé ca fait 8192 * 72 = 589 824 vertices et là ma carte graphique pleure ![]() du coup je cherchais au niveau non plus des vertices mais au niveau du shader lui-même
__________________
"Essayer est le premier pas vers l'Echec !" (Homer Simpson) |
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Développeur de jeux vidéo Inscription : février 2006 Messages : 471 ![]() |
J'ai très bien compris le problème tu l'avais déjà très bien expliqué, un screen aurait juste permis de proposer d'autres solutions, et surtout de mettre en avant un manque d'optimisations.
Sinon tu n'as pas à passer en non indexé, il te suffit de découper ton objet en 3 et tu pourras faire ce que tu souhaites de manière moins gourmande qu'en non indexé. Ce que tu souhaites faire ( plusieurs uv pour un même point ) est possible, en s'amusant à choisir la texture en fonction de la normale actuelle mais ça sera très coûteux en performance et ça me semble un peu tricky.
__________________
Suivez le développement de Chibis Bomba twitter : https://twitter.com/MoD_DiB DevBlog : http://moddib.blogspot.fr/ |
|
|
00
|
|
|
#9 | ||||
|
Membre éclairé
![]() Décapiteur de bugDéveloppeur informatique Inscription : décembre 2005 Messages : 309 ![]() |
ce ne serait pas découpé en 3 mais en 8 (haut, bas et 6*coté)
ce qui ferait 7 pour le haut 7 pour le bas 6*4 pour les cotés = 38 vertices ca peut être un bon compromis une partie du code pour faire le polygone en non indexé : Code :
Code :
__________________
"Essayer est le premier pas vers l'Echec !" (Homer Simpson) |
||||
|
00
|
|
|
#10 |
|
Membre chevronné
![]() Développeur de jeux vidéo Inscription : février 2006 Messages : 471 ![]() |
Normalement tu n'as aucunement besoin d'afficher toutes les faces.
Renseigne toi sur les vertex buffer dynamique et jette un oeil aux optimisations effectuées ici : https://techcraft.codeplex.com/ Certes c'est plus complexe dans ton cas mais l'idée est la même !
__________________
Suivez le développement de Chibis Bomba twitter : https://twitter.com/MoD_DiB DevBlog : http://moddib.blogspot.fr/ |
|
|
00
|
|
|
#11 |
|
Membre éclairé
![]() Décapiteur de bugDéveloppeur informatique Inscription : décembre 2005 Messages : 309 ![]() |
je vais me pencher là-dessus,
merci beaucoup
__________________
"Essayer est le premier pas vers l'Echec !" (Homer Simpson) |
|
00
|
Copyright © 2000-2013 - www.developpez.com