My Standard Shader
Introduction
/me
Rémi Bodin – 28 ans
Ingénieur développeur Unity3D chez Persistant Studios.
Premiers pas sur Unity3D en 20...
STANDARD SHADER
Standard Shader
Avant
Un Shader différent par « type » de rendu
Par exemple :
Main texture  Diffuse
Main texture + Normal...
Standard Shader
Maintenant
Un seul Shader qui fait la vie o/
Génial mais comment ca marche ?
LES BASES
Les Bases
Un shader est un programme exécuté par la carte graphique pour paramétrer une
partie du processus de rendu.
Un s...
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _Color;
void surf (Input IN, inout SurfaceOutput o)
{
o.Normal = UnpackNorm...
Les Bases
Il est donc conseillé de bien choisir le shader utilisé pour ne pas exécuter des
instructions inutiles.
Un shade...
Les bases
Un shader est un mini programme
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _ParallaxMap;
fixed4 _Color;
f...
COMMENT CA MARCHE ALORS ?
Comment ca marche alors ?
Les valeurs par defaut
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _ParallaxMap;
fixed4 _C...
Comment ca marche alors ?
Shader variants
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _ParallaxMap;
fixed4 _Color;
f...
Comment ca marche alors ?
CustomEditor
public class MyStandardShaderGUI : ShaderGUI
{
public override void OnGUI(MaterialE...
Comment ca marche alors ?
Et voila
_NO_BUMP _NO_PARALLAX _BUMP _NO_PARALLAX _BUMP _PARALLAX
QUESTIONS
Prochain SlideShare
Chargement dans…5
×

[Unity3D] My standard shader

657 vues

Publié le

Comment fonctionne le standard shader de unity 5 ?
Comprendre les "shaders variant".

Publié dans : Logiciels
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
657
Sur SlideShare
0
Issues des intégrations
0
Intégrations
39
Actions
Partages
0
Téléchargements
4
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

[Unity3D] My standard shader

  1. 1. My Standard Shader
  2. 2. Introduction /me Rémi Bodin – 28 ans Ingénieur développeur Unity3D chez Persistant Studios. Premiers pas sur Unity3D en 2009
  3. 3. STANDARD SHADER
  4. 4. Standard Shader Avant Un Shader différent par « type » de rendu Par exemple : Main texture  Diffuse Main texture + Normal map  Bumped Diffuse Main texture + Normal map + Height map  Parallax Diffuse
  5. 5. Standard Shader Maintenant Un seul Shader qui fait la vie o/ Génial mais comment ca marche ?
  6. 6. LES BASES
  7. 7. Les Bases Un shader est un programme exécuté par la carte graphique pour paramétrer une partie du processus de rendu. Un shader est un mini programme sampler2D _MainTex; fixed4 _Color; void surf (Input IN, inout SurfaceOutput o) { o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color; }
  8. 8. sampler2D _MainTex; sampler2D _BumpMap; fixed4 _Color; void surf (Input IN, inout SurfaceOutput o) { o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color; } Les Bases Son temps d’exécution dépend de sa complexité. Un shader est un mini programme
  9. 9. Les Bases Il est donc conseillé de bien choisir le shader utilisé pour ne pas exécuter des instructions inutiles. Un shader est un mini programme sampler2D _MainTex; sampler2D _BumpMap; sampler2D _ParallaxMap; fixed4 _Color; float _Parallax; void surf (Input IN, inout SurfaceOutput o) { half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w; float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir); IN.uv_MainTex += offset; IN.uv_BumpMap += offset; o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color; }
  10. 10. Les bases Un shader est un mini programme sampler2D _MainTex; sampler2D _BumpMap; sampler2D _ParallaxMap; fixed4 _Color; float _Parallax; void surf (Input IN, inout SurfaceOutput o) { half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w; float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir); IN.uv_MainTex += offset; IN.uv_BumpMap += offset; o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color; } Diffuse Bump diffuse Parallax diffuse
  11. 11. COMMENT CA MARCHE ALORS ?
  12. 12. Comment ca marche alors ? Les valeurs par defaut sampler2D _MainTex; sampler2D _BumpMap; sampler2D _ParallaxMap; fixed4 _Color; float _Parallax; void surf (Input IN, inout SurfaceOutput o) { half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w; float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir); IN.uv_MainTex += offset; IN.uv_BumpMap += offset; o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color; }
  13. 13. Comment ca marche alors ? Shader variants sampler2D _MainTex; sampler2D _BumpMap; sampler2D _ParallaxMap; fixed4 _Color; float _Parallax; #pragma shader_feature _NO_BUMP _BUMP #pragma shader_feature _NO_PARALLAX _PARALLAX void surf (Input IN, inout SurfaceOutput o) { #ifdef _PARALLAX half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w; float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir); IN.uv_MainTex += offset; IN.uv_BumpMap += offset; #endif #ifdef _BUMP o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); #endif o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color; } _NO_BUMP _NO_PARALLAX _BUMP _NO_PARALLAX _BUMP _PARALLAX _NO_BUMP _PARALLAX
  14. 14. Comment ca marche alors ? CustomEditor public class MyStandardShaderGUI : ShaderGUI { public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties) { Material targetMat = materialEditor.target as Material; base.OnGUI(materialEditor, properties); if (targetMat.GetTexture("_BumpMap")) targetMat.EnableKeyword("_BUMP"); else targetMat.DisableKeyword("_BUMP"); } }
  15. 15. Comment ca marche alors ? Et voila _NO_BUMP _NO_PARALLAX _BUMP _NO_PARALLAX _BUMP _PARALLAX
  16. 16. QUESTIONS

×