Allora...
...capito che biogna prima creare un PhongShader e poi combinare il MovieMaterial con esso per creare il materiale soggetto alla luce.
e fin qui ora ci sono.

nel mio test ho un cubo con 6 lati che dovrebbero essere tutti e 6 shadedmaterial object, e una luce.

problema 1:
non riesco a assegnare una materialList dove ogni faccia sia un ShadedMaterial, quando lo passo al cubo mi da errore

problema 2:
non riesco a domare la luce, vorrei fare una cosa di questo tipo: la luce parte da lontano e quindi il mio cubo resta nell'oscurità poi quando la luce arriva il cubo si illumina e si vede bene... non so nemmeno se questo si può effettivamente fare. ma qui la luce è veramente ridotta, non so se si può giocare sull'intensità della luce dell'hotspot, non so nemmeno se è una luce direzionale o omnidirezionale, e perchè con un parantro pointLight.z = 120; la luce mi va dietro al cubo e me lo illumina comunque mentre se è davanti (es z=-120) non è illuminato (lo capite bene dal sorgente più sotto).

problema 3:
la luce influenza il materiale che è lo stesso per i 4 lati quindi quando giro il cubo crea un brutto effetto non realitisco.

ma forse è meglio postare nel dettaglio tutto quello che ho fatto così è più chiaro:
questo è il risultato:
http://www.rossionline.net/tmp/tessere3d/

e questo è il sorgente:

