実際に作ってみました.
この記事は,下記の参考文献の内容を実装した後,日本語で要約したものです.
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 件のコメント:
コメントを投稿