- Home /
 
Extruded Surface Shader + Inner Fill Color
I'm trying to make a shader that runs in two passes. First, it creates an "outline" for the 3D model by extruding the verts of the model, and culling the front faces. This makes a sort of hollow shell of the model that's expanded by a few units from its original size.
After that, I want to make a solid color filled version of the original model, with the front faces rendered. The effect will be so I can have one pass creating a glow effect as the border of the model, and another pass as a solid color fill-in. Think a solid red human figure with a bright blue glowing outline.
I've got the extrusion and frontface culling down, but I can't figure out how to run another pass after that that uses the original verts of the model to just render a simple lit color.
Here's my code:
 //first subshader extrudes model's verts, culls front
 SubShader {
 
     Tags { "RenderType"="Opaque" }
     LOD 200
 
     //Cull the front
     ZWrite On
     ZTest NotEqual
     Cull Front
 
     CGPROGRAM
 
 
     #pragma surface surf Lambert vertex:vert
 
     sampler2D _MainTex;
     sampler2D _Illum;
     fixed4 _DiffuseColor;
     fixed4 _EmissionColor;
     float _EmissionGain;
     float _EmissionTextureContrast;
 
     float _VXAmount;
 
 
     struct Input {
         float2 uv_MainTex;
         float2 uv_Illum;
     };
     //extrudes the verts
     void vert(inout appdata_full v) {
         v.vertex.xyz += v.normal * _VXAmount;
     }
 
     //this all provides a nice glowing emissive color effect
     void surf (Input IN, inout SurfaceOutput o) {
         //fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
         //fixed4 c = tex * _DiffuseColor;
         fixed4 c = _DiffuseColor;
         o.Albedo = c.rgb;
         fixed3 emissTex = tex2D(_Illum, IN.uv_Illum).rgb;
         float emissL = max(max(emissTex.r, emissTex.g), emissTex.b);
         fixed3 emissN = emissTex / (emissL + 0.0001);
         emissL = pow(emissL, _EmissionTextureContrast);
         emissTex = emissN * emissL;
         
         o.Emission = _EmissionColor * emissTex * (exp(_EmissionGain * 10.0f));
         o.Alpha = c.a;
 
     }
 
     ENDCG
 
 }
 
 
 //My failed attempt at getting the inner color to render
 
 SubShader {
 
     Pass {
 
         Cull Back
 
         Material {
             Emission[_OutlineColor]
         }
 
         ColorMaterial AmbientAndDiffuse
         Lighting On
     }    
 }
 
 FallBack "Self-Illumin/VertexLit"
 
 }
 
               Hugely appreciate any help!
Your answer
 
             Follow this Question
Related Questions
shader material showing over every object. 0 Answers
Outlining simple objects without artifacts 0 Answers
Drawing silhouette shader 0 Answers
How can I edit the built in shaders? 1 Answer
Unity selection outline shader 0 Answers