Castle Game Engine – moteur de jeu 3D/2D multiplateforme gratuit et open source basé sur Pascal
(castle-engine.io)- Moteur gratuit et open source permettant aux développeurs Pascal de créer des jeux 3D/2D et des interfaces utilisateur dans un même projet, puis de les déployer sur plusieurs plateformes
- L’éditeur visuel et le système de composants gèrent ensemble les éléments de jeu et d’UI comme les scènes, caméras, navigation, éclairages, boutons, images et libellés
- Prend en charge les workflows basés sur les modèles 3D, les animations 2D et les sprite sheets, avec la possibilité d’exploiter glTF, X3D, IFC ainsi que les intégrations avec Blender et Sketchfab
- Propose des fonctions de rendu comme les effets de shaders, les ombres, les miroirs, le rendu physiquement réaliste, le bump mapping et la correction gamma, permettant diverses expressions graphiques avec le moteur de base
- Sa structure, avec outil de build en ligne de commande, images Docker et documentation pour les principaux CI, facilite son utilisation pour des applications open source comme commerciales
Éditeur et mode de développement
- Castle Game Engine est un moteur de jeu 3D/2D destiné au desktop, au mobile, aux consoles et au web
- L’éditeur visuel permet de concevoir des jeux 3D/2D et des interfaces utilisateur
- Prend en charge la mise à l’échelle automatique de l’UI et les ancres
- Peut s’intégrer à plusieurs IDE, dont Visual Studio Code, Lazarus et Delphi
- Les composants distinguent la composition du viewport et celle de l’UI
- Les mondes 3D/2D peuvent utiliser des scènes, caméras, navigation, primitives, éclairages, etc.
- L’UI peut utiliser des boutons, images, libellés, etc.
- La base de code repose sur modern Object Pascal, avec des builds rapides et une exécution rapide fournis par défaut
Assets, graphismes et déploiement
- Le mode de définition des données inclut les modèles 3D, les animations 2D et les sprite sheets
- Utilise les standards ouverts glTF et X3D pour s’intégrer à des outils de création et dépôts d’assets comme Blender et Sketchfab
- Les fonctions graphiques comprennent des effets de shaders combinables, les ombres, les miroirs, le rendu physiquement réaliste, le bump mapping et la correction gamma
- Les cibles multiplateformes sont Windows, Linux, macOS, FreeBSD, Raspberry Pi, Android, iOS, Nintendo Switch et le web
- Il est possible de travailler depuis n’importe quelle plateforme desktop
- La compatibilité avec l’open source et la CI est assurée par un outil de build en ligne de commande et des images Docker
- Fournit une documentation et des fichiers prêts à l’emploi pour GitHub Actions, GitLab CI, Jenkins, Woodpecker CI et d’autres CI
- Le moteur est entièrement open source et peut être utilisé pour créer tout type d’application, y compris des applications propriétaires
1 commentaires
Avis sur Hacker News
https://castle-engine.io/why_pascal
Je vais devoir jeter un peu d’eau froide là-dessus. La plupart des raisons énumérées — sécurité, multiplateforme, bibliothèques — se retrouvent aussi dans d’autres langages modernes, et l’une d’elles est la lisibilité, ce que j’ai du mal à accepter.
Je travaille 8 heures par jour sur du code Pascal, et je ne le trouve pas plus facile à lire que la syntaxe C classique ; au contraire, je le trouve bien moins lisible. Comme il faut utiliser des mots entiers pour exprimer la syntaxe, le cerveau a du mal à distinguer immédiatement « ceci est la structure du code » de « ceci est le code proprement dit », et il faut réellement lire les mots. Je trouve que c’est une conception très improductive.
Cette page donne l’impression d’avoir été écrite il y a 20 ans. Des arguments comme la sécurité de typage, en particulier, auraient été bien plus convaincants à l’époque.
Je ne sais pas si c’est possible avec d’autres langages.
Sauf dans des cas extrêmes — par exemple si l’on essaie d’écrire du code orienté objet dans un langage ésotérique ou un langage basé sur XML qui ne propose que des fonctionnalités impératives —, je pense que la lisibilité dépend du lecteur.
Go est le seul autre langage que j’ai trouvé facile à suivre alors que je ne le connaissais pas très bien, mais ses fonctionnalités sont beaucoup plus simples et limitées. À l’inverse, Free Pascal est un langage “évier de cuisine” qui contient à peu près tout, et reste pourtant assez facile à lire.
Cela dit, la principale raison d’utiliser Free Pascal n’est pas tant le langage lui-même que Lazarus IDE, ainsi que les frameworks FCL et LCL. Son compilateur rapide, son optimiseur correct, son nouveau backend LLVM utilisable quand on a besoin de plus de performances, et le grand nombre de plateformes prises en charge sont aussi des atouts.
La rétrocompatibilité est également très importante. Si du code qui fonctionnait bien il y a quelques années se casse sans facteur externe, peu importe que le langage soit propre, cohérent et élégant : ce qui compte pour moi, c’est que le code qui fonctionnait continue de fonctionner.
Et après avoir vu certains mots quelques fois, on ne les « lit » plus vraiment au sens décrit ici : on les associe à des images, comme d’autres mots présents dans son vocabulaire mental. À condition que le vocabulaire du langage n’utilise pas des mots très similaires entre eux, lire des mots n’est pas plus difficile que lire des accolades.
Les symboles d’un seul caractère peuvent être difficiles à appréhender pour certaines personnes, tout comme les mots le sont pour vous. Avec un bon IDE et une bonne structure de code, il devient aussi plus facile de distinguer la structure du code du code lui-même.
Cela dit, la principale raison pour laquelle j’aurais envie d’utiliser un moteur de jeu en Pascal pour un jeu, c’est de pouvoir éviter le garbage collection.
Articles liés :
Why use Pascal? - https://news.ycombinator.com/item?id=36646890 - juillet 2023, 307 commentaires
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=36371434 - juin 2023, 3 commentaires
Castle Game Engine Roadmap - https://news.ycombinator.com/item?id=36365420 - juin 2023, 10 commentaires
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=28079093 - août 2021, 3 commentaires
Castle Game Engine: Cross-platform 3D and 2D game engine - https://news.ycombinator.com/item?id=23741883 - juillet 2020, 20 commentaires
Castle Game Engine 6.4 released – physics, iOS services, shader pipeline upgrade - https://news.ycombinator.com/item?id=16207075 - janvier 2018, 2 commentaires
Je ne me souviens même plus de la dernière fois que j’ai utilisé un langage de la famille Pascal. En 2001, dans un cours de programmation à l’université, il fallait utiliser Delphi ; l’école avait Delphi 4, mais moi j’avais acheté Delphi 5. J’ai sans doute encore bricolé avec pendant un an ou deux, mais après 2005 je pense ne l’avoir quasiment plus utilisé
À l’université, on devait créer un programme de gestion de stock. Comme c’était un cursus IT, la plupart avaient du mal parce que la programmation n’était pas vraiment leur voie, mais moi j’étais presque un « prodige de la programmation », donc je me suis adapté à Delphi tout de suite
Je ne connaissais pas vraiment Delphi en soi, mais dès que j’ai commencé à coder et que j’ai tapé
var,begin,end,:=, etc., j’ai compris que c’était de la famille Pascal. Le fait d’avoir eu Turbo C et Turbo Pascal au lycée m’a permis d’avoir un peu d’avanceLa partie difficile, c’était de stocker les données d’inventaire dans un fichier binaire et de les retrouver avec une recherche binaire. Le tuteur était old school ; il y avait peut-être déjà dans Delphi davantage de solutions intégrées que l’on considère aujourd’hui comme évidentes en Go ou en C#
Tout le monde galérait à faire passer le build, et avec le recul c’est un bon souvenir. Aujourd’hui, je mets Pascal dans la même catégorie que Basic. Le projet a l’air intéressant, mais je n’ai aucune envie d’utiliser Pascal, donc c’est un critère bloquant pour moi
Cela dit, ça ne m’étonnerait pas qu’il existe encore un assez gros noyau de défenseurs de Pascal. Dans ce cas, tant mieux pour eux
À l’époque, quand je portais du code Pascal vers C, je remplaçais
begin/endpar des accolades, je déplaçais les déclarations d’interface dans des fichiers d’en-tête, et je remplaçais des fonctions bien nommées par des appels cryptiques àstrtok. En comparaison, c’était inutilement mocheAujourd’hui, C est mon langage préféré, mais la propreté de Pascal et la convivialité de Delphi me rappellent encore ce qu’est une excellente expérience développeur
J’utilise Android Studio depuis dix ans, mais ça n’arrive absolument pas à la cheville de l’expérience Borland Delphi Architect d’il y a vingt ans. Il y a peut-être aujourd’hui des fonctionnalités plus avancées, mais en comparaison c’est plutôt un bazar d’éléments déconnectés
Après avoir appris Basic à la maison, le premier « vrai » langage de programmation que j’ai appris au lycée a été Pascal
Mais un an ou deux plus tard, après avoir découvert C, je n’ai plus jamais regardé Pascal. C avait l’air plus « pro », plus flexible, plus proche du matériel. Pascal me semblait davantage adapté au développement d’applis GUI, tandis que C paraissait pouvoir tout faire, des entrailles d’un système d’exploitation aux drivers, en passant par les jeux et les applis GUI
Bien sûr, c’était idiot, puisque Pascal pouvait aussi faire tout ce que C faisait, mais pour le jeune que j’étais, il semblait moins « sérieux » et moins « pro »
Vers 1996-1997, je m’amusais à créer des effets de feu avec Turbo Pascal, mais la plupart des tutoriels utilisaient
asmetmode 13h, et je n’avais que Turbo Pascal 5.5, qui ne prenait pas en charge le mot-cléasmJ’ai bidouillé un peu, puis j’ai découvert C fin 1997, et après avoir vu la boucle
forde C, je n’ai plus retouché à PascalSympa. J’espère que le projet marchera bien. Le choix du langage est intéressant ; j’ai toujours vu Pascal comme un vieux langage, mais manifestement je me trompais
J’étais curieux de voir à quoi ressemble une grosse base de code Pascal, alors j’ai regardé le code. Je n’avais pas vu de code Pascal d’une taille significative depuis environ 2001
Ce qui m’a frappé, ce sont les noms de fichiers : je n’aime pas cette façon de préfixer tous les fichiers source par
castle. Cela rend plus difficile de comprendre de quoi parle le fichier et donne l’impression qu’ils se ressemblent tousPour le code lui-même, difficile à dire puisque je n’ai jamais utilisé Pascal, mais le moteur en lui-même a l’air chouette
yydans les fichiers yacc. Ça permet de repérer facilement quels fichiers sont des fichiers Castle, et d’éviter les collisions avec des fichiers ou des unités d’autres bibliothèquesC’est quasiment chercher la petite bête pour rien
J’ai l’impression que ces développeurs Pascal doivent abattre un travail incroyablement productif
À l’inverse, dans des langages plus populaires que j’utilise pour mes projets, comme Rust, j’ai l’impression que beaucoup de projets relèvent du genre « on a recréé grep pour la millième fois, mais cette fois correctement »
Il est vraiment dommage que le produit Delphi ait été aussi mal géré par Borland/Embarcadero.
Object Pascal est un excellent langage. Aujourd’hui, il permet de produire du code natif pour presque toutes les plateformes. Les binaires générés sont petits et rapides ; on peut considérer que c’est proche du niveau du C, et généralement 100 à 10 000 fois plus rapide qu’un code Python équivalent.
Castle Engine est un énorme projet, qui permet de créer très facilement des jeux et des applications 3D selon une approche RAD. Contrairement à d’autres grands frameworks Pascal, ce n’est pas un produit legacy : il est en développement très actif. J’ai énormément de respect pour ses développeurs.
Dans le même genre de projet vaste et impressionnant, il y a Mormot, un framework ORM/SOA/MVC basé sur du code hautement optimisé.
Créer des applications serveur avec Object Pascal et Mormot est facile, et dans une situation où NodeJS peut traiter 500 requêtes par seconde, du code Pascal peut entrer dans la zone des plus de 10 000 requêtes par seconde.
Ainsi, là où d’autres langages exigeraient des dizaines de serveurs pour encaisser la charge, un serveur écrit en Object Pascal peut facilement tourner sur une seule machine. Utiliser ce langage permet de réduire fortement les coûts.
Beaucoup de gens se souviennent d’Object Pascal uniquement comme d’un langage pédagogique, mais le langage a évolué et possède encore des fonctionnalités absentes d’autres langages. L’une des plus importantes est la RTTI, c’est-à-dire la réflexion. Il n’y a qu’un seul domaine où il est en retard sur les tendances modernes : le multithreading/les coroutines ne sont pas intégrés au langage lui-même, comme en Go.
Enfin, du code écrit il y a 40 ans peut encore être compilé et exécuté aujourd’hui. Pendant ces 40 années, d’innombrables langages ont été à la mode puis ont disparu, mais Pascal est toujours là.
Pour revenir à Castle Engine, même si vous n’êtes pas familier avec Object Pascal, je recommande vraiment d’essayer leur éditeur visuel. Il est vraiment impressionnant.
L’époque où je programmais en Pascal (Turbo/Borland) a été la plus amusante. Les « Units », les unités de compilation, fonctionnaient tout simplement bien, et la hiérarchie des dépendances n’autorisait qu’une forme de DAG. La compilation et l’utilisation étaient très rapides, tout comme l’édition et le débogage.
Avec le passage à Delphi, j’ai eu l’impression qu’on avait perdu quelque chose. Cela ne veut pas dire que c’était un mauvais produit, mais les gens ont commencé à regarder ailleurs.
Malgré tout, je garde précieusement le souvenir de cette époque où Pascal m’a servi de point de départ pour passer d’Apple Basic à C/C++, et où j’ai aussi pu apprendre peu à peu en utilisant un peu d’assembleur inline.