Moteur Voxel et de l'Optimisation
Récemment, j'ai commencé à développer le moteur voxel. Ce dont j'ai besoin est à seulement coloré voxels sans texture, mais en très grande quantité (beaucoup plus petite que minecraft) - et la question est de savoir comment mettre en scène très rapide? Je suis à l'aide de c#/xna, mais c'est à mon avis pas très important dans ce cas, parlons-en cas généraux. Regardez ces deux jeux:
En particulier, je pense que la vidéo numéro 2 représente un excellent méthodes d'optimisation (ma carte gfx commence étouffement juste à 192 x 192 x 64) la Façon dont ils atteindre cela?
Ce que je voudrais avoir dans le moteur:
- coloré voxels sans texture, mais ombragée
- beaucoup, beaucoup de voxels, disons minimum de 512 x 512 x 128 pour obtenir quelque chose comme la vidéo #2
- ombres (lisse ombres seront très grand, mais il n'est pas nécessaire)
- en option: éclairage dynamique (par exemple à partir de boules de feu volant, où la lumière jusqu'à près de voxel structures)
- framerate minimum de 40 FPS
- caméra avez 3 façons de liberté (se déplacer dans l'axe des x, se déplacer dans l'axe des y, déplacer dans l'axe z), pas de rotation de la caméra est nécessaire
- enfin fonctionnalité optionnelle peut être la Profondeur de Champ (il sera doux ^^ )
Ce que l'optimisation, j'ai déjà savoir:
- supprimer invisible voxels qui réside à l'intérieur de voxel structure (couvert
à partir de six directions par d'autres voxels)- supprimer les visages cachés de voxels - parce que la caméra n'avons pas de rotation et de toujours regarder aslant en avant comme en PPT jeux, donc si on divise l'écran
en coupe verticale, à gauche de voxels de droite et de voxels montrent seulement 3 faces - garder les voxels dans le Dictionnaire au lieu de 3-dimensions de la matrice de sauts travers le tableau de taille 512 x 512 x 128 prend millisecondes qui est
inacceptable - mais dictionnaire int:couleur int décrit emballé
La position 3D est beaucoup beaucoup plus rapide - utilisez l'instanciation où applciable
- de l'occlusion? (comment faire?)
- espace divisant /octtree (est-ce une bonne idée?)
- supprimer les visages cachés de voxels - parce que la caméra n'avons pas de rotation et de toujours regarder aslant en avant comme en PPT jeux, donc si on divise l'écran
Je serai très reconnaissant si quelqu'un me donner un conseil pour améliorer les optimisations énumérés ci-dessus ou d'échanger des idées, de nouvelles améliorations. Grâce
OriginalL'auteur komorra | 2011-10-12
Vous devez vous connecter pour publier un commentaire.
1) Voxatron utilise un moteur de rendu logiciel plutôt que le GPU. Vous pouvez lire quelques détails à ce propos, si vous lisez les commentaires de ce blog:
http://www.lexaloffle.com/bbs/?tid=201
Je n'ai pas regardé en détail moi-même ne peut donc pas vous en dire beaucoup plus que cela.
2) je n'ai jamais joué 3D Dot Game Heroes, mais je n'ai pas de raison de croire qu'elle utilise des voxels. Je veux dire, je ne vois pas de cubes être ajoutés ou supprimés. Le plus probable, c'est juste une statique polygon mesh avec une belle texture appliquée.
Que pour la mise en œuvre elle-même, de ne pas essayer de dessiner le monde en rendant les cubes que c'est très lent. Au lieu de cela, vous devriez traiter le volume et générer des maillages couché sur l'intersection de solides voxels et les vides. Pause le volume approprié de la taille des régions (par exemple, 32x32x32) et de générer un maillage pour chaque.
J'ai écrit un livre, un article sur ce qui pourrait vous être utile. C'est en fait en douceur voxel terain mais un grand nombre de principes stll appliquer.
Vous pouvez le lire sur Google livres ici: http://books.google.com/books?id=WNfD2u8nIlIC&lpg=PR1&dq=game%20engine%20gems&pg=PA39#v=onepage&q&f=false
Et vous pouvez trouver le code source ici: http://www.thermite3d.org
OriginalL'auteur PolyVox
Puisque vous êtes à l'aide de XNA, vous pouvez simplement utiliser l'instanciation pour obtenir l'effet désiré: http://www.float4x4.net/index.php/2010/06/hardware-instancing-in-xna/
http://roecode.wordpress.com/2008/03/17/xna-framework-gameengine-development-part-19-hardware-instancing-pc-only/
Le concept sous-jacent est l'instanciation: cette fonction vous permet de spécifier une certaine quantité de répéter l'information et une certaine quantité de données variant dans un seul
DrawIndexedPrimitive
appel. Dans votre cas, l'instance de flux serait une seule et unique boîte solide, et l'autre volet serait la transformation et de la couleur de l'information.OriginalL'auteur MSN