 		 */
 		override protected function getPixelColor() : SFloat
 		{
-			var diffuse			: SFloat = _diffuseShaderPart.getDiffuse();
-			var vertexNormal	: SFloat = _vertexAnimationPart.getAnimatedVertexNormal();
+			var diffuse	: SFloat = _diffuseShaderPart.getDiffuse();
 			
 			// directional lighting
 			if (sceneBindings.getConstant('lightEnabled', false)
 				&& meshBindings.getConstant('lightEnabled', false))
 			{
-				var lightDirection	: SFloat = sceneBindings.getParameter("lightDirection", 3);
-				var normal			: SFloat = normalize(
-					interpolate(
-						float4(multiply3x3(vertexNormal, localToWorldMatrix), 1)
-					)
-				);
+				var lightDirection	: SFloat = sceneBindings.getParameter('lightDirection', 3);
+				var normal			: SFloat = normalize(interpolate(_vertexNormal));
+					
 				var lambert			: SFloat = saturate(negate(dotProduct3(
 					normal,
 					normalize(lightDirection)
 				)));
 				
-				lambert.scaleBy(sceneBindings.getParameter("lightDiffuse", 1));
+				lambert.scaleBy(sceneBindings.getParameter('lightDiffuse', 1));
 				
 				var lightColor		: SFloat = add(
 					// ambient
 					multiply(
-						sceneBindings.getParameter("lightAmbient", 1),
-						sceneBindings.getParameter("lightAmbientColor", 3)
+						sceneBindings.getParameter('lightAmbient', 1),
+						sceneBindings.getParameter('lightAmbientColor', 3)
 					),
 					// diffuse
 					multiply(
 						lambert,
-						sceneBindings.getParameter("lightDiffuseColor", 3)
+						sceneBindings.getParameter('lightDiffuseColor', 3)
 					)
 				);
 				

		 */
		override protected function getVertexPosition() : SFloat
		{
			return localToScreen(
				_vertexAnimationPart.getAnimatedVertexPosition()
			);

	 */
	public class BasicShader extends Shader
	{
		private var _vertexAnimationPart	: VertexAnimationShaderPart	= null;
		private var _diffuseShaderPart		: DiffuseShaderPart			= null;
		
		private var _vertexNormal			: SFloat					= null;
		
		protected function get diffuse() : DiffuseShaderPart
		{
