Forums Développement Multimédia

Aller au contenu

Voxel, activité fun pour le week-end

DETENTE

60 réponses à ce sujet

#46 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 26 March 2012 - 09:45 AM

Bonjour lezard.

Je vais te montrer le code avec beaucoup de plaisir.
Je n'ai pas codé ce w-e mais j'ai réfléchi à la gestion de l'altitude de l'horizon et je pense avoir trouvé une solution.
Je mets juste ça en place et je nettoie.

Je vais préparer 2 ou 3 versions pour commencer par une version allégée et finir par la version actuelle, sinon, j'aurais du mal a expliquer. Je me donne la semaine maximum pour ça.
A moins que tu ne sois habitué à entrer dans du code brouillon et dans ce cas, je peux déjà te filer le tout en l'état… Ce qui ne m'empêcherait pas de passer la semaine à faire le point et le ménage.

#47 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 26 March 2012 - 11:46 AM

[mode chieuse] Un truc me surprend tout de même : pas de sources (ou j'ai raté un message :roll: )… ça sert à quoi alors ?


[mode courageuse] :arrow: :arrow: :arrow:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#48 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 26 March 2012 - 16:34 PM

Ça sert à donner envie :) Mais je l'ai dit, cette semaine c'est nettoyage et postage du code, donc, va y avoir source, avec un minimum d'explications pour que ce soit compréhensible sinon, Ça me semble inutile.


En attendant, tu peux aller voyager sur la version ou l'on peut choisir la géologie du terrain
http://ftp.i10.fr/_f...r/v3/voxel.html

#49 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 26 March 2012 - 18:54 PM

Voir le messagedldler, le 26 March 2012 - 16:34 PM, dit :

En attendant, tu peux aller voyager sur la version ou l'on peut choisir la géologie du terrain
http://ftp.i10.fr/_f...r/v3/voxel.html
La vache, c'est super réussi tous ces terrains différents :roi:

#50 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7015 messages

Posté 26 March 2012 - 18:57 PM

Je confirme ... ça dépote :Hola:

#51 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 26 March 2012 - 21:18 PM

Je confirme : même pas mal ! :P



;)

[en revanche… bouhhhh le ventilo… )
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#52 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 30 March 2012 - 16:33 PM

'Soir à tous.

Une semaine difficile, avec une petite famille toute patraque et les parents pas mieux… J'ai fait ce que j'ai pu…

J'ai commencé quelques articles sur un blog mediabox dédié aux voxels .
Si certains veulent les cléfs pour ajouter des articles, compléter ou corriger l'existant, n'hésitez pas.

Pour l'instant c'est vraiment niveau débutant.
Enfin, ça peut toujours vous aider à comprendre mon esprit tortueux de simplicité… :D Au bout de quelques articles, ça devrait déboucher sur ma classe Voxel.

Disons :
  • Rendu volumétrique - 3 - optimisations
  • Rendu volumétrique - 4 - enrichissements
  • Rendu volumétrique - 5 - cas concret ( << ici la classe)
Pour ceux qui n'ont pas peur d'y aller sans plus d'explications, je vous mets un exemple en pièce jointe, parce que la classe de base de calcul du rendu volumétrique est propre et commenté. J'ai encore quelques doutes sur les noms de variables… mais ça me semble abordable. En tous cas, beaucoup moins esothérique que vendredi dernier. Les notions d'altitude de la caméra et de l'horizon commencent à bien mieux répondre.

Par contre, ne soyez pas déçu.
Dans l'exemple, je n'ai pas mit le générateur de la map.
Déjà parce que c'est un autre sujet, mais surtout parce que là, je n'ai pas eu le temps de faire le nettoyage et c'est un morceau un peu plus costaud que la mise en volume. Mais c'est presque prêt, ça viendra la semaine prochaine.

En tous cas, pour ceux qui veulent regarder le code de la classe Voxel, elle contient la boucle principale qui travaille pendant l'animation, celle qui pompe 80% des ressources.

Voilà le code de la classe au complet :


