2022/06/17(金) [n年前の日記]
#1 [povray] POV-Rayを再勉強中
以前、雑魚敵画像を作成するために書いた .pov ファイル(POV-Rayファイル)を、HDDの中から発掘したのだけど。しかしPOV-Rayの使い方を忘れていたので再勉強中。どういうオプションをつければどういう動作になるのか再確認。
Windows10 x64 21H2 + POV-Ray 3.7 + ImageMagick 7.1.0-37 Q16-HDRI x64 を使用。
_POV-Rayで背景を透明にする方法が分からない
_POV-RayとImageMagickでアニメ画像を作成
_POV-Rayで任意のオブジェクトをレンダリング対象から外す
とりあえず、勉強し直した点について、もう一度メモしておこう…。
Windows10 x64 21H2 + POV-Ray 3.7 + ImageMagick 7.1.0-37 Q16-HDRI x64 を使用。
_POV-Rayで背景を透明にする方法が分からない
_POV-RayとImageMagickでアニメ画像を作成
_POV-Rayで任意のオブジェクトをレンダリング対象から外す
とりあえず、勉強し直した点について、もう一度メモしておこう…。
◎ コマンドラインオプションについて。 :
POV-Rayのコマンドラインオプションとして、例えば以下のような指定ができる。
+KFFxx を指定することで、clock という変数が 0.0 - 1.0 まで xxフレームで変化するので、オブジェクトの座標指定などに clock を含めた数式を書けばアニメーション画像が作れる。
ただ、ループアニメを作る場合、+KFFxx を指定しただけでは、一番最初のフレームと最後のフレームが同じ画になってしまう。+KC を指定することで最後のフレームを余分にレンダリングしなくて済む状態になる。
- +W512 : 出力画像の横幅を指定。(width=512)
- +H512 : 出漁画像の縦幅を指定。(height=512)
- +a0.3 : Antialias を on にして、Threshold 0.3 を指定。(Antialias_Threshold=0.3 Antialias=on)
- +UA : 出力画像のアルファチャンネルを有効化。(Output_Alpha=on)
- +KFF20 +KC : フレーム数を20に。ループアニメ有効化。(Final_Frame=20 Cyclic_Animation=on)
+KFFxx を指定することで、clock という変数が 0.0 - 1.0 まで xxフレームで変化するので、オブジェクトの座標指定などに clock を含めた数式を書けばアニメーション画像が作れる。
ただ、ループアニメを作る場合、+KFFxx を指定しただけでは、一番最初のフレームと最後のフレームが同じ画になってしまう。+KC を指定することで最後のフレームを余分にレンダリングしなくて済む状態になる。
◎ オプションを.povに記述。 :
.pov ファイルの最初のあたりに、コメント行として以下のような記述をしておけば、POV-Rayエディタで開いた際に該当行を右クリックしてコマンドラインオプション入力欄にコピーできる。
「こういう条件でレンダリングしたよ」と未来の自分に伝えたいなら、書いておいたほうがヨサゲ。
// +W512 +H512 +a0.3 +UA +KFF20 +KC
「こういう条件でレンダリングしたよ」と未来の自分に伝えたいなら、書いておいたほうがヨサゲ。
◎ レンダリング対象から外す。 :
各オブジェクトの定義の最後で「no_image」を指定すれば、そのオブジェクトについてはレンダリングしない状態にできる。
例えば、背景に相当するオブジェクトを定義しておいて、その中で「no_image」を指定すれば、対象オブジェクトの表面には背景の映り込みをさせつつ、背景部分だけを透明な状態にできる。まあ、これについては以前のメモを見たほうが分かりやすいはず…。
_POV-Rayで任意のオブジェクトをレンダリング対象から外す
例えば、背景に相当するオブジェクトを定義しておいて、その中で「no_image」を指定すれば、対象オブジェクトの表面には背景の映り込みをさせつつ、背景部分だけを透明な状態にできる。まあ、これについては以前のメモを見たほうが分かりやすいはず…。
_POV-Rayで任意のオブジェクトをレンダリング対象から外す
◎ 複数フレームをスプライトシートにする。 :
複数のレンダリング画像が得られたら、ImageMagick を使ってスプライトシート画像を作れる。
magick montage -filter Lanczos -resize 78x78 -unsharp 10x5+0.7+0 -geometry +1+1 -background none render_512x512/*.png PNG32:spritesheet.png
- -filter Lanczos : リサイズフィルタに Lanczos を指定。
- -resize 78x78 : 78x78ドットにリサイズ。
- -unsharp 10x5+0.7+0 : アンシャープマスクをかける。
- -geometry +1+1 : (1,1)の位置にずらす。リサイズの大きさが 78x78 だったので、結果的に1フレーム 80x80 になる。
- -background none : 背景を透明化。
- render_512x512/*.png : 入力ファイル群を指定。
- PNG32:spritesheet.png : 出力ファイル名を指定。RGBA各8bitの png が欲しい場合、PNG32: をファイル名の前につける。
◎ スプライトシートからアニメgifを作る。 :
ImageMagick を使って、スプライトシートからアニメgifを作れる。
magick -delay 2 -dispose Background spritesheet.png -crop 80x80 +adjoin +repage -adjoin -layers OptimizeFrame -loop 0 output.gif
- -dispose Background : 背景の消し方を指定。
- spritesheet.png : 入力画像を指定。
- -crop 80x80 : 1フレームを80x80で切り出す。
- +adjoin +repage -adjoin : 不明。
- -layers OptimizeFrame : アニメgifを最適化。
- -loop 0 : ループアニメを指定。(ループ回数制限を無しにしている。)
- output.gif : 出力ファイル名を指定。
[ ツッコむ ]
以上、1 日分です。