被写界深度のぼかし表現をシンプルに再現してみます。
ポイントは下記です。
・ぼかしをかける対象となるVieportLayerをviewport.getChildLayer()を使って作成。
・カメラからオブジェクトまでの距離はcamera.distanceTo()を使って求める。
・距離に応じてVieportLayerにBlurFilterをかける。
//ぼかし対象となるビューポートレイヤーを格納する配列 private var layers:Array = []; //カメラから注視点までの距離(この距離にある物が一番はっきり見える) private var offset:Number = 1000; //レンダリングのたびに更新 override protected function onRenderTick(event:Event):void { for (var i:uint = 0; i < layers.length; i++) { //注視点からオブジェクトまでの距離 var distance:Number=Math.abs(camera.distanceTo(layers[i].displayObject3D)-offset); //距離に応じてぼかし量を調節 var v:uint = Math.min(30, distance* 0.02); //ViewportLayerにフィルターを掛ける layers[i].filters = [new BlurFilter(v,v,2)]; } }・サンプルSWF ・ソースファイル
コメント