Rendu de terrain optimisé
Proposé par DeusXL

le 18 April 2007 à 00h 31mn 43s

23062 visualisations

Déconseillé 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 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 big_smile).

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 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 gères 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 manière de faire mais ça marche pas trop mal.


Fanatique d'Irrlicht + Fanatique de Mono + Fanatique de Linux => Créateur d'Irrlicht .NET CP bien sûr !
Version actuelle d'Irrlicht .NET CP : 0.8, Version en test : 0.9.

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 définir 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 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 big_smile

Dernière modification par DeusXL (20-04-2007 07:07:27)


Fanatique d'Irrlicht + Fanatique de Mono + Fanatique de Linux => Créateur d'Irrlicht .NET CP bien sûr !
Version actuelle d'Irrlicht .NET CP : 0.8, Version en test : 0.9.

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 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 :


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 résultat après rectification smile

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 pète 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 défaut 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

Très beau screen Copland smile Si vous voulez la source, je l'uploaderai, elle traîne par là, suffit de le demander :p


Fanatique d'Irrlicht + Fanatique de Mono + Fanatique de Linux => Créateur d'Irrlicht .NET CP bien sûr !
Version actuelle d'Irrlicht .NET CP : 0.8, Version en test : 0.9.

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 réfléchis, oui le shader peut passer facile en GLSL, aucun problème, mais j'ai un peu la flème :p


Fanatique d'Irrlicht + Fanatique de Mono + Fanatique de Linux => Créateur d'Irrlicht .NET CP bien sûr !
Version actuelle d'Irrlicht .NET CP : 0.8, Version en test : 0.9.

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 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 smile.
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 @++


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 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 ?


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 Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
77 invités en ligne
Aucun membre connecté
RSS Feed