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