- 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