Я работал над своей игрой в Unity и начал экспериментировать с шейдерами. Я использовал какой-то код из другого проекта, и я не до конца понимаю, как он работает, поэтому я надеялся на объяснение и то, как достичь своей цели.
У меня есть два шейдера, один для «основания», которые представляют собой 2d плиткии другой для другого для объектов поверх этих плиток "tilables". Я хочу контролировать яркость плитки, поскольку я внедряю систему освещения. Запасной шейдер имеет возможность вносить эти изменения, а основной шейдер - нет.
Как я могу изменить свой шейдер основания, чтобы я мог изменять цвет и яркость в единстве. До сих пор, когда я использую шейдер tilables для основания, он работает, но я теряю детализацию на плитках. Почему это происходит и как я могу это исправить?
Шейдер Grounds
Shader "Fy/Grounds"
{
Properties
{
_MainTex ("Main texture", 2D) = "white" {}
}
SubShader
{
Cull Back
Lighting Off
ZWrite Off
Tags { "Queue"="Transparent" }
Blend One OneMinusSrcAlpha
LOD 200
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
#include "UnityCG.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
fixed4 color: COLOR;
};
v2f vert(appdata_full v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.color = v.color;
//
o.uv = v.vertex.xy/4;
return o;
}
half4 frag (v2f i) : COLOR {
half4 texcol = tex2D(_MainTex, i.uv.xy) * i.color.a;
return texcol;
}
ENDCG
}
}
}
Tilables Shader
Shader "Fy/Tilables"
{
Properties
{
_MainTex ("Main texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
}
SubShader
{
Cull Back
Lighting Off
ZWrite Off
Tags { "Queue"="Transparent" }
Blend SrcAlpha OneMinusSrcAlpha
LOD 200
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_instancing
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
float4 _Color;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
v2f vert(appdata_full v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
void frag (v2f i, out half4 outDiffuse : SV_Target0) {
UNITY_SETUP_INSTANCE_ID(i);
outDiffuse = tex2D(_MainTex, i.uv) * _Color;
}
ENDCG
}
}
}
Кто-нибудь может посоветовать это? Спасибо.