Sortie du SCEngine en version 0.0.8a !
Salut à tous,
Voilà déjà plus de deux mois que je rumine cette version, à mon allure certes, mais les changements apportés à cette version sont assez conséquents.
- Suppression du module Model ;
- Épurage du module Material, dorénavant seuls les matériaux OpenGL et les point sprites sont gérés ;
- Matrice de texturage et unité de texturage contenus dans chaque texture ;
- Système de pile pour les textures en cours d'usage ;
- Suppression des fonctions Scene_Push/Pop() et de la fonctionnalité qu'elles représentaient ;
- Utilisation de GLee au lieu de GLEW, les fichiers sources sont inclut au moteur ;
- Ajout d'un module de gestion des niveaux de détails ;
- Ajout d'un module de gestion de l'instancing (hardware instancing pas encore supporté) ;
- Module d'entités de scène représentant un modèle pouvant être exploité par une ou plusieurs instances ;
- Chaque niveau de détail peut à présent représenter un lot entier de ressources différentes ;
- Matrices inverses calculée et conservée par défaut dans chaque caméra ;
- Système de verrou lors de la demande d'utilisation d'une ressource déjà en cours d'utilisation (afin d'éviter des appels inutiles) ;
- Gestion du batching.
Comme vous pouvez le constater, la gestion des modèles a été remplacée par un module d'entités de scène (que je renommerai peut-être après tout...) et la gestion des kill-features comme le LOD ont été extraites afin de garantir une meilleure flexibilité.
Le sample n'a pas encore été mis à jour en fonction de la nouvelle version, je l'ai donc pour le moment supprimé. Le tutoriel n'est pas non plus à jour, mais il a été conservé. De prochaines mises à jour corrigeront cela.
Notez également que j'ai eu quelques problèmes avec mon git repository, il est donc pour le moment non à jour, de plus la dernière version mise dessus ne compile pas. J'essayerai de régler ce problème.
GLee semble fournir plus d'extensions et être plus à jour que GLEW, de plus GLEW provoquait des erreurs de segmentation sur certaines machines possédant une carte graphique exotique à cause de l'utilisation de pointeurs de fonctions valant NULL, alors que l'extension qu'ils représentaient était bel et bien présente. L'utilisation de GLee corrige ce problème, vous pourrez donc dorénavant utiliser le moteur sur les plus modestes configuration (testé sur une S3 savage d'un vieux laptop et sur un Intel GMA9XX).
Après avoir corrigé les problèmes du sample et du tuto, j'essayerai de programmer quelques démos afin de vous proposer quelques screens appétissants.
À la prochaine !
Nouvelle version : SCEngine v0.0.7a
Bonsoir à tous,
Après la rédaction d'un tutoriel et la "stabilisation" du code source du moteur, je vous présente la version 0.0.7 alpha. Toujours alpha car je n'ai toujours pas bien pris le temps de tester le moteur, mais depuis tout ce temps que je l'utilise je pense que je pourrai bientôt mettre bêta.
Au menu des nouveautés :
- Multiple Render Targets, vous permettant via un pixel shader d'affecter plusieurs textures simultanément lors d'un rendu sur texture via FBO.
- Fonction Texture_Blit() vous permettant de blitter une texture sur une autre, cela risque d'être pratique pour appliquer un filtre gaussien en plusieurs passes.
- Nouvelle architecture du gestionnaire de scènes, j'ai plus ou moins défini quelques règles afin d'ajouter de la rigueur dans le gestionnaire de scènes, qui était plus un emballage grossier auparavant.
- Matrices de texturage accessibles au sein du gestionnaire de matériaux.
- Environnement mapping, permet de simuler les reflets de l'environnement sur un modèle.
Avec ceci s'ajoute une habituelle correction de bugs multiples, que je ne devrais même plus signaler tellement c'est quotidien et "normal".
Comme je l'ai signalé au début de la news, j'ai effectivement rédigé un tutoriel, pour l'instant très primaire, sur l'utilisation du moteur et des fonctions de base. Avec l'aide de la doc vous pourrez en théorie faire déjà quelques petites choses. Le tutoriel est disponible au format xHTML dans les sources de la nouvelle version du moteur. Il a été initialement rédigé en mdown.
À bientôt !
Le développement de DevIL reprend !
Bonsoir à tous !
Je viens de rentrer de vacances ce soir même, et après deux semaines sans PC on est complètement largué et on apprend que plein de choses nouvelles sont sorties, notamment, et c'est ce qui a le plus attiré mon attention, une nouvelle version de la très célèbre bibliothèque d'images DevIL.
DevIL, pour Developers' Image Library, et une bibliothèque permettant le chargement et la manipulation d'images (redimensionnement, effets de flou, etc...), ces images peuvent ensuite être chargées en tant que texture pour OpenGL par exemple. Le SCEngine utilise cette bibliothèque, c'est pourquoi son maintient me réjouit car je trouvais à la dernière version en date de DevIL plusieurs bugs assez casse-pieds.
DevIL revient donc sur le devant de la scène avec une version 1.7.2 qui d'après le développeur Denton corrige de nombreux bugs, dont quelques-uns que j'avais repérés par ci par là.
Bonne nuit !
Migration du site vers l'UTF-8
Je viens de migrer la totalité du site (excepté les bases de données) vers l'UTF-8, chose prévue depuis longtemps mais toujours repoussée pour diverses mauvaises raisons.
C'est maintenant chose faite après une petite heure de labeur, et nous avons en prime quelques correction de bogues et ajouts de fonctionnalités en interne.
Il reste cependant peut-être des problèmes que je n'ai pas encore vu. Si vous en trouvez un, je vous saurai gré de me le reporter sur le forum.
La documentation est en ligne !
Bonsoir à tous !
La documentation du moteur est maintenant disponible en ligne !
Toute personne voulant participer à la documentation (correction du mauvais anglais, ajout de doc manquante, etc., y'a du boulot) est la bienvenue, et peut nous contacter via le forum.
Bonne visite de la doc ;-)
Premiers tests de shadow mapping
Salut,
Après deux journées d'acharnement, le fruit de mes efforts est enfin mûr (ou presque). J'ai hébergé en vitesse un screenshot du résultat que je parviens à obtenir actuellement sur ma nouvelle carte graphique, une Radeon HD4850.
J'ai utilisé deux shaders, un pour le rendu de la depth map et un autre pour le rendu final, comme vous pouvez le voir l'alpha de la texture appliquée au modèle est pris en compte. L'ombre n'est pour le moment pas encore lissée, mais bon cette étape, on verra plus tard, j'ai pour l'instant quelques problèmes de z-fighting sur ma 6600GT que je ne parviens à éviter qu'en hackant dans mon shader...
Bon, le point positif c'est que j'ai réussi à créer une vraie ombre qui marche bien, même que l'implémentation de la technique avec mon moteur n'a pas été laborieuse, ce qui est une bonne chose qui permet d'avancer que la structure de mon moteur n'est pas trop mauvaise. De toute façon, ce n'est qu'en l'essayant que je saurai réellement ce qu'il vaut, donc au fil de mes tests de technique je me rendrai bien compte des lacunes de mon moteur.
Petit mot au passage, vous remarquerez qu'aucune nouvelle version du moteur n'est sortie pour le 42 juillet, et ceci pour la simple et bonne raison que je n'avais pas suffisamment travaillé dessus pour prétendre pouvoir augmenter un chiffre de version.
Annonce : un Git repository est maintenant disponible pour le moteur ! Vous pourrez ainsi obtenir la toute dernière version en cours de développement. Pour récupérer le SCEngine à partir du repository tapez simplement :
$ git clone git://git.tuxfamily.org/gitroot/scengine/scengine.git master
Vous l'aurez remarqué, je me suis créé un compte chez TuxFamily, pour l'instant il me servira uniquement pour le repository du moteur.
Sortie d'OpenGL 3.0 !
C'est le 11 août dernier que les spécifications de la troisième version d'OpenGL ont été publiées. Annoncée il y a déjà un an, la 8ème révision de l'API 3D s'est faite attendre, c'est le moins qu'on puisse dire.
Au premier survol des spécifications d'OpenGL 3, qui sont franchement imbouffables, j'ai constaté avec joie que la nouvelle version de l'API n'est pas le gros changement du siècle comme tout le monde le laissait entendre, on aura donc droit à nos glBegin/glEnd et à nos display lists contrairement à ce qui était "prévu" (sachant que mes prédictions se basaient sur des rumeurs).
Au menu des nouveautés je serai malheureusement bref, car je n'ai pas encore réussi à comprendre toutes les subtilités des quelques nouvelles fonctions qui ont vu le jour. On pourra noter un "transform feedback" qui semble sauvegarder dans un buffer grâce à un vertex shader des informations sur le précédent rendu. Les frame buffer objects sont "officialisés", donc plus obligé de passer par les extensions si on dispose de l'implémentation d'OpenGL 3. Les vertex arrays sont maintenant implémentés sous forme d'objets à l'instar des VBOs, ce qui permet aux programmeurs une meilleure organisation du code pour switcher entre VBO/VA. Les vertex buffer objects peuvent dorénavant être mis à jour de manière "non bloquante" (ne m'en demandez pas plus), et il est possible de ne mettre à jour qu'une partie du buffer, cela permet de limiter les transferts et de gagner en bande passante.
Du côté des shaders on notera là aussi une nouvelle version du GLSL, la 1.3. Les geometry shaders sont bien sûr disponibles et sont représentés par l'extension GL_ARB_geometry_shader4.
http://opengl.org/documentation/specs
Régalez-vous !
Dynamic Ambient Occlusion : vu dans Crysis
Salut tout le monde,
Suite à la récente acquisition d'une carte graphique relativement récente (et du PC qui va avec), je ne pouvais pas passer à côté du test de ce jeu de dernière génération présentant un lot de techniques de rendu sympathiques. On trouve parmi elles de l'ambient occlusion dynamique. L'ambient occlusion est une technique d'ombrage visant à assombrir deux polygones s'ils sont relativement proches l'un de l'autre. Posez par exemple une balle au sol, et regardez en dessous, un zone sombre circulaire est présente. En théorie le calcul de ambient occlusion est relativement lent, mais l'alternative de Crytek est intéressante. Comme pour les reflets spéculaires sur Trackmania, c'est un gros fake mais le résultat est très convaincant : 
Pour parler de la technique utilisée, je vous avouerai que je n'ai pas pu m'assurer, contrairement à Trackmania, que c'était bien ce que j'ai supposé. Toutefois cela m'a donné des idées qu'il faudra que je pense à mettre en pratique.
D'après ces screens, on peut remarquer que l'ambient occlusion forme une zone sombre qui suit les contours de(s) l'objet(s), cette impression est d'autant plus grande lorsqu'on joue à Crysis et que l'on peut faire bouger la caméra. 
La mise en œuvre semble simple (à priori), il suffirait d'effectuer le rendu de la géométrie et de la profondeur de chaque pixel sur un buffer, flouter ce buffer et le rendre par dessus la scène en prenant en compte la différence de profondeur entre le pixel du buffer et celui du framebuffer. Si l'écart est faible, on peut considérer que le mesh générant l'ombre est « proche » de celui la recevant, et donc assombrir la zone correspondante. Bon, ma description (remaniée par Ban au passage) n'est peut-être pas super compréhensible voir même ne produit pas un résultat correct, mais l'idée est là, et le concept est attrayant. C'est donc une idée à creuser.
Bonne nuit !