Jul
3
2016

Fake Tube Light Shader

fakelinelight

Tried to test idea about tube lights (or “line light”), by using custom lighting in shader,
you could sample the light several times from different positions/angles,
so that it looks like the light is not just a single point. (not really working here properly yet, but kind of gives the effect, so it might be possible)

Source: *Light direction is animated in shader to show the effect


Shader "Custom/FakeTubeishLight"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
CGPROGRAM
#pragma surface surf SimpleSpecular
half4 LightingSimpleSpecular (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {
half4 c = half4(0,0,0,0);
int steps = 16;
// sample light many times with different values
for(int i=0;i<steps;i++)
{
half3 l = lerp(half3(1,1,i),half3(i,1,1),fmod(_Time.x*10,1));
half3 h = normalize (lightDir*l + viewDir);
half diff = max (0, dot (s.Normal, lightDir*l));
float nh = max (0, dot (s.Normal, h));
float spec = pow (nh, 10.0);
c.rgb += (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * atten;
}
c.rgb /=steps;
c.a = s.Alpha;
return c;
}
struct Input {
float2 uv_MainTex;
};
sampler2D _MainTex;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
}
ENDCG
}
}

If you want real Area Lights, check:
– UnityLabs : https://labs.unity.com/article/real-time-polygonal-light-shading-linearly-transformed-cosines
– Lux : http://forum.unity3d.com/threads/lux-an-open-source-physically-based-shading-framework.235027/page-23#post-2618971


Leave a comment

Connect

Twitter View LinkedIn profile Youtube Github Join Discord Twitch Instagram BlueSky

UnityLauncherPro

Get UnityLauncherPRO and work faster with Unity Projects!
*free unity hub alternative

@unitycoder_com

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.