package voxel_dd{
import flash.display.BitmapData;
import flash.geom.Rectangle;
public class Voxel extends BitmapData {
  /*
  ** PARAMETRES
  */

  private var _width:int;
  private var _height:int;
  private var _relief:BitmapData;// Fournit les datas sur les altitudes
  private var _geologie:BitmapData;// Fournit les datas sur l'aspect du terrain
  private var _camera:int;// Altitude de vue
  private var _mer:int;// Altitude le l'eau
  private var _horizon_visible:int;// Horizon visible (le bout de la brume)
  private var _focale:Number;// Définit la proportion de profondeur de champ des données
  /*
  ** VARIABLES DE CALCUL
  */

  private var _x:int = 0;
  private var _y:int = 0;
  private var _z:int = 0;
  private var _couleur:uint;
  private var _hauteur_apparente:int;
  private var _horizon_sous_marin:int;
  private var _vector_relief:Vector.<uint>;
  private var _vector_geologie:Vector.<uint>;
  private var _vector_image:Vector.<uint>;
  private var _colonne_:Rectangle;
  /*
  * TABLEAUX DE VALEURS PRé-CALCULéES
  */

  private var _eloignement:Vector.<Number>;
  private var _sol:Vector.<int>;
  /*
  ** CONSTRUCTEUR
  */

  public function Voxel (
  $width:int,
  $height:int,
  $relief:BitmapData,
  $geologie:BitmapData,
  $camera:int=0x188,
  $mer:int=300,
  $horizon_visible:int=0,
  $focale:Number=3
  ):void {
   // La class Map étend la classe BitmapData
   super ($width,$height,false);
   // Stockage des paramètres
   _width = $width;
   _height = $height;
   _relief = $relief;
   _geologie = $geologie;
   _camera = $camera;
   _focale = $focale;
   _horizon_visible = $horizon_visible;
   // Préparation du vector stockant les calculs temporaires
   _vector_image = new Vector.<uint>($height,true);
   // Pré-calcul des éloignements et des horizons
   _horizon_sous_marin = _horizon_visible-_mer*(1-1/_focale);
   _eloignement = new Vector.<Number>(_height,true);
   _sol = new Vector.<int>(_height,true);
   for (_z; _z<_height; _z++) {
    _eloignement[_z]=1-(_z/_height)/_focale;
    _sol[_z]=_horizon_sous_marin*(_z/_height)-_camera*(1-(_z/_height));
   }
  }
  /*
  ** RENDU DU VOXEL
  */

  public function update ():void {
   lock ();
   // On travaille pour chaque colonne
   for (_x=0; _x<_width; _x++) {
    _y = 0;
    // On récupère les colonnes de _relief et _geologie
    // dans des vecteurs pour accélerer les calculs
    _colonne_ = new Rectangle(_x,0,1,_height);
    _vector_relief = _relief.getVector(_colonne_);
    _vector_geologie = _geologie.getVector(_colonne_);
    // On parcourre les données de relief à la recherche d'une altitude visible
    for (_z=0; _z<_height; _z++) {
         // Calcul de l'altitude apparente en fonction de l'éloignement
         _hauteur_apparente = (_vector_relief[_z]&0xFFF)*_eloignement[_z] + _sol[_z];
         // On ne dessine pas les altitudes supérieures à la hauteur de l'image
         if (_hauteur_apparente > _height) {
          _hauteur_apparente = _height;
         }
         // On dessine le voxel entre _y et la hauteur apparente
         for (_y; _y<_hauteur_apparente; _y++) {
          _vector_image[_y] = _vector_geologie[_z];
         }
    }
    // S'il reste des _y, on remplit avec le ciel
    for (_y; _y<_height; _y++) {
         _vector_image[_y] = 0xAACCFF;
    }
    // On remplit la colonne du bitampData avec le vector
    setVector (_colonne_,_vector_image);
   }
   unlock ();
  }
}
}
 

C'est celle qui tourne ici : version_la_plus_optimisée

L'exemple contient une image d'altitudes et sa correspondance en terrain, ça devrait aider à comprendre :)
Je suis dispo entre 2 aspirines pour répondre aux questions. Le soir après le grog, je ne serai plus en état :D

S'il y a des impatients qui veulent tout le projet en l'état, n'hésitez pas à demander en MP.


A lundi.

Fichier(s) joint(s)

  • Fichier joint  exemple.zip   869.23 Ko   6 téléchargement(s)


#53 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 02 April 2012 - 14:26 PM

Avec l'esprit éclairci par la rédaction des premiers articles explicatifs, mais aussi par quelques degrés de température en moins, je me retrouve à replancher ma classe voxel pour une enième optimisation.

Le principe m'est apparu tout à coup, je ne sais pas pourquoi je n'y ai pas pensé avant…
Tous mes calculs se faisant sur les colonnes d'y, je construit et déconstruit des vectors non continus sur les bitmaps data.
Ces vectors doivent récupérer les pixels {0,width,width*2,width*3…} etc J'ai soupçonné que c'était plutôt long.

Evidemment, si je calculais sur le x, j'aurais des vectors consécutifs : {0,1,2,…} Sans doute plus rapide…

Mmmmm. :D Ni une, ni 2, je penche la tête et je décide que je peux très bien dessiner mon voxel sur les y. J'aurai un résultat à 90°, et je devrai appliquer une rotation au conteneur principal, mais ça, ça remplacera une rotation à 180° donc, pas de souci…
Premiers tests plutôt concluants (je frôle les 50 ips sur ma machine au boulot, avant je plafonnais à 37)…
Par contre, ça cause d'autres soucis… je me retrouve avec une vue de face par rapport aux ombres et c'est beaucoup moins joli. Je dois refaire aussi mes bidouilles de perspective pour lesquelles je souffre beaucoup. Mon esprit est en 2 dimensions seulement :(

#54 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 06 April 2012 - 09:49 AM

up.

Difficilement, mais avec un peu de réussite… maintenant, on tourne.

Et le fps m'a l'air toujours bon… voir mieux ?
Ici, je monte à 50…

http://ftp.i10.fr/_f...dier/voxel.html

je vais faire une pause, donc sans doute me mettre à la rédaction des articles sur le blog.

++

PS : avec la pièce jointe dans le message, c'est mieux :)


- Afficher le SWF -
Fichier joint  voxel.swf   644.27 Ko   9 téléchargement(s)

#55 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 10 April 2012 - 18:21 PM

:)

