mieki256's diary



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 で開いて、一部を修正。
#declare WinAmbient = 0;
#declare WinDiffuse = 0.25;

// #include "winsolid.inc"
#include "wintxt.inc"

...

#declare SunAngle = 210;

色々試していたら、こんな感じの動画が得られた。



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 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 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 を用いてローカル変数を利用できることも分かった。

2021/09/02(木) [n年前の日記]

#1 [povray][ubuntu][debian] povmodelerのビルドエラーについて少し調べた

POV-Ray専用モデリングツール、eticre版 povmodeler を、Ubuntu Linux 20.04 LTS上でビルドするとエラーを出してしまう件について少し調べてみた。ちなみに、Debian Linux 11 bullseye 上でビルドするとバイナリ作成まで辿り着く。

_eticre/povmodeler: povray modeler
_POV-Ray: Newsgroups: povray.programming: povmodeler

Ubuntu 20.04 LTS上でビルドすると、pmobjectdrag.cpp 内の Qt::endl という記述でエラーが出てしまう。ググってみたら、Qt のバージョンに起因するらしい。

Debina 11 に入っている Qt は 5.15.2。
$ qmake -v
QMake version 3.1
Using Qt version 5.15.2 in /usr/lib/x86_64-linux-gnu

Ubuntu 20.04 LTS に入ってる Qt は 5.12.8。Ubuntu 20.04 LTS に入ってる Qt のバージョンは、Debian のソレより古い。

Qt 5.14, 5.15 では Qt::endl という記述を使うことを強制されるけど、Qt 5.12.8 には Qt::endl という定義(?)は存在しないらしい。

_error: ‘endl’ is not a member of ‘Qt’ and library dependencies - Issue #22 - AD-Vega/qarv
_‘endl’ is not a member of ‘Qt’, Ubuntu 20.04 - Issue #27 - bullet-physics-playground/bpp
_[QTBUG-82680] QtWebEngine 5.15.0 cannot be built with Qt 5.12 (and 5.9) because Qt::endl does not exist - Qt Bug Tracker
_Port away from deprecated ::endl - KDE/kdevelop@929a7a0

ということで、Ubuntu 20.04 LTS に入ってる Qt が古いので、eticre版 povmodeler はビルドできないというオチだった。

解決策は…ソースを書き換えるしかないのかもしれない…。しかし、書き換えると、今度は Qt 5.14.x 以降で警告が出てしまうのだとか。でもまあ、警告が出てもビルドが通るなら、それでいいじゃんという気もする…。警告を全部消そうとソースを弄ってビルドが通らなくなるほうが馬鹿げてる…。

Ubuntu 20.04 LTS 上の Qt をアップデートできないかググってみたけど、簡単にアップデートできる方法は用意されてないっぽい。そもそも LTS版なので、そのあたりのバージョンを安易に上げられる方法が用意されるわけもないというか…。他に影響を及ぼす可能性が高過ぎるし…。

ソースを書き換えて試してみた。 :

ダメ元で、ソースを書き換えて試してみた。*.cpp 内の Qt::endl を endl に置換。

他の部分でもエラーが出た。pmglview.cpp の PMGLView::wheelEvent() 内で「QWheelEventクラスに position なんて無いよ」と言われる。dickbalaska版 tpovmodeler を参考にして修正。

_qtpovmodeler/pmglview.cpp at qmake - dickbalaska/qtpovmodeler
_povmodeler/pmglview.cpp at master - eticre/povmodeler

  • e->angleDelta().y() を、e->delta() に変更。
  • e->position().x()、e->position().y() を、e->x()、e->y() に変更。

この状態でビルドしてみたら、Ubuntu 20.04 LTS 上でもビルドが通った。make install で、~/.local/share/povmodeler/ 内に、実行ファイル povmodeler や関連ファイルもコピーされた。また、povmodeler も実行することができた。

一応、ビルド手順をメモ。

必要になりそうなパッケージをインストール。
sudo apt install build-essential cmake git
sudo apt install qt5-default qtbase5-dev qttools5-dev-tools
sudo apt install libfreetype6 libfreetype6-dev
sudo apt install libqt5x11extras5 libqt5x11extras5-dev libqt5opengl5 libqt5opengl5-dev
sudo apt install libx11-dev xorg-dev
sudo apt install libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libglfw3 libglfw3-dev libglew-dev
sudo apt install libxml2-dev
sudo apt install povray

github から git で clone してビルド。
mkdir ~/povmodeler
cd ~/povmodeler

git clone https://github.com/eticre/povmodeler.git
cd povmodeler

... *.cpp を修正 ...

mkdir build
cd build
cmake ..
make -j4
make install

