- Home /
Help combining a dissolve shader and an outline shader,How can I combine these two shaders
Can anyone help me combine these two shaders? I failed my many attempts... Probably because I myself am a noob in shader coding, but I really need this to work.
It's between this Dissolve shader
Shader "Custom/Dissolve" {
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_SliceGuide("Slice Guide (RGB)", 2D) = "white" {}
_SliceAmount("Slice Amount", Range(0.0, 1.0)) = 0
_BurnSize("Burn Size", Range(0.0, 1.0)) = 0.15
_BurnRamp("Burn Ramp (RGB)", 2D) = "white" {}
_BurnColor("Burn Color", Color) = (1,1,1,1)
_EmissionAmount("Emission amount", float) = 2.0
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
Cull Off
CGPROGRAM
#pragma surface surf Lambert addshadow
#pragma target 3.0
fixed4 _Color;
sampler2D _MainTex;
sampler2D _SliceGuide;
sampler2D _BumpMap;
sampler2D _BurnRamp;
fixed4 _BurnColor;
float _BurnSize;
float _SliceAmount;
float _EmissionAmount;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
half test = tex2D(_SliceGuide, IN.uv_MainTex).rgb - _SliceAmount;
clip(test);
if (test < _BurnSize && _SliceAmount > 0) {
o.Emission = tex2D(_BurnRamp, float2(test * (1 / _BurnSize), 0)) * _BurnColor * _EmissionAmount;
}
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
. . . and this outline object shader
Shader "TSF/BaseOutline1"
{
Properties
{
[MaterialToggle(_TEX_ON)] _DetailTex ("Enable Detail texture", Float) = 0 //1
_MainTex ("Detail", 2D) = "white" {} //2
_ToonShade ("Shade", 2D) = "white" {} //3
[MaterialToggle(_COLOR_ON)] _TintColor ("Enable Color Tint", Float) = 0 //4
_Color ("Base Color", Color) = (1,1,1,1) //5
[MaterialToggle(_VCOLOR_ON)] _VertexColor ("Enable Vertex Color", Float) = 0//6
_Brightness ("Brightness 1 = neutral", Float) = 1.0 //7
_OutlineColor ("Outline Color", Color) = (0.5,0.5,0.5,1.0) //10
_Outline ("Outline width", Float) = 0.01 //11
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 250
Lighting Off
Fog { Mode Off }
UsePass "TSF/Base1/BASE"
Pass
{
Cull Front
ZWrite On
CGPROGRAM
#include "UnityCG.cginc"
#pragma fragmentoption ARB_precision_hint_fastest
#pragma glsl_no_auto_normalization
#pragma vertex vert
#pragma fragment frag
struct appdata_t
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f
{
float4 pos : SV_POSITION;
};
fixed _Outline;
v2f vert (appdata_t v)
{
v2f o;
o.pos = v.vertex;
o.pos.xyz += normalize(v.normal.xyz) *_Outline*0.01;
o.pos = UnityObjectToClipPos(o.pos);
return o;
}
fixed4 _OutlineColor;
fixed4 frag(v2f i) :COLOR
{
return _OutlineColor;
}
ENDCG
}
}
Fallback "Legacy Shaders/Diffuse"
}
,I can't seem to combine these two shaders. Can anyone help? I'm trying to achieve both outlined effect and the dissolve effect
I'd appreciate the feedback but I really need a solution towards it because I've no experience in shader coding.
Shader "TSF/BaseOutline1"
{
Properties
{
[MaterialToggle(_TEX_ON)] _DetailTex ("Enable Detail texture", Float) = 0 //1
_MainTex ("Detail", 2D) = "white" {} //2
_ToonShade ("Shade", 2D) = "white" {} //3
[MaterialToggle(_COLOR_ON)] _TintColor ("Enable Color Tint", Float) = 0 //4
_Color ("Base Color", Color) = (1,1,1,1) //5
[MaterialToggle(_VCOLOR_ON)] _VertexColor ("Enable Vertex Color", Float) = 0//6
_Brightness ("Brightness 1 = neutral", Float) = 1.0 //7
_OutlineColor ("Outline Color", Color) = (0.5,0.5,0.5,1.0) //10
_Outline ("Outline width", Float) = 0.01 //11
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 250
Lighting Off
Fog { Mode Off }
UsePass "TSF/Base1/BASE"
Pass
{
Cull Front
ZWrite On
CGPROGRAM
#include "UnityCG.cginc"
#pragma fragmentoption ARB_precision_hint_fastest
#pragma glsl_no_auto_normalization
#pragma vertex vert
#pragma fragment frag
struct appdata_t
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f
{
float4 pos : SV_POSITION;
};
fixed _Outline;
v2f vert (appdata_t v)
{
v2f o;
o.pos = v.vertex;
o.pos.xyz += normalize(v.normal.xyz) *_Outline*0.01;
o.pos = UnityObjectToClipPos(o.pos);
return o;
}
fixed4 _OutlineColor;
fixed4 frag(v2f i) :COLOR
{
return _OutlineColor;
}
ENDCG
}
}
Fallback "Legacy Shaders/Diffuse"
}
and
Shader "Custom/Dissolve" {
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_SliceGuide("Slice Guide (RGB)", 2D) = "white" {}
_SliceAmount("Slice Amount", Range(0.0, 1.0)) = 0
_BurnSize("Burn Size", Range(0.0, 1.0)) = 0.15
_BurnRamp("Burn Ramp (RGB)", 2D) = "white" {}
_BurnColor("Burn Color", Color) = (1,1,1,1)
_EmissionAmount("Emission amount", float) = 2.0
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
Cull Off
CGPROGRAM
#pragma surface surf Lambert addshadow
#pragma target 3.0
fixed4 _Color;
sampler2D _MainTex;
sampler2D _SliceGuide;
sampler2D _BumpMap;
sampler2D _BurnRamp;
fixed4 _BurnColor;
float _BurnSize;
float _SliceAmount;
float _EmissionAmount;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
half test = tex2D(_SliceGuide, IN.uv_MainTex).rgb - _SliceAmount;
clip(test);
if (test < _BurnSize && _SliceAmount > 0) {
o.Emission = tex2D(_BurnRamp, float2(test * (1 / _BurnSize), 0)) * _BurnColor * _EmissionAmount;
}
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
sorry the content seems doubled. I wasn't logged in previously and when the button said 'sign in and post' I signed in and the content was gone. So I rewrote my question.
now that I viewed the post, it seemed to record what I had previously input before I signed in. weird but yea...
Your answer

Follow this Question
Related Questions
Help about adding transparency to Roystan's toon shader 0 Answers
Silhouette overlay shader 0 Answers
Why doesn't clip shader work with shadows? 0 Answers
Modifying the depth buffer of an image effect? 0 Answers
Porting from ShaderToy(GLSL) to shaderlab(HLSL/CG) unity not giving me the desired result. 2 Answers