Get lighting properties of standard shader
Hello I'am making a custom shader for the purpose of making Cutteable objects with a plane, it works but I'am seeing a difference in how the lighting perfoms on the object if I changed it between standard and custom. Like in the image:
So, how can I replicate the lighting properties of the standard shader so that its equal to the custom shader? Here is the code of my shader:
Shader "Holistic/StandardCut" {
Properties {
_OuterTex ("Albedo", 2D) = "white" {}
_NormMap("Normal Map", 2D) = "normal" {}
_Metallic ("Metallic", 2D) = "White" {}
_ColorEmission("Emission Color", Color) = (0,0,0,1)
[Gamma] _Smoothness("Smoothness", Range(0, 1)) = 0
[Gamma] _Occlusion("Occlusion", Range(0,1)) = 0
_Color ("Inner Color", Color) = (1,1,1,1)
[Toggle] _Cutted ("Cutteable", Float) = 0
[HideInInspector]_PlaneNormal("PlaneNormal",Vector) = (0,1,0,0)
[HideInInspector]_PlanePosition("PlanePosition",Vector) = (0,0,0,1)
}
SubShader {
Tags { "Queue"="Transparent" }
// PASS 1
CGPROGRAM
#pragma surface surf Standard
struct Input {
float3 worldPos;
float2 uv_OuterTex;
};
sampler2D _OuterTex;
sampler2D _NormMap;
sampler2D _Metallic;
half3 _ColorEmission;
fixed _Smoothness;
fixed _Occlusion;
fixed3 _PlaneNormal;
fixed3 _PlanePosition;
fixed _Cutted;
void surf(Input IN, inout SurfaceOutputStandard o)
{
clip(dot((IN.worldPos.xyz - _PlanePosition) * _Cutted, _PlaneNormal));
o.Albedo = tex2D(_OuterTex, IN.uv_OuterTex).rgb;
o.Normal = tex2D(_NormMap, IN.uv_OuterTex);
o.Emission = _ColorEmission.rgb;
o.Metallic = tex2D(_Metallic, IN.uv_OuterTex).r;
o.Smoothness = _Smoothness;
o.Occlusion = _Occlusion;
}
ENDCG
// PASS 2
Pass {
ZTest Less
Cull front
ZWrite On
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 worldPos : TEXCOORD1;
};
float _Val;
fixed4 _Color;
v2f vert(appdata v)
{
v2f o;
o.uv = v.texcoord;
o.pos = UnityObjectToClipPos(v.vertex);
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
return o;
}
sampler2D _SectionTex;
fixed3 _PlaneNormal;
fixed3 _PlanePosition;
float _Cutted;
fixed4 frag(v2f i) : SV_Target {
clip(dot((i.worldPos.xyz - _PlanePosition) * _Cutted, _PlaneNormal));
return _Color;
}
ENDCG
}
}
//FallBack "VertexLit"
}
difference.png
(462.9 kB)
Comment