L'éclairage dans un monde minecraftien


10

Minecraft est un jeu qui est largement basé sur une carte de hauteur et utilise ces informations de carte de hauteur pour inonder le monde de lumière. D'après ma compréhension, le point le plus élevé de la carte des hauteurs est la fin de la zone influencée par la lumière du soleil. Tout ce qui est au-dessus est éclairé par la lumière du soleil, tout ce qui est juste en dessous est influencé par la lumière à proximité dans un rayon de 8 blocs.

Ainsi, si vous avez une île flottante au sommet de votre monde, tout ce qui se trouve en dessous sera essentiellement considéré comme une grotte. Lorsque deux lumières influencent le même point, la lumière la plus brillante l'emporte (incertain à ce sujet).

Quoi qu'il en soit, il y a quelques problèmes avec le modèle d'éclairage des mini-métiers: tout d'abord, si votre monde n'a pas de carte de hauteur, il devient plus difficile de comprendre ce qui est censé émettre la lumière du soleil et ce qui ne l'est pas. Un moyen simple serait de supposer que le monde est (dans mon cas) un rocher flottant, puis de traverser chaque axe dans les deux sens et de déterminer où le rocher commence et se termine. Mais cela n'élimine pas complètement le problème car les bosses dans la roche ne sont pas censées être dans l'obscurité.

Minecraft lui-même mettra en cache les informations de lumière dans ses morceaux avec les informations sur le matériau d'un bloc. Ainsi, seulement si le monde est modifié, l'éclairage doit être mis à jour. Malheureusement, ce processus est encore assez lent sur les mises à jour et sur les changements rapides de lumière, on peut voir le retard d'éclairage. Cela est particulièrement vrai si beaucoup de blocs changent (TNT, coucher de soleil, etc.) et que vous n'utilisez pas l'ordinateur le plus rapide (ou Java sur Mac).

De ma compréhension encore limitée de l'éclairage graphique 3D, un monde comme minecraft ne devrait pas être le plus gros problème. Comment aborderiez-vous le problème?

Je pense que les exigences de base pour l'éclairage dans un monde voxel seraient

  1. mettre à jour assez rapidement pour que cela puisse se produire dans une seule image. On pourrait être en mesure de faire l'éclairage dans le périphérique graphique et de télécharger les informations de lumière modifiées dans la RAM principale.
  2. les informations sur la lumière doivent être rapidement disponibles pour la logique principale du jeu, donc pas entièrement basées sur le périphérique graphique: raisonnement: la lumière affecte la croissance de l'herbe, le frai des monstres, etc.
  3. les mises à jour légères devraient être locales à un morceau ou avoir une autre limite pour que l'on n'ait pas à rallumer le monde entier qui pourrait être de très grande taille.

L'idée principale serait de rendre les mises à jour lumineuses rapides, pas forcément plus belles. Pour des améliorations générales des performances de rendu de la lumière, on pourrait facilement ajouter SSAO en plus de ce qui devrait se traduire par des mondes beaucoup plus agréables.

Réponses:


7

L'éclairage dans Minecraft est calculé de manière asynchrone et intégré à la géométrie. Cela ne se fait pas en temps réel.

Chaque voxel stocke l'éclairage de ce voxel, probablement sous la forme d'un seul octet (ou 2, l'encoche utilise une approche en couches pour rendre les cycles de jour et de nuit possibles). Il n'y a que 16 niveaux de lumière. Pour éclairer le monde, Minecraft fait 2 passes. Un pour la lumière du soleil, et un autre pour propager ou inonder la lumière dans des grottes et autres. L'éclairage est localisé car toute source lumineuse ne peut propager sa lumière qu'à 16 pâtés de maisons au plus. L'eau et la lave fonctionnent presque de la même manière.

Plus d'informations sont disponibles sur son blog: http://notch.tumblr.com/post/434902871/per-request-this-is-how-the-new-lighting-will-work


Je sais. Je pense que j'ai écrit cela ci-dessus (moins la résolution de luminosité 4 bits).
Armin Ronacher

1

Vous ne pouvez pas utiliser GPU Render to Texture et double-buffer vos résultats afin que vous ayez toujours des informations d'éclairage calculées disponibles pour relire chaque image?

La façon dont vous organiseriez ces données pour l'éclairage dépend entièrement de vous, mais je ne vois pas pourquoi cela ne devrait pas être la première option d'enquête si tout ce que vous cherchez à faire est d'améliorer la vitesse de votre algorithme d'éclairage ..?


Exactement ce à quoi je pensais. Presque tous les GPU, contrairement à la plupart des processeurs, sont CONÇUS pour ce type d'exercice de calcul parallèle massif.
Grant Peters

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.