void main(
  float3 Position,
  float2 TexCoord0,
  float3 Normal,
  uniform half4 AmbientColor,
  uniform half4 PointLightPosition,
  uniform half4 PointLightColor,
  uniform half3 PointLightAttenuation,
  uniform half4 PointLight2Position,
  uniform half4 PointLight2Color,
  uniform half3 PointLight2Attenuation,
  uniform float4x4 WorldToView,
  uniform float4x4 ObjToWorld,
  half2 out Out_Tex0 : TEXCOORD0,
  fixed4 out Out_Color0 : COLOR0,
  float4 out gl_Position : POSITION
) {
  float4 WorldPos = mul(ObjToWorld, float4(Position, 1.0));
  gl_Position = mul(WorldPos, WorldToView);

  Out_Tex0 = TexCoord0 * 0.00390625; // 1 / 256.0

  // Normal
  float3 WorldNormal = mul(float4(Normal, 0), ObjToWorld).xyz;

  // Point Light
  float3 LightToVertex = PointLightPosition.xyz - WorldPos.xyz;
  float distance = length(LightToVertex);
  float attenuation = 1.0 / (dot(float3(1.0,distance,distance*distance), PointLightAttenuation));
  float power = attenuation * max(dot(normalize(LightToVertex), WorldNormal), 0.0);

  // Point Light 2
  LightToVertex = PointLight2Position.xyz - WorldPos.xyz;
  distance = length(LightToVertex);
  attenuation = 1.0 / (dot(float3(1.0,distance,distance*distance), PointLight2Attenuation));
  float power2 = attenuation * max(dot(normalize(LightToVertex), WorldNormal), 0.05);

  Out_Color0 = AmbientColor + PointLightColor * power + PointLight2Color * power2;
}
