2009年8月3日月曜日

画像処理 #20 雲

皆さんは,雲を作ったことがあるでしょうか.

実際に作ってみました.

この記事は,下記の参考文献の内容を実装した後,日本語で要約したものです.

1.乱数でノイズパターンを生成


Fig.1
こんな感じで4つ作ります.赤枠は単に区切るためのものです.これらをそれぞれMap1,Map2,Map3,Map4とします.

2.平均化
Map1,Map2,Map3,Map4をそれぞれ平均化します.
平均化の際,上下左右は繋がっているものとしましょう.


Fig.2

3.サンプリング
以下のようにして,Map1,2,3,4を256x256の大きさにします.
Map1:8倍に拡大.
Map2:4倍に拡大したものを,タイル状に縦横2つずつ並べる.
Map3:2倍に拡大したものを,タイル状に縦横4つずつ並べる.
Map4:タイル状に縦横8つずつ並べる.
サンプリング時には,バイリニア補間を使いました(画像処理 第1回 補間 参照).
因みに,上で述べたように,上下左右が繋がっているものとして平均化しておかないと,この時点で不自然な不連続部分が出来てしまします.


Fig.3

4.合成
これらの画像を合成します.各ピクセルの値は,
Map=Map1+Map2/2+Map3/4+Map4/8
とします.


Fig.4

5.仕上げ

最後に仕上げです.各ピクセルについて,


CloudExpCurve(v){
c=v-CloudCover;
if(c<0)
c=0;
CloudDensity=255-CloudSharpnessc * 255;
return CloudDensity;
}


というトーンカーブを適用します.

ここで,パラメタの説明を.

CloudCover:
値域[0, 255]
総雲量を制御.値が小さい程,雲は多くなる.

CloudSharpness:
値域[0, 1]
雲のシャープさを変える.小さい値だと急激な変化で濃い雲,大きい値だと曖昧で薄い雲となる.


Fig.5

Fog.5でのパラメタは,以下の通り.
CloudCover=232
CloudSharpness=0.95

完成です.それっぽい感じの雲が出来上がりました.

参考文献
Hugo Elias.“Cloud Cover”.<http://freespace.virgin.net/hugo.elias/models/m_clouds.htm>.The good-looking textured light-sourced bouncy fun smart and stretchy page.(参照2009年8月2日)

0 件のコメント: