- Home /
Question by
kkl888 · Jul 12, 2018 at 08:13 AM ·
lightingsurface shadersecondlighting-model
Get second light data from surface shader custom lighting model
How can we get second light data such as light direction, light color, light attenuation and view direction from surface shader?
Here's the code I'm using now:
Shader "Mobile/Bumped Specular" {
Properties {
[PowerSlider(5.0)] _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
[NoScaleOffset] _BumpMap ("Normalmap", 2D) = "bump" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 250
CGPROGRAM
#pragma surface surf MobileBlinnPhong exclude_path:prepass nolightmap noforwardadd halfasview interpolateview
inline fixed4 LightingMobileBlinnPhong (SurfaceOutput s, fixed3 lightDir, fixed3 halfDir, fixed atten)
{
fixed diff = max (0, dot (s.Normal, lightDir));
fixed nh = max (0, dot (s.Normal, halfDir));
fixed spec = pow (nh, s.Specular*128) * s.Gloss;
fixed4 c;
c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * atten;
UNITY_OPAQUE_ALPHA(c.a);
return c;
}
sampler2D _MainTex;
sampler2D _BumpMap;
half _Shininess;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = tex.rgb;
o.Gloss = tex.a;
o.Alpha = tex.a;
o.Specular = _Shininess;
o.Normal = UnpackNormal (tex2D(_BumpMap, IN.uv_MainTex));
}
ENDCG
}
FallBack "Mobile/VertexLit"
}
The custom lighting model provides only first light data.
Comment
Your answer
Follow this Question
Related Questions
How to fix this point light bug in surface shader? 1 Answer
Realtime lights causing ugly banding effect 1 Answer
Baked Lightmaps never finish baking in Unity - what is a minimum "test bake" light setting? 0 Answers
Refraction Surface Shader Upside down 1 Answer
Different lighting in grabpass 1 Answer