Написал 2 шейдера:
первый
Синтаксис:
Используется glsl
Shader "Level Visibility" {
Properties {
_Color0 ("Dark", Color) = (0.25,0.25,0.25,1)
_Color1 ("Light", Color) = (0.5,0.5,0.5,1)
_maxlight ("Max intensity", Range (0.1, 8.0)) = 1.0
_vis ("Level Visibility", Range (0.0, 1.0)) = 0.0
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf WrapLambert
float4 _Color0, _Color1, _c01, col;
float _vis;
float _maxlight;
float lvis = 0.0f;
struct Input {
float a;
};
half4 LightingWrapLambert (SurfaceOutput s, half3 lightDir, half atten) {
half NdotL = dot (s.Normal, lightDir);
half4 c;
lvis = _LightColor0.s;
s.Albedo = s.Albedo * _LightColor0.s;
c.rgb = s.Albedo;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o) {
_c01 = _Color1 - _Color0;
o.Albedo = _Color0.rgb + _c01 * lvis;
}
ENDCG
}
}
Properties {
_Color0 ("Dark", Color) = (0.25,0.25,0.25,1)
_Color1 ("Light", Color) = (0.5,0.5,0.5,1)
_maxlight ("Max intensity", Range (0.1, 8.0)) = 1.0
_vis ("Level Visibility", Range (0.0, 1.0)) = 0.0
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf WrapLambert
float4 _Color0, _Color1, _c01, col;
float _vis;
float _maxlight;
float lvis = 0.0f;
struct Input {
float a;
};
half4 LightingWrapLambert (SurfaceOutput s, half3 lightDir, half atten) {
half NdotL = dot (s.Normal, lightDir);
half4 c;
lvis = _LightColor0.s;
s.Albedo = s.Albedo * _LightColor0.s;
c.rgb = s.Albedo;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o) {
_c01 = _Color1 - _Color0;
o.Albedo = _Color0.rgb + _c01 * lvis;
}
ENDCG
}
}
Увеличивает яркость объекта (использую куб) при попадании на свет. Усиление подсветки происходит пропорционально интенсивности источника света (использую SpotLight), но не зависит от расстояния до источника света.
второй
Синтаксис:
Используется glsl
Shader "Level Visibility" {
Properties {
_Color0 ("Dark", Color) = (0.25,0.25,0.25,1)
_Color1 ("Light", Color) = (0.5,0.5,0.5,1)
_maxlight ("Max intensity", Range (0.1, 8.0)) = 1.0
_vis ("Level Visibility", Range (0.0, 1.0)) = 0.5
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf WrapLambert
float4 _Color0, _Color1, _c01;
float _vis;
float _maxlight;
float lvis;
struct Input {
float a;
};
half4 LightingWrapLambert (SurfaceOutput s, half3 lightDir, half atten) {
half NdotL = dot (s.Normal, lightDir);
half4 c;
lvis = (atten / _maxlight);
c.rgb = s.Albedo * lvis;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o) {
_c01 = _Color1 - _Color0;
o.Albedo = _Color0.rgb + _c01 * lvis;
}
ENDCG
}
}
Properties {
_Color0 ("Dark", Color) = (0.25,0.25,0.25,1)
_Color1 ("Light", Color) = (0.5,0.5,0.5,1)
_maxlight ("Max intensity", Range (0.1, 8.0)) = 1.0
_vis ("Level Visibility", Range (0.0, 1.0)) = 0.5
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf WrapLambert
float4 _Color0, _Color1, _c01;
float _vis;
float _maxlight;
float lvis;
struct Input {
float a;
};
half4 LightingWrapLambert (SurfaceOutput s, half3 lightDir, half atten) {
half NdotL = dot (s.Normal, lightDir);
half4 c;
lvis = (atten / _maxlight);
c.rgb = s.Albedo * lvis;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o) {
_c01 = _Color1 - _Color0;
o.Albedo = _Color0.rgb + _c01 * lvis;
}
ENDCG
}
}
Свет просто льется на куб, не подсвечивая его полностью. Световое пятно на кубе того же цвета что и куб (а не цвета луча), но зато яркость пятна увеличивается при приближении к источнику света. То бишь как обычное освещение, только с цветом самого объекта.
Помогите объединить эти два эффекта в один шейдер.
Делаю шейдеры первый раз.