星期二, 4月 13, 2010

水草漂動 / 樹葉搖晃 的效果 DisplacementMapFilter, perlinNoise

Perlin noise是一種產生雜訊點陣圖的一種演算法
是由Ken Perlin所發明的
原本的目的是為了1982年的電影Tron(電子世界爭霸戰)所開發的演算法
這種雜訊是用來模擬火焰、煙霧、水波的效果
Ken Perlin因為開發了這個演算法而得到了1997年的奧斯卡技術成就獎
Perlin noise原本是產生2D雜訊,但是隨著產業界的需求之增加
後來出現了3D版本的Perlin noise,可以模擬3D的火焰等特效

通常要模擬水波、飄動的特效
會使用Perlin noise搭配所謂的displacement map特效
也就是Flash裡面的DisplacementMapFilter
這個特效是用來扭曲變形一張圖用的
所以應該可以達到你說的水草飄動效果(其實是扭曲)

要使用displacement map特效需要兩張尺寸一樣的圖
第一張是原圖,第二張是扭曲參考圖
而這張參考圖我們要使用Perlin noise

轉載自 #19OYjs7P (Flash) [ptt.cc] cjcat2266


以下是西街貓(cjcat2266)附上的參考
var bmpd:BitmapData = new BitmapData(180, 280);
var bmp:Bitmap = new Bitmap(bmpd);
bmp.x = 180;
addChild(bmp);

var dmf:DisplacementMapFilter = new DisplacementMapFilter(bmpd, new Point(), 1, 2, 20, 20, "clamp");

addEventListener(Event.ENTER_FRAME, update);
function update(e:Event):void
{
bmpd.perlinNoise(200, 200, 2, 0, false, false, 3, false, [new Point(0, getTimer() / 50), new Point(20 * Math.sin(getTimer() / 1000), getTimer() / 20)]);
sw2_mc.filters = [dmf];
}





KeyWord: DisplacementMapFilter, perlinNoise

參考資料
#19OYjs7P (Flash) [ptt.cc] cjcat2266
#19OZ7PwE (Flash) [ptt.cc] cjcat2266