- Home /
Need assistance in converting shader to work it in LightWeight SRP
Hello Guys! Im currently working on making outline and found shader that works great in core unity, but in lightweight main material turns pink and outline exists, but is invisible. Unfortunatly im total newbie in shader coding, so maybe some help in converting this shader to work in LWRP ?
[code=CSharp]// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Outlined/Silhouetted Diffuse" {
Properties {
_Color ("Main Color", Color) = (.5,.5,.5,1)
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
_Outline ("Outline width", Range (0.0, 0.1)) = .005
_MainTex ("Base (RGB)", 2D) = "white" { }
}
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
Name "OUTLINE"
Tags { "LightMode" = "Always" }
Cull Off
ZWrite Off
ZTest Always
ColorMask RGB // alpha not used
// you can choose what kind of blending mode you want for the outline
Blend SrcAlpha OneMinusSrcAlpha // Normal
//Blend One One // Additive
//Blend One OneMinusDstColor // Soft Additive
//Blend DstColor Zero // Multiplicative
//Blend DstColor SrcColor // 2x Multiplicative
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 color : COLOR;
};
struct v2f {
float4 pos : POSITION;
float4 color : COLOR;
};
uniform float _Outline;
uniform float4 _OutlineColor;
v2f vert(appdata v) {
v2f o;
v.vertex.xyz += v.color * _Outline;
o.pos = UnityObjectToClipPos(v.vertex);
o.color = _OutlineColor;
return o;
}
half4 frag(v2f i) :COLOR {
return i.color;
}
ENDCG
}
Pass {
Name "BASE"
ZWrite On
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
Material {
Diffuse [_Color]
Ambient [_Color]
}
Lighting On
SetTexture [_MainTex] {
ConstantColor [_Color]
Combine texture * constant
}
SetTexture [_MainTex] {
Combine previous * primary DOUBLE
}
}
}
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
Name "OUTLINE"
Tags { "LightMode" = "Always" }
Cull Front
ZWrite Off
ZTest Always
ColorMask RGB
// you can choose what kind of blending mode you want for the outline
Blend SrcAlpha OneMinusSrcAlpha // Normal
//Blend One One // Additive
//Blend One OneMinusDstColor // Soft Additive
//Blend DstColor Zero // Multiplicative
//Blend DstColor SrcColor // 2x Multiplicative
CGPROGRAM
#pragma vertex vert
#pragma exclude_renderers gles xbox360 ps3
ENDCG
SetTexture [_MainTex] { combine primary }
}
Pass {
Name "BASE"
ZWrite On
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
Material {
Diffuse [_Color]
Ambient [_Color]
}
Lighting On
SetTexture [_MainTex] {
ConstantColor [_Color]
Combine texture * constant
}
SetTexture [_MainTex] {
Combine previous * primary DOUBLE
}
}
}
Fallback "Diffuse"
}[/code]
Answer by HunterNacho338 · Sep 27, 2018 at 09:28 PM
Built-in and custom Lit Shaders do not work with the Lightweight Render Pipeline. Instead, LWRP has a new set of standard shaders. If you upgrade a current Project to LWRP, you can upgrade built-in shaders to the new ones.
https://github.com/Unity-Technologies/ScriptableRenderPipeline/wiki/Getting-started-with-LWRP
Unfortunatly upgaring button didnt work :(
Redline material was not upgraded. There's no upgrader to convert Outlined/Silhouetted Diffuse shader to selected pipeline UnityEditor.Experimental.Rendering.LightweightPipeline.Lightweight$$anonymous$$aterialUpgrader:UpgradeSelected$$anonymous$$aterials()
for me unity console log this: $$anonymous$$atCubeGraph material was not upgraded. There's no upgrader to convert Custom/CubeGraph shader to selected pipeline
shader is just simple standard surf shader
Your answer

Follow this Question
Related Questions
How to force the compilation of a shader in Unity? 5 Answers
UnityObjectToClipPos is inverted? 0 Answers
Sizeof float in cg shader 1 Answer
Objects Go Into Shadow as Soon as They are Outside of a Point Light's Range 1 Answer
Find out if an object is in front of a target in fragment shader? 0 Answers