02 août 2021

Shēdā no jutsu


On ne va pas se mentir : Omeganaut est fait que de bric et de broc. ZGameEditor, le moteur que j'utilise, est complètement expérimental, alors certains des objets qui s'affichent à l'écran ne le font qu'avec de drôles de hacks. Le résultat est variable d'un ordi à un autre, et je ne parle même pas de ce que ça donne sur la myriade de téléphones Android différents.

En mai dernier, je suis tombé sur le Twitch live de First Person Scholar qui jouait à Omeganaut. Il était très content, mais je n'ai pas pu m'empêcher de voir les explosions s'afficher n'importe comment...

C'est ce qui m'a motivé à me former à la Technique Secrète du Shader !

J'ai passé les deux derniers mois à décrypter le langage OpenGL ES2/GL3. J'en avais assez du sol des planètes qui clignotait et des textes au fond transparent une fois sur deux. Au passage, j'ai découvert quelques bugs dans le moteur ZGameEditor qui ont pu être corrigé, et j'en profite pour remercier VilleK et Kjell qui sont toujours d'une aide précieuse.


La Technique Secrète du Shader
シェーダーの術
~ Shēdā No Jutsu ~

Programmer un shader, même aussi basique que d'afficher un simple triangle avec une texture, ce n’est pas facile. Il existe beaucoup de versions de ce langage avec des variables et fonctions qui apparaissent, changent de noms et disparaissent au fil des années. J'ai donc remplacé tous les matériaux du jeu par des shaders simples. Le jeu est maintenant beaucoup moins buggé, mais visuellement, ça ressemble toujours à la version précédente.


Alors à quoi vont me servir ces shaders ?

Maintenant que tout est en place, je vais pouvoir les améliorer. Dans un premier temps, je compte m'attaquer au rendu des éléments du jeu. Je suis assez fan de ce que l'on pouvait voir dans Super Mario Galaxy : un aspect velouté avec un liseré de lumière ambiante qui fait parfaitement ressortir les objets dans l'espace. Seulement, il fonctionne sur des formes arrondies, donc je vais voir ce que je peux obtenir avec mes vaisseaux en low polygon... Peut-être tricher un peu en adoucissant les angles ?


Super Mario Galaxy Velvet Shader
ベルベットの術
~ Berubetto No Jutsu ~


Plus tard, j'espère pouvoir projeter de vraies ombres. Actuellement, les ombres au sol ne sont que des copies aplaties et peinte en noir des éléments du jeu. C'est pour ça qu'il n'y a pas d'ombres projetées sur les murs ou dans le Mother Ship. Mais il va falloir que je potasse quelques tutoriels pour comprendre comment fonctionne la technique du Shadow Mapping !


OpenGL Shadow Mapping
シャドウマッピングの術
~ Shadoumappingu No Jutsu ~


Je peux aussi ajouter un shader en post process, qui modifie l'image finale. Comme pour obtenir l'aspect des vieux écrans cathodiques. Omeganaut tient sur une vieille disquette 3.5 pouces, et étant très inspiré de l'époque Frontier - Elite II, ça fait du sens. J'avais déjà fait quelques tests en utilisant le petit programme CRT View de Mattias Gustavsson :


Omeganaut sur écran CRT
古いテレビの術
~ Furui Terebi No Jutsu ~


Mais je veux aussi du glow sur les lasers, de plus jolies explosions et effets spéciaux... Tout ce qui va donner du JUICE ! Et ça viendra avec le temps. Le développement d'un jeu vidéo en solo est un voyage difficile. Aussi, vous pouvez m'aider à continuer en achetant le jeu sur itch.io :



Tags

Catégories

Archives