Affichage des articles dont le libellé est minko. Afficher tous les articles
Affichage des articles dont le libellé est minko. Afficher tous les articles

mercredi 17 juillet 2013

Shader pour paysage

En voulant pousser plus loin mon précédent shader sous-marin, j'ai créé celui-ci qui me permet de rendre ce paysage.

Pour plus de détails sur la génération de ce décor :

  • Une texture noir et blanc est utilisée pour déplacer verticalement les vertex.
  • Une texture RGBA est utilisée pour mixer les 4 types de sols. par exemple, du rouge 100% affiche de l'herbe à 100%.
  • Si la coordonnée Y du fragment shader est inférieure à zéro, j'applique un displacement map + un fog plus fort.

Shader sous-marin

Voici mon premier post-process développé avec Minko, il s'agit d'un shader d'effet d'ondulation sous-marine. Bien qu'en réalité cet effet ne se produit que quand la caméra est en dehors de l'eau, cette démo a été pour moi un bon exercice.

Le procédé est simple, j'utilise une image de perlin noise que j'utilise comme "displacement map". Je déplace les UVs du perlin noise pour créer cet effet d'ondulation.

J'ai aussi créé un shader spécial pour le sol pour mixer plusieurs image (textures de sol) + effet lumineux sur lequel j'applique aussi un "displacement map".

Vous pouvez déplacer le sous-marin avec les 4 flèches de dirrection et les touches A et Q.

mardi 21 août 2012

Colormix Shader


Voici un shader réalisé sur shaderlab qui permet de changer la couleur d'un objet avec "une onde de choque" comme transition.

Minko / shader lab, mon premier shader

ShaderLab est un bon outil pour apprendre à créer des shaders, il permet en temps réel de les tester et de voir les possibles messages d'erreurs.
Le shader par défaut permet de colorer un objet et de l'éclairer à partir de la caméra. Pour bien comprendre, un shader est divisé en 2 parties : Vertex Shader (en bleu dans shader lab), qui permet de traiter le positionnement des vertex, et le Fragment Shader (en jaune dans shader lab) qui permet de traiter les pixels à afficher.
Le shader n'est pas un langage de programmation avancé. Il n'y a, par exemple, pas d'instruction if ou de boucle. Tout doit se faire par opérations mathématique.

Pour débuter notre premier shader, nous allons supprimer tous les noeuds, et ne laisser que Output Position et Output Color. Ces deux noeuds correspondent aux résultats de nos opérations, et à ce que la carte graphique doit afficher.

Output Position :

Les vertex correspondent (entre autre) aux coordonnées XYZ d'un point, qui composent des triangles, qui composent à leur tour un objet 3D. Cet objet peut être déplacé dans le monde 3D, sans pour autant changer les coordonnées de ses vertex. Les matrices contiennent des informations concernant la position, la rotation et la taille. Pour afficher un objet 3D à l'écran, il faut prendre les coordonnées de ses vertex (locales), les transformer en coordonnées relatives au monde, puis, transformer ces coordonnées en coordonnées relatives à la caméra. Ces transformations se font par multiplications de la matrice avec le vertex.
coordonnées écran = coordonnées locales * matrice monde * matrice caméra * matrice projection

Le vertex Shader le plus simple, décomposé

Output Color :

Le Output Color attend une float4, c'est à dire une valeur à 4 composants RGBA, ce qui permet de connaitre la couleur du pixel à remplir.

Le Fragment shader le plus simple (aplat de couleur)