Introduction a Unity - shader

Transcription

Introduction a Unity - shader
Unity3D et les shaders
Damien Marchal
Objectifs
 Comprendre ce qu’est un shader,
 Utiliser des shaders existant dans Unity,
 Implémenter un shader simple.
Rappels d’informatique graphique
On modélise les objets par la description de leur surface (b-rep).
Les surfaces sont décrites comme un assemblage de polygones.
V0
V1
F0
F1
V2
V3
Rappels d’informatique graphique
On modélise les objets par la description de leur surface (b-rep).
Les surfaces sont décrites comme un ensemble de polygones.
L’ensemble des polygones forme un maillage (mesh).
Il existe de nombreuses manière d’encoder un maillage:
- liste de sommets (vertex),
- liste de triangles (face) avec ou sans adjacence,
- winged edge: http://en.wikipedia.org/wiki/Winged_edge
V0
V1
F0
F1
V2
V3
Rappels d’informatique graphique
Le pipeline de rendu
Rappels d’informatique graphique
Le pipeline de rendu
Les shaders
Les cartes 3D sont devenues de plus en plus flexible et
disposent maintenant d’un processeur programmable (le
GPU).
Un shader est un bout de code exécuté sur le GPU qui
modifie le rendu des objets 3D.
Les shaders
Le modèle de programmation est le suivant:
Les opérations sur les pixels (pixel shader)
Les opérations sur les vertex (vertex shader)
Les opérations sur les polygones (geometry shader)
Les shaders dans Unity
Il y a déjà de nombreux shaders d’objet par défauts:
http://docs.unity3d.com/Documentation/Components/Built-inShaderGuide.html
Il y a aussi des shaders de post-process qui s’appliquent sur
toute l’image générée par la caméra.
Les shaders dans Unity
On trouve aussi de nombreux shaders sur l’asset store.
Login: unityformation
Mdp: azertformation!
Programmation de shaders dans
Unity
Dans Unity on peut programmer ses propres Shaders:
- avec le langage propre à Unity (plutôt pour les graphistes)
http://docs.unity3d.com/Documentation/Components/SL-SubShader.html
- avec le langage Cg de NVIDIA (DirectX et OpenGL),
- avec le langage GLSL (Opengl).
Toute la doc est là:
http://docs.unity3d.com/Documentation/Components/SLReference.html
Programmation de shaders dans
Unity
Structure d’un pixel shader de surface avec Unity
Shader "MyShader" {
Properties {
// properties like colors, textures…
}
SubShader {
// - surface shader or
// - vertex and fragment shader
// - fixed function shader
}
SubShader {
// here goes a simpler version of the SubShader.
}
}
Programmation de shaders dans
Unity
Structure d’un pixel shader de surface avec Unity
Shader "Example/Diffuse Simple" {
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM #pragma surface surf Lambert
struct Input { float4 color : COLOR; };
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = 1;
}
ENDCG
}
Fallback "Diffuse"
}
Programmation de shaders dans
Unity
Structure d’un vertex shader (qui déplace les vertex suivant la
normale)
CGPROGRAM
#pragma surface surf Lambert vertex:vert
float
float4
_Displacement;
_Color;
void vert(inout appdata_full v) {
v.vertex.xyz += (v.normal.xyz * _Displacement);
}
…
ENDCG