Hello,
in a Unity3D CG shader I would like to access the nearest point light's color and direction and output a computed color as the shaded object's color in my custom lighting function. (The custom lighting function is run after the surf function which I deduced from the out parameter in the surf function and the in parameter in the light function.)
My scene has several point lights and 1 directional light.
What are the required variables names? According to https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html it is _LightColor0 ? And the lightDir parameter? Which direction are the *x*Dir parameters from to?
What I want to achieve is having a sphere around a point light be colored by the color of the point light, accounting for view direction (ie. plasticity of sphere). The sphere and the light is a firework particle. The sphere's normals are pointing from the center outside, parallel to the point light direction. Unity3D's built-in shader don't color the sphere probably because of that very reason of the sphere's normals. Inverting the sphere's normals occludes the point light.
Here's my current shader code:
Shader "Custom/Firework" {
Properties {
_Transparency ("Transparency", Range(0,1)) = 0.5
}
SubShader {
Tags { "RenderType"="Transparent" "LightMode"="ForwardBase" }
LOD 200
CGPROGRAM
#pragma surface surf InnerLight
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
struct Input {
float2 uv_MainTex;
};
float _Transparency;
void surf (Input IN, inout SurfaceOutput o) {
o.Alpha = _Transparency;
}
half4 LightingInnerLight (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {
half4 c;
c.rgb = dot(lightDir, viewDir) * atten * _LightColor0.rgb;
c.a = s.Alpha;
return c;
}
ENDCG
}
FallBack "Diffuse"
}
↧