もっとも、このあたりを修正済みの dickbalaska版 qtpovmodeler をビルドして触ってみたほうがいいような気もする…。

POV-Rayウインドウの閉じ方。 :

eticre版 povmodeler で、POV-Ray を使ってレンダリングすると、POV-Ray のレンダリング結果表示ウインドウを閉じることができなくて困ってしまったのだけど。

povmodeler 側の「stop」ボタンをクリックしてみたら POV-Ray のウインドウを閉じることができて、かつ、 povmodeler 側のウインドウにレンダリング結果が表示されることが分かった。そういう操作をすることが前提だったのかもしれない…。

2021/09/01(水) [n年前の日記]

#1 [povray][ubuntu][debian] qtpovmodelerを動かせないか実験中

POV-Ray専用モデリングツール kpovmodeler からKDE関連の記述を削除して Qt に置き換えたらしい qtpovmodeler を、Ubuntu Linux 20.04 LTS 上で動かせないものか実験中。

_dickbalaska/qtpovmodeler: povray modeler
_POV-Ray: Newsgroups: povray.tools.general: building povmodeler?

ビルドの仕方は以下…だと思う。たぶん。
sudo apt install libfreetype6 libfreetype6-dev libqt5x11extras5 libqt5x11extras5-dev libqt5opengl5 libqt5opengl5-dev

mkdir qtpovmodeler
cd qtpovmodeler

git clone https://github.com/dickbalaska/qtpovmodeler.git
cd qtpovmodeler
qmake
make -j4
./qtpovmodeler

ビルドは通ったし、画面も表示されたけど、プリミティブを何一つ追加できないのが気になるわけで。惜しい。もうちょっとで動きそうな感じに見えるのだけどな…。

起動時に baseinsertrules.xml が見つからないと言っているのが気になる。ファイル名からして、基本形状の挿入時に必要になるファイルではないのだろうか…。

_POV-Ray: Newsgroups: povray.tools.general: building povmodeler?: Re: building povmodeler?

上記のやり取りで、「/usr/share/povmodeler/ 内に以下のファイル群が入っている」みたいな話をしているように見える。

作者さんは、他の版の .deb をインストールしてから qtpovmodeler 本体を制作しているので、必要な関連ファイルは .deb でインストール済みであることを前提にしている模様。ただ、その .deb ファイルは404なんだよな…。

各ファイルは、git clone してビルドした際のディレクトリの中に、いくつか存在している。であれば、/usr/share/povmodeler/ を作成して、コピーしてやれば済むのではないか…? 試してみる。

sudo mkdir /usr/share/povmodeler
sudo cp baseinsertrules.xml /usr/share/povmodeler
sudo cp -r examples /usr/share/povmodeler
sudo cp povraydocmap.xml /usr/share/povmodeler
sudo cp questionmark.png /usr/share/povmodeler
library とやらは見当たらなかったのでコピーできなかった。

この状態で qtpovmodeler を実行してみたところ、プリミティブが追加できるようになった。また、POV-Ray でレンダリングすることもできた。

qtpovmodeler_ss01.png

qtpovmodeler_ss02.png

雑感。 :

いくつか気になる点はあるけれど…。
  • ツールバー上からレンダリングボタンが無くなっていて、View → Render を選ばないとレンダリングできない。地味に面倒臭い。
  • .pov をエクスポートする際、毎回保存先フォルダを指定し直さないといけない。地味に面倒臭い。
  • 端末上から実行すると、ガンガン警告メッセージが出てくる。結構不具合を抱えた状態でどうにか動いてるらしい。

それでも、GUIでプリミティブ配置を確認しつつ作業していけるあたりはイイ感じだなと。

また、レンダリングする直前、POV-Ray 3.7 に渡すコマンドラインオプションを編集できるダイアログを表示してくれるので、本家 kpovmodeler のように、利用できないオプションを勝手に出力されて POV-Ray 3.7 がエラーを出して終わりというトホホな状況も避けられる。 *1

何より、KDE (TDE) をインストールしてない環境でも動いてくれるのはありがたい…。

povmodelerの種類についてメモ。 :

POV-Ray公式のニュースグループ上のやり取りによると、kpovmodeler のフォーク版は、少なくとも3種類あるようで。

  • eticreさんが作った povmodeler。
  • simbad(tribad)さんが作った povmodeler。
  • Dick Balaskaさんが作った qtpovmodeler。

_eticre/povmodeler: povray modeler
_POV-Ray: Newsgroups: povray.programming: povmodeler

_tribad/povmodeler: povray modeler
_POV-Ray: Newsgroups: povray.programming: povmodeler

_dickbalaska/qtpovmodeler: povray modeler
_POV-Ray: Newsgroups: povray.tools.general: building povmodeler?

