- Home /
Customize Standard Shader Light Rig - Help
Hi im trying to add a small customization to the new Standard Shader Light rig but im stuck.
I have downloaded the builtin shaders and found "what I thought" is the Standard light setup from inside the file called "UnityPBSLighting.cginc" and placed it into my shader but I cant get it to work?.... Am I doing anything wrong here?
Shader "Transparent/Alpha Test" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_BumpMap ("Normalmap", 2D) = "bump" {}
}
SubShader {
Tags {"Queue"="Transparent-1" "IgnoreProjector"="True" "RenderType"="Transparent"}
LOD 300
Cull Off
CGPROGRAM
#pragma surface surf CustomStandard alpha:fade noforwardadd
inline half4 LightingCustomStandard (SurfaceOutputStandard s, half3 viewDir, UnityGI gi)
{
s.Normal = normalize(s.Normal);
half oneMinusReflectivity;
half3 specColor;
s.Albedo = DiffuseAndSpecularFromMetallic (s.Albedo, s.Metallic, /*out*/ specColor, /*out*/ oneMinusReflectivity);
// shader relies on pre-multiply alpha-blend (_SrcBlend = One, _DstBlend = OneMinusSrcAlpha)
// this is necessary to handle transparency in physically correct way - only diffuse component gets affected by alpha
half outputAlpha;
s.Albedo = PreMultiplyAlpha (s.Albedo, s.Alpha, oneMinusReflectivity, /*out*/ outputAlpha);
half4 c = UNITY_BRDF_PBS (s.Albedo, specColor, oneMinusReflectivity, s.Smoothness, s.Normal, viewDir, gi.light, gi.indirect);
c.rgb += UNITY_BRDF_GI (s.Albedo, specColor, oneMinusReflectivity, s.Smoothness, s.Normal, viewDir, s.Occlusion, gi);
c.a = outputAlpha;
return c;
}
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _Color;
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
};
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
}
I get syntax errors on these lines from the above code
"inline half4 LightingCustomStandard (SurfaceOutputStandard s, half3 viewDir, UnityGI gi)"
"void surf (Input IN, inout SurfaceOutputStandard o) {"
"fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;"
Am I missing something or is this just all wrong?
Answer by Earlybird · May 05, 2015 at 10:07 AM
The new standard light rig requires a GI function to work correctly, also I needed to include the UnityPBSLighting.cginc file and now its working
The pragma should look something like this:
#pragma surface surf CustomStandard fullforwardshadows
#include "UnityPBSLighting.cginc"
This is the light rig and gi function I copied from the above file which you can customize as required.
inline half4 LightingCustomStandard (SurfaceOutputStandard s, half3 viewDir, UnityGI gi)
{
s.Normal = normalize(s.Normal);
half oneMinusReflectivity;
half3 specColor;
s.Albedo = DiffuseAndSpecularFromMetallic (s.Albedo, s.Metallic, /*out*/ specColor, /*out*/ oneMinusReflectivity);
// shader relies on pre-multiply alpha-blend (_SrcBlend = One, _DstBlend = OneMinusSrcAlpha)
// this is necessary to handle transparency in physically correct way - only diffuse component gets affected by alpha
half outputAlpha;
s.Albedo = PreMultiplyAlpha (s.Albedo, s.Alpha, oneMinusReflectivity, /*out*/ outputAlpha);
//Added a Power Ramp to allow the ability to adjust the lighting through the material
half4 c = UNITY_BRDF_PBS (s.Albedo, specColor, oneMinusReflectivity, s.Smoothness, s.Normal, viewDir, gi.light, gi.indirect);
c.rgb += UNITY_BRDF_GI (s.Albedo, specColor, oneMinusReflectivity, s.Smoothness, s.Normal, viewDir, s.Occlusion, gi);
c.a = outputAlpha;
return c;
}
//New Standard Lighting model requires a GI function
inline void LightingCustomStandard_GI (
SurfaceOutputStandard s,
UnityGIInput data,
inout UnityGI gi)
{
gi = UnityGlobalIllumination (data, s.Occlusion, s.Smoothness, s.Normal);
}
At least this is working for me :)
Your answer
Follow this Question
Related Questions
Light color in a fragment shader? 0 Answers
Point Lights only displaying in editor on custom shader 0 Answers
Terrain + Standard shader? 1 Answer
How do I make this shader accept the default unity lighting? 3 Answers
Marmoset + Unity 4 vs Unity 5 Lighting 0 Answers