Hello, j'ai bossé un peu sur un shader de terrain splatting qui utilise 6 textures de détails, 2 alphamaps avec un rendu du terrain en 2 passes. C'est pas super optimisé et y'a encore quelques bugs de clignotement mais c'est presque nickel.
Voici vite fait un rendu en guise de preuve .
A bientôt, je refilerai sans doute le code source d'ici peu pour ceux qui veulent s'amuser avec.
Hors ligne
http://www.partage-facile.com/6KAL6FKP3 … n.rar.html
On peut envisager d'avoir 9 textures en rajoutant une troisième passe, mais j'en vois pas vraiment l'utilité et bon ça bouffe pas mal de ressources donc à vous de voir.
Voilà, amusez vous bien avec se code et merci de partager vos améliorations .
Hors ligne
Sympa le rendu! Toi et les shaders c'est le grand amour.^^ En tout cas, beau travail.
Ah, oui! Il y a truc que je voudrais te demander. Tu as fait des shaders avec de l'ombrage. Serait-il possible que tu me fasses un shader simple texturing avec ombrage. Avec quelques commentaires pour expliquer les grandes lignes. Parce que j'ai cherché sur le net mais je n'ai pas réussi à en faire un. Les shadows sont pour moi un grand mystère insoluble.^^ Je réussi du texturing de base (auquels j'apporte quelques effets) avec les shaders mais sans ombres ils ne me servent à rien.
Hors ligne
Très sympa en effet. Ça change du terrain natif d'Irrliccht.
C'est, par exemple, la même technique employé par TV3D pour son terrain. Plus qu'a rajouter un bump, et cela sera le top (non pas taper...)
Hors ligne
Salut amis codeurs.
JohnPlayer, pas de soucis, je te refilerai mon code de cascaded shadowmap si ça t’intéresse, tu pourras le modifier et l'adapter comme bon te semble voir même l'améliorer on sait jamais ça pourrais m'aider aussi . Ton adresse de courriel sur le forum est-elle encore valide ?
TMyke, je cherche effectivement à gérer mon terrain avec plusieurs textures pour y mettre mon code de bump mapping qui fonctionne bien sur le terrain traditionnel mais pas encore avec le splatting...Ca va venir, je suis plustôt du genre tétu même si ça doit me prendre 10 plombes.
Hors ligne
Oui, mon adresse mail est valide Copland. J'attends çà avec impatience parce que j'arrivais à faire des trucs sympas avec les shaders et pour l'éclairage de l'objet lui-même c'était facile. Mais alors les ombres!!! J'ai failli devenir chauve.^^
Actuellement, je suis en train de réalisé un éditeur de RPG 3D et le "moteur" qui va avec. Donc j'utilise LUA pour les scripts, le Xml pour mes fichiers "propriétaire" et la seule ressource externe qu'il me manque, c'est les shaders avec ombrages. D'ailleurs, avec les geometry shader, il serait peut être intéressant de faire et animé une surface d'eau. Et voilà, j'ai encore une idée à travailler.^^
Je sais pas si ça vaut le coup que je présente mon projet, je verrai.
Edit : Si ça intéresse quelqu'un, je peux faire un tuto sur l'utilisation de LUA avec le C++ et sur l'utilité de scripter son projet. Mais étant donné que j'ai déjà mon projet à m'occuper, je ne le ferai que si ça intéresse vraiment quelqu'un. Sinon faudra attendre.^^
Dernière modification par johnplayer (07-09-2012 19:39:03)
Hors ligne
pas mal le splatting shader, sa rend bien, mais pourquoi limitter à 6 texture ? sur mon splatting a 2 alphamap j'ai 8texture argb*2 en utilisant l'invers de l'apha pour la 4eme texture
et pourquoi en deux pass ? c'est relativement simple de faire ceci en single pass ?
je suis tomber sur ça le mois dernier je pensse que sa intéresse tout le monde http://irrlicht.sourceforge.net/forum/v … ture+array
bon je pensse que l'on ne peut pas vraiment comparer étant donner que tu utilise le terrain d'irrlicht et pas moi qui est optimiser pour les landscapes à l'origine
j'arrive a 750fps sur le tien tout de même sympas
sur le mien j'ai 880fps sans lod (131K polygone)
tu pourrais donc énormémant gagner en passant en single pass
ps: je garde la surprise jusqu'a ce que je vous le présente pour le moment je regles un soucis de performance, le fps chute brusquement au dela de 1024 tiles, et j'aimerais rajouter quelque amélioration également
Hors ligne
Salut Magun,
Je connais déjà le tableau de texture, mais le soucis c'est qu'il n'est actuellement pas intégré à Irrlicht et qu'il faut modifier le moteur en interne pour que cela fonctionne. Ok c'est mieux, mais le soucis c'est qu'il n'est plus possible de bosser sur irrlicht version SVN avec ça à moins de remettre les mains dans le code source à chaque fois. Donc je cherche une éventuelle autre possibilité .
Cela dit merci quand même.
Hors ligne
entièrement d'accord ne pas profiter de la svn est un gros malus, j'att ça potentiel intégration de mon coté
Hors ligne
A titre d'essai Magun, je n'arrive pas à recompiler Irrlicht avec se patch, j'ai un souci sur le glTexImage3D et sur glTexSubImage3D, t'a fait comment toi pour passer outre cette erreur ?
Hors ligne
Bon j'ai recompilé Irrlicht au complet et maintenant le code source qu'il file en example ne se compile pas non plus....Son truc est tout de même bancale
Hors ligne
je n'est pas tester, la feature me semblais très intéréssante, notament pour la gestion des materiels 'complex' sur shader, comme pour le slappting, mais également pour architecturer les donner
sample2Darray diffuse
sample2Darray color
sample2Darray detail
sample2Darray effect (specular, glow, ...)
qui permet d'une par d'utiliser plusieur texture layer par 'material texture' et de ne pas être obliger de changer la valeur _IRR_MAX_MATERIAL_TEXTURE_ voir de recoder l'enum E_TRANSFORMATION_STATE pour dépasser la limiter des 8 textures
apperement on peut envisager 8192 texture par array d'après hendu sur le forum off
Hors ligne
Bon j'ai compilée tout, corrigé le plus gros et avec le textureArray ça bourrine pas mal, y'a un sacré gain..... A moi le shader de bump sur le splatting lol
Hors ligne
Tiens pour ceux qui veulent tester pour voir la différence de vitesse, c'est tout simplement hallucinant :
http://www.partage-facile.com/C065NWX0W … y.rar.html
Hors ligne
Aller un dernier exemple avec Splatting sur 6 textures, 2 alpha maps et 6 textures de bump pour Tmyke
http://www.partage-facile.com/0YSUJH61V … p.rar.html
Hors ligne
ça le fait comme on dit, beau boulot.
L'effet de bump est bien là, j'ai un fps constant (chez moi autour de 2200 ), voilà un beau moteur de terrain (même si j'ai cru que le ventilo de ma CV allait traverser la pièce).
Voilà ce qu'il faudrait à Irrlicht comme moteur de terrain en natif (entre autre chose)
Hors ligne
J'ai testé tout ce petit monde, voici la récap.
1 - Le splatting 6 textures en 2 passes
800x600 : average fps = 1028
1920x1080 : average fps = 660
2 - Le splatting array
800x600 : average fps = 3809 (légère différence^^)
1920x1080 : non-testé
3 - Le splatting array avec bump
800x600 : average fps = 2624 mais sacré problème d'affichage!
1920x1080 : non-testé
Désolé pour ton splatting avec bump Copland mais il y a clairement un truc qui passe pas chez moi. J'aurais voulu pouvoir tester les 2 autres en 1920x1080 pour comparer les perfs mais bon pas grave.
PS : Copland, si tu peux penser à m'envoyer un shader permettant l'ombrage (avec quelques commentaires dans le code de préférence ). Merci d'avance.
Hors ligne
Salut, je ne t'oubli pas johnplayer, il me faut modifier mon code original parce qu’il ne marchera pas chez toi, et je dois surtout te le commenter parce-que les coments c'est pas mon fort.
Sinon c'est bizarre que mon shader de bump ne marche pas chez toi alors qu'il fonctionnait bien lors de ma démo du dragon si je me souviens bien. Il va me falloir une carte NVidia pour débuguer ça je crois .
TMyke, ta remarque m'intrigue, j'ai moi aussi mon ventilo qui buffle à mort sur se genre de démo, ça vient du fait que le FPS est pas limité ou d'autre chose d'après toi ?
Hors ligne
Copland :
ça vient du fait que le FPS est pas limité ou d'autre chose d'après toi ?
pour moi cela vient bien en effet du frame rate qui n'est pas bridé, donc la carte s'emballe un peu. Rien de méchant.
D'ailleurs, à 2200 fps, on se dit que si la demo était callé sur la synchro (60 fps), la carte vidéo, avec une charge 36 fois moindre, sera cool raoul pour faire tourner le truc.
Hors ligne
Oui, en effet sur la demo du dragon je n'avais aucun problème et j'avais la même config. Dès que je peux, je testerai sur un autre PC avec une HD3850 pour voir comment elle réagit. Enfin, si elle supporte les shaders que tu as mis.
Et si tu pouvais mettre en partage tes deux exe texturearray et texturearray+bump compilé pour ouvrir la fenêtre en 1920x1080, je pourrais mettre les 2 framerates manquants et voir ainsi la différence de performance par rapport à la résolution.
Pour les commentaires dans les programmes, j'avais du mal aussi au début. Mais maintenant, écrire 5 lignes de code sans une ligne de commentaire est inconcevable pour moi. Il m'arrive de prendre des morceaux de code de programme que j'ai fait longtemps auparavant et franchement avec la dose de commentaire que je mets dans mes codes c'est super facile de s'y retrouver. Je mets en règle générale 1 ligne de commentaire pour 1 à 2 lignes de code. Mes codes sont de véritables romans.^^ Mais une chose est sûre, c'est que le gars qui ne comprends mon code a du soucis à se faire.^^
Edit : pour le problème avec le bump, je ne sais pas si ça peut t'aider mais les parties noires tournent en ronds. Est-ce que tu as mis une lumière qui tourne au-dessus du terrain? Parce que ça fait comme si une lumière tournait au-dessus du terrain et qu'elle projetait une ombre sur un terrain complètement illuminé. Dur de décrire ça mais j'ai fais ce que j'ai pu.
Dernière modification par johnplayer (10-09-2012 20:30:41)
Hors ligne
Voilà johnplayer, je t'ai refilé les références de chez Nvidia qui m'ont aidé à 95% et le code source en fichier joint par mail
EDIT:Pour info la modif avec les textures arrays cassent quelque chose au niveau des rendu en texture et mon code de shadow ne marche pas dessus, il faudra que je regarde ça de plus prêt.
Hors ligne
les sample2Darray ne peuvent être composer que de texture de même dimension, je ne sais pas si c'est la cause pour ton shadown map ...
Hors ligne
non magun rien à voir, mon code de shadow n'utilise pas le texture array. Ce que je veux dire c'est qu'au niveau du rendu en texture ça change quelque chose en interne et le rendu ne se fais plus correctement.Mauvais index ou mauvais layer du material je ne sais pas encore.
Hors ligne
J'ai regardé, j'ai fait quelques modifs mineures et rajouté des commentaires. C'est costaud comme truc!^^ Par contre, si j'ai bien compris, le rendu des shadows se fait sur 3 frames. Parce qu'il me semble qu'il y a 3 passes et que l'on appelle renderShadow 1 fois par frame. Et ces 3 passes correspondent à trois zones (proche de l'écran, distance moyenne et distance lointaine), calculées dans updateSplitDist(). Et les profondeurs Z sur chacune de ces zones sont répertoriées sur ces fameuses dephtmap[0 à 2].
Si j'ai bon, c'est que j'ai compris le principe... Au prix d'une indigestion de matrices.^^ Ah, j'ai comparé la qualité des ombres avec une shadowmap en 4096px² et 2048px², et au vu des résultats il est plus avantageux de faire un initshadow en 2048. Je vais me pencher un peu plus dessus et continuer à commenter tout ça.
En tout cas, je suis super content!^^ De plus, les liens que tu m'as donnés m'ont permis de trouvé d'autres trucs intéressants. J'avais fait des recherches mais quand on utilise les mauvais termes, on ne trouve rien de pertinent. Par contre, je pense que la partie math et carrément au-dessus de mon niveau.^^
Hors ligne
Salut JohnPlayer, la partie math est aussi au dessus de mon niveau bien que j'ai réussi à corriger le code grâce aux formules de calcul matriciel piochées à droite et à gauche sur le net, mais j’avoue que c'est vraiment galère.
Sinon oui t'a bien compris, les 3 depthmaps sont calculées une par frame .
Que dire de plus, le bazar à été codé dans le cadre de rendu multipasse pour plusieurs shaders cumulés, donc il te faudra sans doute corriger 2 ou 3 oublis de ma part, j'ai essayé de t'adapter le code principal au plus simple possible après à toi d'épurer ce qu'il te servira ou te servira pas.
J'ai aussi modifier le code du shader pour prendre la première texture comme tu m'avais demandé, mais moi je n'utilise pas de canaux de textures diffuse dans se shader d'ou la fonction qui permet de remettre les materials à l'original. En fait je fais un rendu des shadows avec des modèles blanc et ombre noir dans un render texture flouté appliqué à ma scene pour pouvoir utiliser un tas de shader derrière .
Et heu un truc que j'ai pas commenté dans le shader c'est le percentage closer filtering, je l'ai mis que sur la première texture de depthmap mais tu peux le modifier sur les trois, c'est juste que j'en voyais pas vraiment l'utilité.
Voilà, si t'a des questions n'hésite pas à me joindre directement par mail aussi .
Hors ligne