Oui… je ne lâche pas l'affaire…

;-)

Bon, premiers essais en camera volante.
Ça commence à ressembler à quelque chose…
C'est juste dommage que je n'ai pas trouvé comment réduire mon cône de vision d'avantage.


http://ftp.i10.fr/_f...r/v5/index.html

#56 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7015 messages

Posté 10 April 2012 - 18:52 PM

Ça marche plutôt bien bravo.
Petits bugs sur la hauteur, parfois la caméra "saute".

Dans la série tests divers, ce serait amusant de voir si on peut appliquer le principe avec par exemple du Google Map (vue satellite), ou plus généralement avec des images de terrain à plat... (je suis déjà dehors....).

#57 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 11 April 2012 - 11:58 AM

Hello Mr Spi.

Je ne sais pas pour quel usage tu penses à ça.
Du coup, je dirais non.
Ce que je fais est très limité…

Pour obtenir quelque chose d'intéressant, il faut une très bonne carte des altitudes… ce qui est rare à trouver. Elles sont souvent encombrées des ombrages…

J'ai réussi à composer un massif central à partir des fonds de carte proposés ici :
http://maps.ngdc.noa...ers/bathymetry/
Mais je crois que j'ai aussi utilisé l'image proposée par Le Lézard, vers le début du sujet. Je ne sais pas comment il l'a obtenu. Sur le site cité, je n'arrive pas à supprimer les légendes et transparences…

Au final, j'ai composé avec différentes couches sous photoshop pour ressortir cette carte des reliefs :
Image attachée: _relief2.png

A partir de là, on peut l'associer à ce qu'on veut :
géologie (la source vient de NOAA, enrichie par les autres fonds de carte)
Image attachée: massif_central_geologie.png
Le résultat est ici :
http://ftp.i10.fr/_f...if_central.html

Plus rigolo mais toujours aussi inutile :
cartographie (source NOAA type National Geographic)
Image attachée: _carte.png
le résultat est là :
http://ftp.i10.fr/_f...tral_carte.html

#58 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7015 messages

Posté 11 April 2012 - 13:28 PM

Citation

Je ne sais pas pour quel usage tu penses à ça.

Aucun en particulier, c'était juste pour le fun.

Citation

cartographie (source NOAA type National Geographic)


Celui là je l'aime bien, j'adore le principe des noms gravés directement dans le sol.



EDIT : tient si tu veux j'ai trouvé une heighmap de la terre ici : http://face2face.gra...-voxels-part-1/

#59 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 02 May 2012 - 11:34 AM

Hello.

Il y avait longtemps :)

Depuis une semaine, je me disperse un peu sur un autre sujet parallèle.

Je recentre donc un peu ici, puisque j'ai une nouvelle version du moteur de perspective.

Au début, je voulais bosser sur une nouvelle version, plus qualitative, quitte à abandonner les déplacements en temps réel.
Les débuts sur la perspective n'étant pas si ridicules au niveau des perfs, j'ai quand même tenté une transplantation rapide, qui donne ceci :

Pour les grosses configs (dernière version du player conseillée) :


- Afficher le SWF -
Fichier joint  mouve.swf   562.61 Ko   10 téléchargement(s)

Pour les plus petites :


- Afficher le SWF -
Fichier joint  mouve_petit.swf   212.65 Ko   11 téléchargement(s)


Au final, je suis très content de la perspective, plus immersive et relativement précise.
Par contre, un peu déçu des effets de bandes pixellisées clignotantes sur la géologie…

Je serais heureux d'avoir vos avis.
Je prends aussi les perfs du fps au passage… :-)

Merci.

#60 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 02 May 2012 - 17:26 PM

move swf se stabilise autours de 14/15 sur mac OSX 2.66 GHz Intel core duo (tu devrais t'en faire un post-it ds un coin, je vais pas le copier à chaque fois non plus :D :P)

l'autre c'est 34


++ :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#61 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7015 messages

Posté 02 May 2012 - 17:38 PM

Yop,

Ma machine de test :

AMD Quad Core 2,60 Ghz
4 Go Ram
Carte graphique Radeon HD 4600
Firefox 12.0
Flash player 11

Perfs sur le premier : 12 fps (stable)
Perfs sur le second : 42 fps (stable)

Bravo tu as presque un petit simulateur de vol, suffirait de remplacer les commandes à la souris par des commandes clavier, voire un tableau de bord et tu as un truc sympa ;-)

Bon courage.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)