Voilà ça fait pas mal de temps que j'en parle, j'avais posté une petite ébauche et bien je vous propose de voir ce que ça donne ce rendu de terrain.
Pour récapituler, il peut charger les heightmaps comme Irrlicht (les fichiers en nuance de gris quoi), ou encore les raw (les tableaux de flottants si vous préférez, enfin de bytes dans le fichier)... Il gère le LOD d'une manière qui est supposée être intelligente, puisqu'il prégénère son LOD (la génération prend vraiment des siècles, .NET et non-optimisation oblige), ce qui fait qu'il ne génère plus rien au rendu (donc gain en calcul).
Il est assez moche au niveau du code donc je le post pas vraiment (si ça intéresse quelqu'un, qu'il me le demande, je lui donnerai et il l'aura bien mérité s'il comprend quoi que ce soit ).
Dans ce petit exemple que je vous ai fait, il génère un terrain très vaste avec du Perlin Simplex Noise (j'utilise le code d'une SceneNode qui est dans la librairie d'extensions d'Irrlicht .NET CP) et le subdivise en 25 petits terrains, pour optimiser les calculs et l'affichage... Ensuite, la texture elle est gérée par un shader.
L'exemple se trouve ici (.NET 2.0 comme d'habitude, mais cette fois DirectX, HLSL oblige, désolé pour les amis de Linux, mais chez moi OpenGL a du mal à dépasser les 15 fps quand DirectX en fait 200 alors ça devient impratiquable).
Si vous voulez voir le travail du LOD, mettez vous en Wireframe (touche W) et jouez avec la distance de vue (touches R/F), vous verrez la différence visible en Wireframe mais invisible normalement, avec une optimisation de 16 000 polys vers 400.
Et pour les flémards, quelques screens même si le WriteImageIntoFile d'Irrlicht les a vraiment rendu horribles.
Voilà, n'hésitez pas à me donner des idées/ des heightmaps
PS : Il faudrait une section pour ces petits logiciels qui ne sont pas vraiment des projets, non ?
Arf j'aurrai vraiment aimé l'essayer mais ça marche pas je me prends une exception dans la gueule...doit me manquer une assembly je suis sous vista.
Sinon y'a moyen d'avoir le code source ou tu gères le shader pour le texturage parceque cette partie m'interresse beaucoup pour mon moteur de terrain ^_^.
Hors ligne
Ouvres juste le fichier terrain.hlsl C'est archi basique comme manière de faire mais ça marche pas trop mal.
Hors ligne
Oui pour le fichier hlsl je l'avais bien vu, mais moi je voulais de l'aide concernant l'utilisation du shader sous irrlicht car je ne les ai encore jamais utilisé sur se moteur et vu que tu te propose à partager ton code source ...
Hors ligne
Bah il existe un tutoriel qui montre comment utiliser les shaders avec Irrlicht (c'est l'un des tutos officiels)
Ensuite, il faut définir les variables du shader dans le ShaderSet, c'est moi ça ressemble à ça :
Matrix4 world = _driver.GetTransform(TransformationState.World); Matrix4 worldViewProj; worldViewProj = _driver.GetTransform(TransformationState.Projection); worldViewProj *= _driver.GetTransform(TransformationState.View); worldViewProj *= world; services.SetVertexShaderConstant("mWorldViewProj", worldViewProj.ToShader()); services.SetVertexShaderConstant("TerrainHeight", 255f); services.SetVertexShaderConstant("FogDistance", _scene.ActiveCamera.FarValue); services.SetVertexShaderConstant("cameraPos", _scene.ActiveCamera.AbsolutePosition.ToShader()); services.SetVertexShaderConstant("mWorld", world.ToShader());
Car DirectX/HLSL nécessite qu'on lui passe en paramètre la matrice WorldViewProj (alors qu'OpenGL/GLSL l'obtient directement dans le shader).
Si tu veux plus d'infos, tu peux toujours télécharger le .NET Reflector et l'utiliser sur l'appli
Dernière modification par DeusXL (20-04-2007 07:07:27)
Hors ligne
Coucou,
Bon j'ai réussi à utiliser ton shader sauf que mes textures font des carrés partout, tu sais peut être d'ou ça peut provenir ?
Voici en image le bug :
Hors ligne
C'est bon j'ai trouvé, c'était juste le gouraudshading que j'avais mis à False
Hors ligne
eyh eh regardez les horaires de Copland :
Hier 20:36:09 et Aujourd'hui 04:23:58
en gros il a cherché son bug toute la nuit et en plus il l'a trouvé, franchement, respect
Hors ligne
op voilà le résultat après rectification
Et un pti merci à DeusXL pour son aide et son shader .
Hors ligne
tiens t'as plus le bug de frustum culling?
Sinon pète bien le screen
Hors ligne
Na terminé le bug ça venait simplement de l'automatic culling qui prend par défaut une box :p
Hors ligne
Très beau screen Copland Si vous voulez la source, je l'uploaderai, elle traîne par là, suffit de le demander :p
Hors ligne
Salut,
As-tu testé se shader en GLSL?
J'ai regardé avec le tool HLSL2GLSL mais je comprends pas bien le code qu'il me sort vu qu'il le coupe en 2 partie pixelMain et vertexMain.
Hors ligne
Le GLSL prends un fichier par shader, et non un fichier par les deux.
Alors je réfléchis, oui le shader peut passer facile en GLSL, aucun problème, mais j'ai un peu la flème :p
Hors ligne
Ok je voulais juste comprendre pourquoi deux fichiers donc ça parrait plus clair maintenant, merci de la précision.
Je tenterai sans doute une conversion, et si j'arrive à quelque chose de propre je mettrai le code du shader ici même .
J'ai modifié la façon dont le shader texture le sol pour ne pas avoir une detailmap mélangé car je trouvais ça pas très jolie.J'ai également modifié la façon dont le fog apparait car je le trouvé trop dense, et trop pret de la cam donc le shader glsl si j'y arrive sera un tout petit peu différent, mais dans le principe de fonctionnement se sera sans doute pareil.
Voilou @++
Hors ligne
Coucou
Alors j'ai avancé sur la conversion GLSL mais j'ai quand même un problème, ne connaissant pas spécialement les shaders, je n'arrive pas à avoir toute les textures en GLSL, il ne prend que la texture assigné au layer 0, mais pas les autre...
Connais tu la solution DeusXL ?
Hors ligne
Ok plus la peine en fait j'ai trouvé c'était tout con, ça à l'air de bien fonctionner
Hors ligne
Pages: 1