codice:
package  {

	import flash.display.*;
	import flash.events.*; 
	import org.papervision3d.materials.*
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.materials.shaders.PhongShader;
	import org.papervision3d.materials.shaders.ShadedMaterial;
	import org.papervision3d.view.BasicView;
	import caurina.transitions.Tweener;
	
	public class Tessere3D extends MovieClip { 
	   
		public var viewport:BasicView;

		public var tessera:Cube;
		
		private var faceArray:Array = new Array("00.jpg", "01.jpg", "02.jpg", "03.jpg");
		
		private var arrFinaleFaccia:Array;
		
		private var pagina:Number = 0;
		
		private var pointLight:PointLight3D;

		private var listaMateriali:MaterialsList;
	   
		//costruttrice
		public function Tessere3D() {
			init();
		}
		
		
		/**/
		public function init():void {
			
			//inizializzo il viewport
			viewport = new BasicView(900, 600, false, true, "FREECAMERA3D");
			viewport.camera.zoom = 11;
			addChild(viewport);
			
			// crea luce e la posiziono in prospettiva
			pointLight= new PointLight3D(true, true);
			pointLight.z = 120;
			viewport.scene.addChild(pointLight);

			//carico i jpeg delle facce definiti nell'array;
			caricaFace(faceArray);
			
			//creo il materiale finale
			creoMateriali(arrFinaleFaccia);
			
			tessera = new Cube(listaMateriali, 170, 170, 100, 1, 1, 1);
			viewport.scene.addChild(tessera);
			
			//listener per i 2 pulsanti che girono la tessera
			avanti_btn.addEventListener(MouseEvent.CLICK, avanti);
			indietro_btn.addEventListener(MouseEvent.CLICK, indietro);
			
			//evento per il rendering della scena
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
	   
	      
	   
		/*Carico le facce e le unisco alla luce creando prima un PhongShader e poi un ShadedMaterial*/
		private function caricaFace(arr:Array) {
			
			arrFinaleFaccia = new Array();
			
			for (var i:Number = 0; i < arr.length; i++) {
				
				//l'oggetto faccia è un estensione di movieclip (vedere Faccia.as)
				var tempFace:Faccia = new Faccia(this);
				tempFace.name = "faccia" + i;
				tempFace.foto = arr[i];
				
				//creo l'oggetto movie material
				var mm:MovieMaterial = new MovieMaterial(tempFace);
				mm.smooth = true;
				mm.animated = true;
				
				//prima aggiungo la luce ad un oggetto PhongShader
				var shader:PhongShader = new PhongShader(pointLight, 0xFFFFFF,0x000000, 100)
				
				//poi unisco l'oggetto moviematerial con quello PhongShader
				var shadedMaterial:ShadedMaterial = new ShadedMaterial(mm, shader);
				
				//popolo l'array che mi contiene le facce
				arrFinaleFaccia.push(shadedMaterial);
			}
		   
		}
	   
		/**/
		private function creoMateriali(arr:Array) {

			var mFacciaVuota:FacciaVuota = new FacciaVuota();
			var facciaVuota:MovieMaterial = new MovieMaterial(mFacciaVuota);
			facciaVuota.animated = true;

			// IN TEORIA SAREBBE COSI'!!! MA NON VA!!! MI DA ERRORE?!?
			/*
			listaMateriali = new MaterialsList( { front:arr[0], 
												left:arr[1], 
												right:arr[2], 
												top:facciaVuota, 
												bottom:facciaVuota, 
												back:arr[3] } );
			*/										
			
			//per fare una prova metto tutti i materiali uguali
			listaMateriali = new MaterialsList( { all:arr[0] } );
		}
	   
		/**/
		private function avanti(e:MouseEvent) {
			pagina++;
			Tweener.addTween(tessera, { rotationY:(90 * pagina), time:1, transition:"easeInOutBack" } );
		}
	   	
		/**/
		private function indietro(e:MouseEvent) {
			pagina--;
			Tweener.addTween(tessera, { rotationY:(90 * pagina), time:1, transition:"easeInOutBack" } );
		}
	   
		/**/
		private function movimentoLuce() {
			var xDist:Number = mouseX - stage.stageWidth * 0.5;
			var yDist:Number = mouseY - stage.stageHeight * 0.5;
			pointLight.x -= xDist * 0.005;
			pointLight.y += yDist * 0.005;
		}
	    
		/**/
		protected function onEnterFrame( e:Event ):void {
			movimentoLuce();
			viewport.singleRender();
		}
	}
}
per conoscenza posto anche la casse Faccia.as ma non è utile ai fini della discussione (giusto se uno vuol testare)
codice:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.system.*;
	import flash.net.URLRequest;
	import flash.utils.*;
	
	public class Faccia extends MovieClip {
		
		private var _foto:String;
		private var _sessione:String = "img/";
		private var richiestaJpg:URLRequest;
		private var loaderJpg:Loader;
		private var fullImg:Bitmap;
		private var _fla:MovieClip;
		
		public function Faccia(fla:MovieClip) {
			_fla = fla;
			init();
			
		}
		
		
		
		/**/
		private function init() {
			//
			this.areaHit_btn.addEventListener(MouseEvent.ROLL_OVER,sopraPulsante);
			this.areaHit_btn.addEventListener(MouseEvent.ROLL_OUT,fuoriPulsante);
			this.areaHit_btn.addEventListener(MouseEvent.CLICK, vai);
			
		}
		
		private function vai(e:MouseEvent) {
			trace("ok");
		}
		
		private function sopraPulsante(e:MouseEvent) {
			trace("over");
		}
		
		private function fuoriPulsante(e:MouseEvent) {
			trace("out");
		}
		
		
		/**/		
		private function caricamento() {
			
			richiestaJpg = new URLRequest(_sessione + _foto);
			
			loaderJpg=new Loader();
			
			loaderJpg.contentLoaderInfo.addEventListener(Event.OPEN,iniziaCaricamentoJpg);
			
			loaderJpg.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,inCaricamentoJpg);
			
			loaderJpg.contentLoaderInfo.addEventListener(Event.COMPLETE, completatoJpg);
			
			loaderJpg.load(richiestaJpg);
			
			
		}
		
		
		/**/
		private function iniziaCaricamentoJpg(e:Event):void {
			
			//
			
		}
		
		
		/**/
		private function inCaricamentoJpg(e:ProgressEvent):void {
			var percentualeBg:uint=(e.bytesLoaded/e.bytesTotal)*100;
			var avanzamento:Number = 0.95 * percentualeBg;
		}
		
		
		/**/
		private function completatoJpg(e:Event):void {
			fullImg = loaderJpg.content as Bitmap;
			foto_mc.addChild(fullImg);
		}
		
		
		// valore del file da caricare;
		public function set foto(valore:String){
			_foto = valore;
			caricamento();
		}
		
		public function get foto():String{
			return this._foto;
		}
		
	}
	
}
Lascio in allegato lo zip con tutto il lavoro per chi lo vuole testare.
http://www.rossionline.net/tmp/tessere3d/tessere3d.zip