Bonjour,
J’ai développé un mini moteur / framework permettant de créer des jeux 3D sous Windows avec un rendu entièrement CPU. La seule exception (désactivable) concerne la phase de Present, utilisée uniquement pour effectuer le stretch du framebuffer vers la fenêtre lorsque leurs résolutions diffèrent.
À l’origine, ce projet avait un objectif pédagogique : servir de support pour enseigner le pipeline 3D à des étudiants avant d’aborder une API graphique moderne. Je le mets aujourd’hui à disposition sur GitHub, aussi bien pour les curieux que pour les étudiants, ou même pour ceux qui souhaiteraient s’en servir comme base pour leurs propres jeux.
Le rendu est optimisé via du multi-threading (activé en release uniquement), en s’appuyant sur un modèle de tiles afin de compartimenter l’écran. Un système de particules pixel est également présent, avec une attention particulière portée à l’alignement mémoire pour les performances.
Le moteur reproduit volontairement le pipeline classique des GPU :
spaces local / world / view / clip / screen, vertex & pixel shaders, meshes, materials, ainsi que des fonctions de callback côté pixel shader.
L’éclairage se limite pour l’instant à une lumière directionnelle (Gouraud / Lambert).
Les optimisations classiques sont bien sûr là : culling, clipping, tri des objets par profondeur, etc.
Les textures et UVs sont gérés pour les meshes (tailles en puissance de deux, sans transparence) ainsi que pour les sprites (avec transparence, sans contrainte de taille). Les fonctionnalités 2D restent volontairement limitées, principalement pour de l’UI basique.
Il est toutefois possible d’afficher du texte via la création de fonts à partir de fichiers TTF, avec génération dynamique de spritesheets.
Le framework est découpé en trois bibliothèques statiques :
core, render et engine, et une démo est fournie pour illustrer l’ensemble.
En dehors de l’API Windows (gestion de la fenêtre), de quelques fonctions système, et de DirectXMath pour exploiter les instructions SSE2, il n’y a aucune autre dépendance externe.
Amusez-vous bien...
LIEN GITHUB :
https://github.com/sylvainseccia/cpu-engine







Répondre avec citation




Partager