2021/09/03(金) [n年前の日記]
#1 [povray] CityGenとPOV-Rayを試用
 CityGen という都市景観自動生成ツールがあるらしい。POV-Ray用の .pov を生成できるのだとか。
_POV-Ray CityGen: Terragen、Blender で楽しむ3DCG
_「リンク、その他の3DCGソフト」のページに POV-Ray を追加: Terragen、Blender で楽しむ3DCG
_all in a dither - 3D graphics and utilites
1999年頃に作られたソフトらしい…。気になったので試用してみる。
citygen.zip をDLして解凍。
中に、Dskies.inc, winsolid.inc, wintxt.inc 等の *.inc ファイルが入っているので、POV-Ray の includeフォルダ内にコピーしておく。
CityGen.exe を実行。道路を生成後、ビル群を生成して、.pov でエクスポート。
POV-Ray 3.7 で開いて、一部を修正。
色々試していたら、こんな感じの動画が得られた。
1920x1080ドット、240フレームをレンダリングして、24FPSのmp4動画に ffmpeg で変換。
10秒の動画を作成するのに1時間ぐらいかかった。(AMD Ryzen 7 1700 (8コア16スレッド、3GHz))。
使った .pov は以下。
_povcity01.pov (1.19MB)
道路やビルのモデルがアレなせいか1990年代感ビンビンだけど自動生成にはロマンがあるなと…。
それはともかく。少し遠くにある、道路の交差点の白い線が、チラチラと出たり消えたりする…。今回はカメラをそれなりの速度で動かしたからそこまで目立ってないけど、ゆっくり動かすと不自然なぐらいにチラチラする。アンチエイリアスの有効無効を切り替えて試してみたけど改善せず。なかなか難しい。やはり POV-Ray は静止画用レンダラーと捉えるべきなのかな…。
 _POV-Ray CityGen: Terragen、Blender で楽しむ3DCG
_「リンク、その他の3DCGソフト」のページに POV-Ray を追加: Terragen、Blender で楽しむ3DCG
_all in a dither - 3D graphics and utilites
1999年頃に作られたソフトらしい…。気になったので試用してみる。
citygen.zip をDLして解凍。
中に、Dskies.inc, winsolid.inc, wintxt.inc 等の *.inc ファイルが入っているので、POV-Ray の includeフォルダ内にコピーしておく。
CityGen.exe を実行。道路を生成後、ビル群を生成して、.pov でエクスポート。
POV-Ray 3.7 で開いて、一部を修正。
#declare WinAmbient = 0; #declare WinDiffuse = 0.25; // #include "winsolid.inc" #include "wintxt.inc" ... #declare SunAngle = 210;
- 「#declare」行の最後に「;」を追加。
 - winsolid.inc の代わりに wintxt.inc を include する。
 
色々試していたら、こんな感じの動画が得られた。
1920x1080ドット、240フレームをレンダリングして、24FPSのmp4動画に ffmpeg で変換。
ffmpeg -framerate 24 -i frames\%04d.png -vcodec libx264 -pix_fmt yuv420p -r 24 out.mp4
10秒の動画を作成するのに1時間ぐらいかかった。(AMD Ryzen 7 1700 (8コア16スレッド、3GHz))。
使った .pov は以下。
_povcity01.pov (1.19MB)
道路やビルのモデルがアレなせいか1990年代感ビンビンだけど自動生成にはロマンがあるなと…。
それはともかく。少し遠くにある、道路の交差点の白い線が、チラチラと出たり消えたりする…。今回はカメラをそれなりの速度で動かしたからそこまで目立ってないけど、ゆっくり動かすと不自然なぐらいにチラチラする。アンチエイリアスの有効無効を切り替えて試してみたけど改善せず。なかなか難しい。やはり POV-Ray は静止画用レンダラーと捉えるべきなのかな…。
◎ macroを使うべきだったかも。 :
カメラの移動にイージングを使ってみたけれど。
_Easing Equations
_イージング処理の計算式 - 強火で進め
関数にしたほうが良かったのかもしれない。でも、POV-Ray で関数って定義できるのかな。
ググってみたら、macro を使えば関数のように記述できるらしい。
_POV-Ray:3
しかし、戻り値はどうすれば…?
色々試したところ、以下のような記述なら動いてくれた。
ただ、macro の中で変数を使おうとしたら、正常に動作してくれず。今後の課題だなと…。
_Easing Equations
_イージング処理の計算式 - 強火で進め
関数にしたほうが良かったのかもしれない。でも、POV-Ray で関数って定義できるのかな。
ググってみたら、macro を使えば関数のように記述できるらしい。
_POV-Ray:3
しかし、戻り値はどうすれば…?
色々試したところ、以下のような記述なら動いてくれた。
#macro easeoutcubic(tt, bb, cc, dd)
(cc*(((tm/dd)-1)*((tm/dd)-1)*((tm/dd)-1)+1)+bb)
#end
camera {
#declare tm = clock;
#declare cx = -5;
#declare cy = easeoutcubic(tm, 40, -38, 1.0);
#declare cz = easeoutcubic(tm, 285, -300, 1.0);
#declare lx = -150 + 400 * tm;
#declare ly = 2;
#declare lz = -10 - 40 * tm;
  location <cx, cy, cz >
  look_at <lx, ly, lz>
  
  right x*image_width/image_height
  angle 75
}
ただ、macro の中で変数を使おうとしたら、正常に動作してくれず。今後の課題だなと…。
◎ 2021/09/04追記。 :
上記の記述は変数名を間違えてることに気づいた…。引数を使ってないじゃん…。以下が修正版。
macroの中では、local を用いてローカル変数を利用できることも分かった。
#macro EaseOutCubic(TT, BB, CC, DD)
#local TP = (TT / DD) - 1.0;
(CC * (TP * TP * TP + 1.0) + BB)
#end
camera {
#declare tm = clock;
#declare cx = -5;
#declare cy = EaseOutCubic(tm, 40, -38, 1.0);
#declare cz = EaseOutCubic(tm, 285, -300, 1.0);
#declare lx = -150 + 400 * tm;
#declare ly = 2;
#declare lz = -10 - 40 * tm;
  location <cx, cy, cz >
  look_at <lx, ly, lz>
  
  right x*image_width/image_height
  angle 75
}
macroの中では、local を用いてローカル変数を利用できることも分かった。
[   ツッコむ ]
以上です。