La 3D en raycasting étendu débarque sur HP-Prime
Posted: 04 Aug 2014, 21:17
Enfin un moteur 3D en raycasting étendu sur HP-Prime !
Finally an extended 3D raycasting engine on the HP-Prime !
Pour la rentrée 2013, les premiers tests de performance du langage de programmation interprété de la HP-Prime furent extraordinaires. Jamais nous n'avions vu un langage interprété sur calculatrice bénéficier d'une telle puissance... Si bien que contrairement à d'autres calculatrices, l'idée de coder un moteur 'raycasting' directement dans le langage interprété originel fut rapidement évoquée !
For back to school 2013, the first performance tests using HPPPL, the interpreted programming language of the HP-Prime, were extraordinary. We had never seen an interpreted language on calculator benefiting of such power... So unlike other calculators, the idea of coding a raycasting engine directly with the original interpreted language quickly existed !
Mais qu'est-ce que c'est ? Le 'raycasting' ou littéralement "lancer de rayons" est un type de moteur permettant le rendu en temps réel de mondes 3D relativement simples. Il est particulièrement adapté aux jeux vidéos tournant sur des machines de faible puissance.
But what is it? Raycasting is a type of engine allowing realtime rendering of relatively simple 3D worlds. It is particularly suited to video games running on low power machines.
On peut citer à titre d'exemples Catacomb 3-D dès 1991 ou Wolfenstein 3D en 1992, tous deux du studio ID Software.
Notons pour anecdote que paradoxalement, Wolfenstein 3D a été accusé par une certaine presse d'alors de faire l'apologie du nazisme avec de nombreux affichages de croix gammées et portraits d'Hitler sur les murs, alors que le but du jeu était justement de combattre les nazis.
Notons pour anecdote que paradoxalement, Wolfenstein 3D a été accusé par une certaine presse d'alors de faire l'apologie du nazisme avec de nombreux affichages de croix gammées et portraits d'Hitler sur les murs, alors que le but du jeu était justement de combattre les nazis.
Can be cited as examples Catacomb 3-D in 1991 or Wolfenstein 3D in 1992, both from the ID Software studio.
Note to anecdote paradoxically, Wolfenstein 3D was accused by some press then to advocate Nazism with many displays of swastikas and Hitler portraits on the walls, while the goal of the game was precisely to fight the Nazis.
Note to anecdote paradoxically, Wolfenstein 3D was accused by some press then to advocate Nazism with many displays of swastikas and Hitler portraits on the walls, while the goal of the game was precisely to fight the Nazis.
Le principe de base en est relativement simple. Le monde est codé sous la forme d'une matrice binaire, c'est-à-dire un tableau de nombres valant zéro ou un, permettant donc des murs sous forme de cubes de même côté. A partir de la position du joueur, une simple boucle lance une série de rayons dans les directions autorisées par le champ de vision. Lorsqu'un rayon frappe un mur il s'arrête et retourne des informations sur cet objet à afficher, notamment la distance parcourue c'est-à-dire son éloignement qui, après correction de la courbure de l'oeil, donnera sa taille en pixels sur l'écran.
The basic principle is relatively simple. The world is encoded as a binary matrix, that is to say, an array of numbers equal to zero or one, thereby allowing walls formed of cubes with the same side. From the player position, a single loop is launching a series of rays in directions possible according to the field of view. When a ray hits a wall it stops and returns information about the object to be displayed, including its distance which, after correction of the curvature of the eye, gives its size in pixels on the screen.
Toutefois avec ces murs de même hauteur ne pouvant que se prolonger ou être perpendiculaires, en pratique les mondes codés prennent très souvent la forme de labyrinthes, de plus en plus énormes et monotones avec l'avancée dans les niveaux du jeu et rapidement ennuyants selon moi.
However, with walls of the same height which can only be perpendicular, in practice such worlds often take the form of mazes, more and more huge and monotonous with the advance in the game levels, which quickly becomes quite annoying according to me.
Tant qu'à avoir un tableau de nombres, un amélioration immédiate du principe est de coder dans chaque case des informations supplémentaires sur l'altitude et la hauteur de l'objet. L'on peut alors créer des mondes beaucoup plus riches qui commencent véritablement à utiliser la 3ème dimension, avec des salles, escaliers...
C'est un des principes utilisés par ID Software dans la série de jeux Doom initiée dès 1993.
La complexité de l'algorithme est toutefois bien plus élevée car, les objets 3D pouvant avoir des altitudes et hauteur différentes, les rayons lancés ne s'arrêtent plus au premier objet rencontré. En effet, il peut y avoir d'autres objets qui dépassent derrière et seront donc partiellement visibles...
L'autre ajout essentiel qui ne sera pas explicité ici, est que l'objet 3D élémentaire n'est plus un prisme droit à base carrée mais un prisme droit à base triangulaire, triangle possiblement quelconque. C'est-à-dire que l'on peut reconstituer par assemblage n'importe quel type de polygone permettant ainsi des intersections libérées des contraintes initiales de perpendicularité.
Toutefois, les différents niveaux restent selon moi très en intérieur et encore dans le style de labyrinthes. Le studio Raven software a selon moi bien mieux exploité les possibilités du moteur 3D de Doom, en sortant dans le cadre d'un contrat avec ID Software les jeux Heretic et Hexen qui sont d'ailleurs illustrés ci-dessus.
C'est un des principes utilisés par ID Software dans la série de jeux Doom initiée dès 1993.
La complexité de l'algorithme est toutefois bien plus élevée car, les objets 3D pouvant avoir des altitudes et hauteur différentes, les rayons lancés ne s'arrêtent plus au premier objet rencontré. En effet, il peut y avoir d'autres objets qui dépassent derrière et seront donc partiellement visibles...
L'autre ajout essentiel qui ne sera pas explicité ici, est que l'objet 3D élémentaire n'est plus un prisme droit à base carrée mais un prisme droit à base triangulaire, triangle possiblement quelconque. C'est-à-dire que l'on peut reconstituer par assemblage n'importe quel type de polygone permettant ainsi des intersections libérées des contraintes initiales de perpendicularité.
Toutefois, les différents niveaux restent selon moi très en intérieur et encore dans le style de labyrinthes. Le studio Raven software a selon moi bien mieux exploité les possibilités du moteur 3D de Doom, en sortant dans le cadre d'un contrat avec ID Software les jeux Heretic et Hexen qui sont d'ailleurs illustrés ci-dessus.
As long as you have an array of numbers, an immediate improvement of the principle is coding in each cell additional information like the altitude and the height of the object. One can then create much richer worlds truly begining to use the third dimension, with halls, stairs...
This is one of the principles used by ID Software games in the Doom series initiated in 1993.
However, the complexity of the algorithm is much higher because 3D objects may have different heights and altitudes, the cast rays do not stop on the first object encountered. Indeed, there may be bigger objects behind which will be partially visible ...
The other essential addition that will not explained here is that the basic 3D object is no longer a square base right prism, but one with a triangular base That is to say that bases can be merged into any type of polygon allowing intersections released from the initial perpendicularity.
However, the Doom levels remain mainly indoors and still take the forms of labyrinths. According to me, the Raven Software studio has much better used the possibilities of the new Doom 3D engine of Doom through a contract with ID Software in its Heretic and Hexen games.
This is one of the principles used by ID Software games in the Doom series initiated in 1993.
However, the complexity of the algorithm is much higher because 3D objects may have different heights and altitudes, the cast rays do not stop on the first object encountered. Indeed, there may be bigger objects behind which will be partially visible ...
The other essential addition that will not explained here is that the basic 3D object is no longer a square base right prism, but one with a triangular base That is to say that bases can be merged into any type of polygon allowing intersections released from the initial perpendicularity.
However, the Doom levels remain mainly indoors and still take the forms of labyrinths. According to me, the Raven Software studio has much better used the possibilities of the new Doom 3D engine of Doom through a contract with ID Software in its Heretic and Hexen games.
Personne d'autre ne semblant s'en être occupé entre temps, j'ai donc le plaisir de vous sortir ce soir le tout premier moteur 3D raycasting pour HP-Prime, PrimeCaster 3D.
Le moteur met d'emblée la barre très haut en implémentant non pas le raycasting basique, mais le raycasting étendu avec une matrice de hauteurs et altitudes. Les objets 3D élémentaires sont ainsi des prismes droits de même base carrée.
Les mondes 3D gérés sont donc intermédiaires entre Wolfenstein 3D et Doom. Ils sont en conséquence bien mieux que ceux du raycasting basique, avec la possibilité d'avoir des étages, escaliers, tunnels...
Le moteur a la particularité d'être à qualité variable et d'adapter automatiquement la précision des rayons 3D lancés pour cibler le FPS (Frames Per Second - soit images par seconde) que vous réglez avec les touches 'plus' et 'moins'.
Pour cela il mesure tout simplement le temps de rendu d'une frame en millisecondes (instruction 'Ticks') et vérifie que cela ne soit pas trop éloigné du temps correspondant à votre FPS. Vous aurez donc le confort de jouer avec un FPS relativement constant !
J'estime pour ma part qu'un jeu commence à être 'jouable' à partir de 2 FPS.
Le logiciel HP-Prime étant plus rapide que la calculatrice, pour un même FPS et un même environnement 3D, nous aurons une meilleure qualité sur ordinateur que sur calculatrice.
Le moteur met d'emblée la barre très haut en implémentant non pas le raycasting basique, mais le raycasting étendu avec une matrice de hauteurs et altitudes. Les objets 3D élémentaires sont ainsi des prismes droits de même base carrée.
Les mondes 3D gérés sont donc intermédiaires entre Wolfenstein 3D et Doom. Ils sont en conséquence bien mieux que ceux du raycasting basique, avec la possibilité d'avoir des étages, escaliers, tunnels...
Le moteur a la particularité d'être à qualité variable et d'adapter automatiquement la précision des rayons 3D lancés pour cibler le FPS (Frames Per Second - soit images par seconde) que vous réglez avec les touches 'plus' et 'moins'.
Pour cela il mesure tout simplement le temps de rendu d'une frame en millisecondes (instruction 'Ticks') et vérifie que cela ne soit pas trop éloigné du temps correspondant à votre FPS. Vous aurez donc le confort de jouer avec un FPS relativement constant !
J'estime pour ma part qu'un jeu commence à être 'jouable' à partir de 2 FPS.
Le logiciel HP-Prime étant plus rapide que la calculatrice, pour un même FPS et un même environnement 3D, nous aurons une meilleure qualité sur ordinateur que sur calculatrice.
As apparently nobody else took care of it, I am pleased to release you tonight the first 3D raycasting engine for the HP-Prime, PrimeCaster 3D.
The engine does not implement the basic raycasting, but some extended raycasting with an array of heights and altitudes. Basic 3D objects are right prisms with the same square base.
Possible 3D worlds are between Wolfenstein 3D and Doom. But they are still much better than the 3D worlds of the basic raycasting, with the possibility of having the floors, stairs, tunnels...
This particular engine has a variable quality and automatically adjusts the precision of the cast 3D rays to target the FPS (Frames Per Second) that you set with the 'plus' and 'minus' keys.
To do this, it simply checks the rendering time of the last frame in milliseconds (instruction 'Ticks') and verifies that it is not too far from the time corresponding to the FPS you've specified. You will have the comfort of playing with a relatively constant FPS !
According to me, a game starts to be 'playable' with 2 FPS.
HP-Prime software being faster than the calculator, for the same FPS and the same 3D environment we will have a better quality on the computer than on the calculator.
The engine does not implement the basic raycasting, but some extended raycasting with an array of heights and altitudes. Basic 3D objects are right prisms with the same square base.
Possible 3D worlds are between Wolfenstein 3D and Doom. But they are still much better than the 3D worlds of the basic raycasting, with the possibility of having the floors, stairs, tunnels...
This particular engine has a variable quality and automatically adjusts the precision of the cast 3D rays to target the FPS (Frames Per Second) that you set with the 'plus' and 'minus' keys.
To do this, it simply checks the rendering time of the last frame in milliseconds (instruction 'Ticks') and verifies that it is not too far from the time corresponding to the FPS you've specified. You will have the comfort of playing with a relatively constant FPS !
According to me, a game starts to be 'playable' with 2 FPS.
HP-Prime software being faster than the calculator, for the same FPS and the same 3D environment we will have a better quality on the computer than on the calculator.
Comme vous le voyez, dans le cas d'un champ de vision globalement obstrué, la qualité bien qu'inférieure à celle du logiciel reste très honorable et jouable sur calculatrice. En effet les rayons lancés sont stoppés et ne continuent pas jusqu'au bord de la matrice puisque rien ne peut être visible derrière de tels objets.
As you can see, in the case of a mostly obstructed field of view, the quality on the calculator remains decent and yields a playable game, even if the quality is lower on the calculator. The cast rays are stopped, and do not extend as far as the matrix's edge, because nothing is visible behind such objects.
Par contre, dans le contexte d'un champ de vision libre en extérieur, c'est bien moins le cas.
Dans le contexte de l'algorithme actuel que j'ai quand même pas mal optimisé, faire un jeu jouable sur calculatrice dans une qualité acceptable nécessiterait de privilégier les scènes en intérieur, ou de prendre bien soin pour les scènes en extérieur d'obstruer rapidement le champ par de grands murs.
Une autre possibilité serait de revenir à l'algorithme basique du raycasting à la Wolfenstein 3D qui sera sûrement fluide au vu de ces performances, mais je trouve que ce serait bien dommage de se limiter à cela sur l'extraordinaire machine qu'est la HP-Prime.
Une autre possibilité serait de revenir à l'algorithme basique du raycasting à la Wolfenstein 3D qui sera sûrement fluide au vu de ces performances, mais je trouve que ce serait bien dommage de se limiter à cela sur l'extraordinaire machine qu'est la HP-Prime.
In the context of the current algorithm which is already optimized, making a game playable on the calculator in an acceptable quality would need to build a 3D world with mainly interior scenes, or to take care of quickly obstructing the field of view with large walls for outdoor scenes.
Another possibility would be to return to the basic raycasting algorithm from Wolfenstein 3D which will surely run smoothly according to the above performances, but I think it would be a shame to limit us to such 3D worlds on the HP Prime.
Another possibility would be to return to the basic raycasting algorithm from Wolfenstein 3D which will surely run smoothly according to the above performances, but I think it would be a shame to limit us to such 3D worlds on the HP Prime.
Enfin, trois situations sont de plus gérés et interchangées via la touche 'espace':
- de nuit, muni d'une torche
- de jour, rayons solaires inclinés (matin ou après-midi)
- dans le brouillard
Finally, three contexts are managed and interchanged via the 'space' button :
- by night with a torch
- by day, sunlight slanted (morning or afternoon)
- in the fog
Pénètre dès maintenant mon château fort pour tenter d'atteindre le sommet du donjon si tu en es capable, et pourquoi pas après de créer ton propre monde 3D en modifiant la matrice !
Now enter my castle and try to reach the top of the dungeon if you can, and why not after this create your own 3D world by modifying the matrix!
Téléchargement :
Download :
PrimeCaster 3D 1.0