Как только открываю больше трех проверок шейдер крашится, хотя до трех все ок (ну почти, так как результат пока не совсем тот что нужно)
Синтаксис:
Используется csharp
Shader "Custom/MultiColorCubeShader"
{
Properties
{
_Color1 ("Code Color 1", Color) = (1,1,0,0)
_Color2 ("Code Color 2", Color) = (0,0,1,0)
_Color3 ("Code Color 3", Color) = (1,0,0,0)
_FaceMask1 ("Face 1 Mask", 2D) = "face1" {}
_FaceMask2 ("Face 2 Mask", 2D) = "face2" {}
_FaceMask3 ("Face 3 Mask", 2D) = "face3" {}
_FaceMask4 ("Face 4 Mask", 2D) = "face4" {}
_FaceMask5 ("Face 5 Mask", 2D) = "face5" {}
_FaceMask6 ("Face 6 Mask", 2D) = "face6" {}
_FaceCode1 ("Face 1 Code", Float) = 0
_FaceCode2 ("Face 2 Code", Float) = 0
_FaceCode3 ("Face 3 Code", Float) = 0
_FaceCode4 ("Face 4 Code", Float) = 0
_FaceCode5 ("Face 5 Code", Float) = 0
_FaceCode6 ("Face 6 Code", Float) = 0
_Color ("Main Color", Color) = (1,1,1,0)
_MainTex ("Base (RGB)", 2D) = "white" {}
_BumpMap ("Bump map", 2D) = "bump" {}
}
SubShader //пиксельный Surface + bump
{
Tags { "RenderType"="Opaque" }
LOD 300
CGPROGRAM
#pragma surface surf BlinnPhong
struct Input
{
float2 uv_MainTex;
float2 uv_BumpMap;
};
sampler2D _MainTex,_BumpMap;
float4 _Color,_Color1,_Color2,_Color3;
sampler2D _FaceMask1,_FaceMask2,_FaceMask3,_FaceMask4,_FaceMask5,_FaceMask6;
float _FaceCode1;
float _FaceCode2;
float _FaceCode3,_FaceCode4,_FaceCode5,_FaceCode6;
float _Shininess;
void surf (Input IN, inout SurfaceOutput o)
{
half4 c = tex2D(_MainTex, IN.uv_MainTex);
half4 face1 = tex2D(_FaceMask1, IN.uv_MainTex);
half4 face2 = tex2D(_FaceMask2, IN.uv_MainTex);
half4 face3 = tex2D(_FaceMask3, IN.uv_MainTex);
half4 face4 = tex2D(_FaceMask4, IN.uv_MainTex);
half4 face5 = tex2D(_FaceMask5, IN.uv_MainTex);
half4 face6 = tex2D(_FaceMask6, IN.uv_MainTex);
c.a = 1-c.a;
if (_FaceCode1 == 1) {
c.rbg = c.rbg * ( face1.rbg + _Color1.rbg );
}
// if (_FaceCode1 == 2) {
// c.rbg = c.rbg * ( face1.rbg + _Color2.rbg );
// }
// if (_FaceCode1 == 3) {
// c.rbg = c.rbg * ( face1.rbg + _Color3.rbg );
// }
//
//
if (_FaceCode2 == 1) {
c.rbg = c.rbg * ( face2.rbg + _Color1.rbg );
}
// if (_FaceCode2 == 2) {
// c.rbg = c.rbg * ( face2.rbg + _Color2.rbg );
// }
// if (_FaceCode2 == 3) {
// c.rbg = c.rbg * ( face2.rbg + _Color3.rbg );
// }
//
//
// if (_FaceCode3 == 1) {
// c.rbg = c.rbg * ( face3.rbg + _Color1.rbg );
// }
if (_FaceCode3 == 2) {
c.rbg = c.rbg * ( face3.rbg + _Color2.rbg );
}
// if (_FaceCode3 == 3) {
// c.rbg = c.rbg * ( face3.rbg + _Color3.rbg );
// }
//
//
// if (_FaceCode4 == 1) {
// c.rbg = c.rbg * ( face4.rbg + _Color1.rbg );
// }
// if (_FaceCode4 == 2) {
// c.rbg = c.rbg * ( face4.rbg + _Color2.rbg );
// }
// if (_FaceCode4 == 3) {
// c.rbg = c.rbg * ( face4.rbg + _Color3.rbg );
// }
//
//
// if (_FaceCode5 == 1) {
// c.rbg = c.rbg * ( face5.rbg + _Color1.rbg );
// }
// if (_FaceCode5 == 2) {
// c.rbg = c.rbg * ( face5.rbg + _Color2.rbg );
// }
// if (_FaceCode5 == 3) {
// c.rbg = c.rbg * ( face5.rbg + _Color3.rbg );
// }
//
//
// if (_FaceCode6 == 1) {
// c.rbg = c.rbg * ( face6.rbg + _Color1.rbg );
// }
// if (_FaceCode6 == 2) {
// c.rbg = c.rbg * ( face6.rbg + _Color2.rbg );
// }
// if (_FaceCode6 == 3) {
// c.rbg = c.rbg * ( face6.rbg + _Color3.rbg );
// }
o.Albedo = c.rbg * _Color.rbg; //lerp(c.rgb * _Color.rgb,_Color2, c.a );
o.Alpha = _Color.a;
//o.Gloss = c.a;
o.Specular = _Shininess;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
SubShader //вертексный шейдер
{
Pass
{
Material
{
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emission]
}
Lighting On
SeparateSpecular On
// SetTexture [_MainTex]
// {
// combine texture lerp (texture) constant
// constantColor [_Color2]
// }
// SetTexture [_MainTex]
// {
// combine primary * previous double
// }
}
}
FallBack "VertexLit"
}
{
Properties
{
_Color1 ("Code Color 1", Color) = (1,1,0,0)
_Color2 ("Code Color 2", Color) = (0,0,1,0)
_Color3 ("Code Color 3", Color) = (1,0,0,0)
_FaceMask1 ("Face 1 Mask", 2D) = "face1" {}
_FaceMask2 ("Face 2 Mask", 2D) = "face2" {}
_FaceMask3 ("Face 3 Mask", 2D) = "face3" {}
_FaceMask4 ("Face 4 Mask", 2D) = "face4" {}
_FaceMask5 ("Face 5 Mask", 2D) = "face5" {}
_FaceMask6 ("Face 6 Mask", 2D) = "face6" {}
_FaceCode1 ("Face 1 Code", Float) = 0
_FaceCode2 ("Face 2 Code", Float) = 0
_FaceCode3 ("Face 3 Code", Float) = 0
_FaceCode4 ("Face 4 Code", Float) = 0
_FaceCode5 ("Face 5 Code", Float) = 0
_FaceCode6 ("Face 6 Code", Float) = 0
_Color ("Main Color", Color) = (1,1,1,0)
_MainTex ("Base (RGB)", 2D) = "white" {}
_BumpMap ("Bump map", 2D) = "bump" {}
}
SubShader //пиксельный Surface + bump
{
Tags { "RenderType"="Opaque" }
LOD 300
CGPROGRAM
#pragma surface surf BlinnPhong
struct Input
{
float2 uv_MainTex;
float2 uv_BumpMap;
};
sampler2D _MainTex,_BumpMap;
float4 _Color,_Color1,_Color2,_Color3;
sampler2D _FaceMask1,_FaceMask2,_FaceMask3,_FaceMask4,_FaceMask5,_FaceMask6;
float _FaceCode1;
float _FaceCode2;
float _FaceCode3,_FaceCode4,_FaceCode5,_FaceCode6;
float _Shininess;
void surf (Input IN, inout SurfaceOutput o)
{
half4 c = tex2D(_MainTex, IN.uv_MainTex);
half4 face1 = tex2D(_FaceMask1, IN.uv_MainTex);
half4 face2 = tex2D(_FaceMask2, IN.uv_MainTex);
half4 face3 = tex2D(_FaceMask3, IN.uv_MainTex);
half4 face4 = tex2D(_FaceMask4, IN.uv_MainTex);
half4 face5 = tex2D(_FaceMask5, IN.uv_MainTex);
half4 face6 = tex2D(_FaceMask6, IN.uv_MainTex);
c.a = 1-c.a;
if (_FaceCode1 == 1) {
c.rbg = c.rbg * ( face1.rbg + _Color1.rbg );
}
// if (_FaceCode1 == 2) {
// c.rbg = c.rbg * ( face1.rbg + _Color2.rbg );
// }
// if (_FaceCode1 == 3) {
// c.rbg = c.rbg * ( face1.rbg + _Color3.rbg );
// }
//
//
if (_FaceCode2 == 1) {
c.rbg = c.rbg * ( face2.rbg + _Color1.rbg );
}
// if (_FaceCode2 == 2) {
// c.rbg = c.rbg * ( face2.rbg + _Color2.rbg );
// }
// if (_FaceCode2 == 3) {
// c.rbg = c.rbg * ( face2.rbg + _Color3.rbg );
// }
//
//
// if (_FaceCode3 == 1) {
// c.rbg = c.rbg * ( face3.rbg + _Color1.rbg );
// }
if (_FaceCode3 == 2) {
c.rbg = c.rbg * ( face3.rbg + _Color2.rbg );
}
// if (_FaceCode3 == 3) {
// c.rbg = c.rbg * ( face3.rbg + _Color3.rbg );
// }
//
//
// if (_FaceCode4 == 1) {
// c.rbg = c.rbg * ( face4.rbg + _Color1.rbg );
// }
// if (_FaceCode4 == 2) {
// c.rbg = c.rbg * ( face4.rbg + _Color2.rbg );
// }
// if (_FaceCode4 == 3) {
// c.rbg = c.rbg * ( face4.rbg + _Color3.rbg );
// }
//
//
// if (_FaceCode5 == 1) {
// c.rbg = c.rbg * ( face5.rbg + _Color1.rbg );
// }
// if (_FaceCode5 == 2) {
// c.rbg = c.rbg * ( face5.rbg + _Color2.rbg );
// }
// if (_FaceCode5 == 3) {
// c.rbg = c.rbg * ( face5.rbg + _Color3.rbg );
// }
//
//
// if (_FaceCode6 == 1) {
// c.rbg = c.rbg * ( face6.rbg + _Color1.rbg );
// }
// if (_FaceCode6 == 2) {
// c.rbg = c.rbg * ( face6.rbg + _Color2.rbg );
// }
// if (_FaceCode6 == 3) {
// c.rbg = c.rbg * ( face6.rbg + _Color3.rbg );
// }
o.Albedo = c.rbg * _Color.rbg; //lerp(c.rgb * _Color.rgb,_Color2, c.a );
o.Alpha = _Color.a;
//o.Gloss = c.a;
o.Specular = _Shininess;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
SubShader //вертексный шейдер
{
Pass
{
Material
{
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emission]
}
Lighting On
SeparateSpecular On
// SetTexture [_MainTex]
// {
// combine texture lerp (texture) constant
// constantColor [_Color2]
// }
// SetTexture [_MainTex]
// {
// combine primary * previous double
// }
}
}
FallBack "VertexLit"
}