Rendu de terrain optimisé
Propos par DeusXL

le mercredi 18 avril 2007 00h 31mn 43s

11372 visualisations

Dconseill aux moins de 3 ans
illustration


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 rcapituler, il peut charger les heightmaps comme Irrlicht (les fichiers en nuance de gris quoi), ou encore les raw (les tableaux de flottants si vous prfrez, enfin de bytes dans le fichier)... Il gre le LOD d'une manire qui est suppose tre intelligente, puisqu'il prgnre son LOD (la gnration prend vraiment des sicles, .NET et non-optimisation oblige), ce qui fait qu'il ne gnre plus rien au rendu (donc gain en calcul).

Il est assez moche au niveau du code donc je le post pas vraiment (si a intresse quelqu'un, qu'il me le demande, je lui donnerai et il l'aura bien mrit s'il comprend quoi que ce soit big_smile).

Dans ce petit exemple que je vous ai fait, il gnre un terrain trs 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 gre par un shader.
L'exemple se trouve ici (.NET 2.0 comme d'habitude, mais cette fois DirectX, HLSL oblige, dsol pour les amis de Linux, mais chez moi OpenGL a du mal dpasser 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 diffrence visible en Wireframe mais invisible normalement, avec une optimisation de 16 000 polys vers 400.
Et pour les flmards, quelques screens mme si le WriteImageIntoFile d'Irrlicht les a vraiment rendu horribles.

Voil, n'hsitez pas me donner des ides/ des heightmaps big_smile

PS : Il faudrait une section pour ces petits logiciels qui ne sont pas vraiment des projets, non ?


#1 

18-04-2007 21:14:04

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 gres le shader pour le texturage parceque cette partie m'interresse beaucoup pour mon moteur de terrain ^_^.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#2 

19-04-2007 21:57:06

DeusXL
Abonn
Lieu: Paris
Date d'inscription: 27-09-2006
Messages: 174

Ouvres juste le fichier terrain.hlsl smile C'est archi basique comme manire de faire mais a marche pas trop mal.

Hors ligne


#3 

19-04-2007 22:55:09

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 big_smile ...


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#4 

20-04-2007 07:06:43

DeusXL
Abonn
Lieu: Paris
Date d'inscription: 27-09-2006
Messages: 174

Bah il existe un tutoriel qui montre comment utiliser les shaders avec Irrlicht (c'est l'un des tutos officiels) big_smile

Ensuite, il faut dfinir les variables du shader dans le ShaderSet, c'est moi a ressemble a :

Code:

                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 ncessite qu'on lui passe en paramtre la matrice WorldViewProj (alors qu'OpenGL/GLSL l'obtient directement dans le shader).

Si tu veux plus d'infos, tu peux toujours tlcharger le .NET Reflector et l'utiliser sur l'appli big_smile

Dernire modification par DeusXL (20-04-2007 07:07:27)

Hors ligne


#5 

21-04-2007 20:36:09

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Coucou,
Bon j'ai russi utiliser ton shader sauf que mes textures font des carrs partout, tu sais peut tre d'ou a peut provenir ?

Voici en image le bug :
http://www.tv3dfr.com/irrlicht/Terbug.jpg


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#6 

22-04-2007 04:23:58

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

C'est bon j'ai trouv, c'tait juste le gouraudshading que j'avais mis False wink


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#7 

22-04-2007 10:07:42

Jerry Kan
Habitu
Date d'inscription: 21-11-2006
Messages: 265

eyh eh regardez les horaires de Copland big_smile :

Hier 20:36:09 et Aujourd'hui 04:23:58

en gros il a cherch son bug toute la nuit lol et en plus il l'a trouv, franchement, respect  cool

Hors ligne


#8 

22-04-2007 12:40:24

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

op voil le rsultat aprs rectification smile
http://www.tv3dfr.com/irrlicht/Land.jpg
Et un pti merci DeusXL pour son aide et son shader wink.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#9 

22-04-2007 14:00:00

izguit
Administrateur
Lieu: 127.0.0.1
Date d'inscription: 14-09-2006
Messages: 306
Site web

tiens t'as plus le bug de frustum culling?
Sinon pte bien le screen smile


Athlon 64 3000+ // 1Go RAM // Geforce 6600GT 128Mo
Turion 64 X2 // 1Go RAM // ATI X1250

Hors ligne


#10 

22-04-2007 14:40:22

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Na termin le bug a venait simplement de l'automatic culling qui prend par dfaut une box :p


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#11 

22-04-2007 19:29:11

DeusXL
Abonn
Lieu: Paris
Date d'inscription: 27-09-2006
Messages: 174

Trs beau screen Copland smile Si vous voulez la source, je l'uploaderai, elle trane par l, suffit de le demander :p

Hors ligne


#12 

23-04-2007 21:09:40

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#13 

23-04-2007 21:27:54

DeusXL
Abonn
Lieu: Paris
Date d'inscription: 27-09-2006
Messages: 174

Le GLSL prends un fichier par shader, et non un fichier par les deux.
Alors je rflchis, oui le shader peut passer facile en GLSL, aucun problme, mais j'ai un peu la flme :p

Hors ligne


#14 

23-04-2007 23:59:30

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Ok je voulais juste comprendre pourquoi deux fichiers donc a parrait plus clair maintenant, merci de la prcision.
Je tenterai sans doute une conversion, et si j'arrive quelque chose de propre je mettrai le code du shader ici mme smile.
J'ai modifi la faon dont le shader texture le sol pour ne pas avoir une detailmap mlang car je trouvais a pas trs jolie.J'ai galement modifi la faon 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 diffrent, mais dans le principe de fonctionnement se sera sans doute pareil.
Voilou @++


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#15 

25-04-2007 19:13:18

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Coucou
Alors j'ai avanc sur la conversion GLSL mais j'ai quand mme un problme, ne connaissant pas spcialement 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 ?


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#16 

25-04-2007 19:34:17

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Ok plus la peine en fait j'ai trouv c'tait tout con, a l'air de bien fonctionner smile


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


Options Liens officiels Caractristiques Statistiques Communaut
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propuls par FluxBB
Traduit par FluxBB.fr
Analys par
872 membres
1423 sujets
11109 messages
Dernier membre inscrit: Glider
11 invits en ligne
Aucun membre connect
RSS Feed

[ Gnre en 0.034 sec., 11 requtes excutes ]