Harald
We are using SkeletonAnimation(SkeletonMesh + MeshRenderer).
I've made a custom shader to control some parameters since our characters waddle through water.
Properties{
_Color ("Tint Color", Color) = (1,1,1,1)
_Black ("Dark Color", Color) = (0,0,0,0)
[NoScaleOffset] _MainTex("Main Texture", 2D) = "black" {}
_Cutoff("Shadow alpha cutoff", Range(0,1)) = 0.1
_WaterSurface("Water surface", Float) = 0.1
_MaskHeight("Mask height", Float) = 0.1
_MaskWidth("Mask width", Float) = 0.5
}
SubShader{
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" }
Fog { Mode Off }
Cull Off
ZWrite Off
Blend One OneMinusSrcAlpha
Lighting Off
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _Color;
float4 _Black;
float _WaterSurface;
float _MaskHeight;
float _MaskWidth;
fixed _CutOff;
struct VertexInput {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float4 vertexColor : COLOR;
};
struct VertexOutput {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float3 worldPos : TEXCOORD1;
float4 vertexColor : COLOR;
};
VertexOutput vert(VertexInput v) {
VertexOutput o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
o.vertexColor = v.vertexColor * float4(_Color.rgb * _Color.a, _Color.a); // Combine a PMA version of _Color with vertexColor.
return o;
}
#ifndef SKELETON_TINT_COMMON_INCLUDED
#define SKELETON_TINT_COMMON_INCLUDED
float4 fragTintedColor(float4 texColor, float3 darkTintColor, float4 lightTintColorPMA, float lightColorAlpha, float darkColorAlpha) {
float a = texColor.a * lightTintColorPMA.a;
#if !defined(_STRAIGHT_ALPHA_INPUT)
float3 texDarkColor = (texColor.a - texColor.rgb);
#else
float3 texDarkColor = (1 - texColor.rgb);
#endif
float3 darkColor = texDarkColor * darkTintColor.rgb * lightColorAlpha;
float3 lightColor = texColor.rgb * lightTintColorPMA.rgb;
float4 fragColor = float4(darkColor + lightColor, a);
#if defined(_STRAIGHT_ALPHA_INPUT)
fragColor.rgb *= texColor.a;
#endif
#if defined(_DARK_COLOR_ALPHA_ADDITIVE)
fragColor.a = a * (1 - darkColorAlpha);
#endif
return fragColor;
}
#endif
float4 frag(VertexOutput i) : COLOR {
float4 texColor = tex2D(_MainTex, i.uv);
const float PI = 3.1415926535897932384626433832795;
fixed height = _MaskHeight * sin(((i.worldPos.x - _MaskWidth * 0.5)/_MaskWidth) * PI);
texColor = fragTintedColor(texColor, _Black.rgb, i.vertexColor, _Color.a, _Black.a);
texColor = lerp( float4(0.0,0.0,0.0,0.0), texColor, step( _WaterSurface, i.worldPos.y - height ));
return texColor;
}
ENDCG
}
}
}
Basically some of these parameters vary between characters depending on where they are located.
Is there anyway to change these parameters and have batching work?