
被写界深度のぼかし表現をシンプルに再現してみます。
ポイントは下記です。
・ぼかしをかける対象となる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
・ソースファイル
コメント