eticre版 povmodeler は、kpovmodeler からKDE関連を削除してQtに置き換えてみた最初のフォーク版。cmakeを使用する。まだ一部にKDE関連の記述が残っているらしい。

simbad(tribad)版 povmodeler は、eticre版を元にして、UIデザインを変更、KDE関連の記述を更に削除、一部のバグを修正した版。これも cmakeを使用する。一時期は .debファイルも配布していたが、現在それらの .debファイルは404になってる。

dickbalaska版 qtpovmodeler は、おそらく eticre版を元にして、qmakeを使用するようにした版。povmodeler という名前は eticre版や simbad(tribad)版で既に使っているという理由で、qtpovmodeler にリネームしたらしい。一度ビルドが通った後は、qtcreator を使って開発作業を進めてるとのこと。

ちなみに、手元の環境、Ubuntu Linux 20.04 LTS x64上では、dickbalaska版 qtpovmodeler しかビルドできなかった。eticre版 povmodeler と simbad(tribad)版 povmodeler はビルドが通らなかった。

もしかすると、Debian Linux上なら、eticre版やsimbad(tribad)版もビルドが通ったりするのだろうか…?

Debian Linux 11 bullseye上で試してみた。 :

Windows10 x64 21H1 + VMware Workstation 16 Player 上で Debian Linux 11 64bit bullseye をインストールして試してみた。debian-11.0.0-amd64-netinst.iso を使ってインストールしようとしたけれど、パッケージのダウンロードが遅くて遅くて3時間ぐらいかかった…。

さておき、ビルドに必要になりそうなパッケージをインストール。
apt install build-essential cmake git
apt install libfreetype6 libfreetype6-dev libqt5x11extras5 libqt5x11extras5-dev libqt5opengl5 libqt5opengl5-dev
apt install libx11-dev xorg-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libglfw3 libglfw3-dev libglew-dev
apt install libxml2-dev
apt install povray

simbad(tribad)版 povmodeler を git clone して cmake。
mkdir povmodeler
cd povmodeler

git clone https://github.com/tribad/povmodeler.git
cd povmodeler
mkdir build
cd build
cmake ..
make -j4

エラーが出た。
[100%] Linking CXX executable povmodeler
/usr/bin/ld: missing --end-group; added as last command line option
/usr/bin/ld: ../modelifc/libmodelifc.so: undefined reference to `xmlFree'
/usr/bin/ld: ../modelifc/libmodelifc.so: undefined reference to `xmlGetProp'
collect2: error: ld returned 1 exit status
make[2]: *** [src/modeller/CMakeFiles/povmodeler.dir/build.make:603: src/modeller/povmodeler] エラー 1
make[1]: *** [CMakeFiles/Makefile2:339: src/modeller/CMakeFiles/povmodeler.dir/all] エラー 2
make: *** [Makefile:171: all] エラー 2
Ubuntu Linux 20.04 LTS で試したときと同じエラー。

Debian ならビルドが通るわけでもないみたいだなと…。

eticre版povmodeler はどうだろう。そちらも試してみた。
git clone https://github.com/eticre/povmodeler.git
cd povmodeler
mkdir build
cd build
cmake ..
make -j4

警告メッセージが色々出てきたけど、こちらはビルドが通った。つまり、比較的素の状態に近い Debian Linux 上なら、eticre版 povmodeler もビルドできそう、ということになるのだろうか。

make install をしたら、 ~/.local/share/povmodeler/ 以下にインストールされた。中に入ってたファイル群は以下。
$ ls ~/.local/share/povmodeler/
baseinsertrules.xml
examples/
liblpovmodeler.a
libpovmodelerpart.a
library/
org.povmodeler.xml
povmodeler
povmodeler.desktop
povraydocmap.xml
questionmark.png

libraryフォルダがある…。qtpovmodeler も、この libraryフォルダを /usr/share/povmodeler/ にコピーすればいいのかな。

それはともかく、~/.local/share/povmodeler/povmodeler を実行したら画面が表示された。POV-Ray でレンダリングもできた。しかし、POV-Ray のウインドウを閉じることができない…。povmodeler を終了させて、killall povray でプロセスを殺すしかないな…。

今のところ、dickbalaska版 qtpovmodeler が、一番イイ感じで動いてくれた印象。関連ファイルを手動でコピーしてやる必要はあるけれど…。

*1: もっとも、コマンドラインオプションを一旦ダイアログで表示する機能は将来削除したい、みたいな話も出ていたようだけど…。それをやると、kpovmodeler と同じトラップが将来発動すると思うんだけどな…。

以上、3 日分です。

過去ログ表示

Prev - 2021/09 -
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project