前回更新「Vueで動画を作る基礎編2」の続き。
ようやく「一連の更新の本題」的なお話になります。
このページのざっくりまとめ
このページの内容は、
- Vueでのレンダリングは、なるべく低品質で済ます
- Vueでレンダリングした動画は、外部ツールで処理してそれなりの画質に見せる
- 動画の処理には、AviSynthとVirtualDubModというツールを使ってみる
- Vueのレンダリングのコツ
- Vue5~6時代のレンダリングは、アンチエイリアスが弱い。
- なので少し大きめ (目的サイズの1.5~2倍)でレンダリングする
- この時、アンチエイリアスは最低限の品質でよい
- 補足
Vue7~10あたりのドコかから、「大きくレンダリングして後で縮小する」方が時間がかかるようになってしまった。(レンダリング品質が向上した) - つまり、このページの情報は既に役に立たない。
といった感じになります。以下、本題に入ります。
今回作成した動画
以前のレンダリング結果との比較はページ後半。
まずは設定から説明します。
Vueのレンダリング設定
設定詳細は、例によって以下の図で説明します。
▲クリックで拡大 (画像は3枚あります)
A・・・・品質ブースト
B・・・・間接光のサンプル数
C・・・・一括評価範囲
D・・・・アンチエイリアスのサブレイ数
E・・・・品質しきい値
F・・・・最終レンダリングパスの最適化
その他・・・・「確定的アンチエイリアス」と「ちらつき除去有効」
今回の動画レンダリング時の設定
- Vueのレンダリングサイズ
・・・・512x384 - 各種設定(この図/この図)
・・・・D 1x1、E 10%、F 有効/無効(2種類作成)
・・・・※ A、B、Cは初期設定のまま - 各種設定(この図)
「確定的アンチエイリアス」と「ちらつき除去有効」
・・・・OFF - レンダリングの出力設定
・・・・HuffYUVコーデックを (色空間YUY2) で出力
これを縮小処理し、最終出力サイズは「256x192」としています。
縮小処理の方法
今回は AviSynth と 携帯動画変換君 を使ってみました。
補足項目 (別館サイトの解説ページ)
- AviSynth
・・・・Avisynthの使い方(初心者向け) - 携帯動画変換君
・・・・ MP4動画を簡単に作る方法 / 携帯動画変換君の使い方、改造
今回のAviSynth のスクリプトは以下
Avisource("D:\blogavi\test.avi")
#↑Aviファイルの保存してあるパスを入れる。
PMD(10, 256) #←リンギングノイズ除去動画サンプル
Convolution3D(0,0,0,255,255,10,0) #←時間軸ノイズ除去
LanczosResize(256,192) #←リサイズ(今回の場合1/2に)
return last
作成したスクリプトを携帯動画変換君(設定:h264、Q値=21)にドラッグ&ドロップして動画作成しました。
※ このスクリプトの意味が分からない場合、ページ最下段に補足を入れています。
完成した動画サンプル
完成品(1)
Vueレンダリング時間 33分44秒
512x384、D 1x1、E 10%、F 有効
「確定的アンチエイリアス」と「ちらつき除去有効」無効
PMD(10, 256)
Convolution3D(0,0,0,255,255,10,0)
LanczosResize(256,192)
完成品(2)
Vueレンダリング時間 33分44秒
512x384、D 1x1、E 10%、F 有効
「確定的アンチエイリアス」と「ちらつき除去有効」無効
PMD(10, 256) なし
Convolution3D(0,0,0,255,255,10,0)
LanczosResize(256,192)
完成品(3)
Vueレンダリング時間 18分23秒
512x384、D 1x1、E 10%、F 有効
「確定的アンチエイリアス」と「ちらつき除去有効」有効
PMD(10, 256) なし
Convolution3D(0,0,0,255,255,10,0)
LanczosResize(256,192)
前ページの動画
以下は「Vueで動画を作る基礎編2」の動画サンプル。
普通にレンダリングすると、30分程度のレンダリング時間では以下の画質になります。
ブロードキャストド
レンダリング時間 31分40秒
(D)4X9(E)85(F)OFF
レンダリング時間 37分44秒
今回作成したサンプルの方が、細部のちらつきが格段に減っているのが分かるだろうか?
ここでのチェックポイント
- 完成品(1) と (2) は レンダリング時間は33分。
この程度のサンプルにしては時間は掛かっているが、細部が保持され、リンギングノイズも無いCG動画に仕上がった。
普通にレンダするより恐らく2~3倍効率が良い筈である。 - 完成品(3)は、「最終レンダリングパスの最適化」を有効にした事で「影の細部」がかなり破綻している筈なのだが、Convolution3Dの 時間軸ノイズ除去 がいい感じに破綻を隠してくれている。
- 前ページの動画サンプルと比較すると、同程度のレンダリング時間ながら、リンギングはほぼ無くなっている。細部もややボケたカンジはあるものの、それなりに保持できている。(そして 時間軸ノイズ除去の副産物になるのだが、モーションブラーもかかっている。)
この方法のメリット
この方法を取れば、「最後の微調整」はフィルタの選択やフィルタの強さの調整になるので、「気に入る結果が出るまでの微調整」はレンダリングに比べ遥かに短い時間で済む。
今回は 意図的にリンギングノイズの発生しやすい素材を選んだ。それが このレベルに到達すれば 本当に大満足である。
まとめ
- Vueのレンダラは細部の描画に優れるが、アンチエイリアスの性能は悪い。レンダ品質を上げれば解決するが、かかる時間は爆発的に増える。
- 動画にした場合に リンギングノイズも発生しやすい。こちらもレンダ品質を上げれば 解決するが、かかる時間は爆発的に増える。
- Vueのレンダラはリンギング除去機能を一応持っているが、強度一定で性能はあまり良くない。
- 低めのレンダ品質で、縦横2倍程度の大きさでレンダリング、その後外部ソフト(私の場合携帯動画変換君とAviSynth)で色々加工すれば、Vue単体でレンダリングしたものより、良い結果が得られる。
このページの情報は以上です。
補足追記
上の方で紹介したAviSynthスクリプト中の各行の説明、動画の保存にYUVを使う理由など
1.Avisource("D:\blogavi\test.avi")
↑自分が保存した動画のファイル名とパスを記述してください。
2.PMD(10, 256) #←リンギングノイズ除去
AviSynthの外部プラグインです。リンギングノイズ除去を行います。
パラメータは左から「ノイズ除去の強さ(範囲0-20)」、「ノイズ除去のしきい値(範囲0-255)」です
画質はかなり甘くなるので、必要ないと感じたら使わない方が無難です。
3.Convolution3D(0,0,0,255,255,10,0) #←時間軸ノイズ除去
AviSynthの外部プラグインです。
大まかに説明すると、平面と時間軸、両方で上下左右、前後1フレームの近傍 各1ピクセルを参照して、ノイズ除去をしてくれます。
パラメータは左から「ノイズ除去方法(0 or 1)」、「平面での輝度しきい値」、「平面での色差しきい値」、「時間軸での輝度しきい値」「時間軸での色差しきい値」、「時間軸での影響力」、「0固定(1にするとデバッグモード)」となっています。
しきい値の数値は(0~255)、時間軸影響力は(0~100)(小数点可)となっています。
今回は平面軸でのノイズ除去は行わず、時間軸でのノイズ除去を最大に、モーションブラーをかけるような使い方をしています。
4.LanczosResize(256,192) #←リサイズ
内臓フィルタです。
過去記事「VirtualDubModで高速化」でも紹介したリサイズ方法。
AviSynthは、他にも外部プラグインで優秀なリサイズフィルタを持っています。
5.return last
「この行で終わりですよ、持っている画像を帰しなさいよ」とAvisynthに教えてあげる行です。
書かなくてもエラーが出ることは殆どありません。
YUY2って何?
「色空間」と言うと何のことか解らないと言う方もいらっしゃると思いますが、「RGB」と言えば聞いたことがあるでしょう。
RGBとは光、色の情報をレッド(R)、グリーン(G)、ブルー(B)の3つに分けて記録する方法です。
その他に、YUY2、YUV、YV12と言う色空間もあります。こちらは輝度(Y)と色差(U、V、C等々表現されます)の情報で分離、記録されます。TV放送やDVDビデオがこの方法を取っています。
ものすごく大雑把な説明ですが、趣味でCGやる分にはこんな感じで覚えておいて問題無いでしょう。
色空間をYUY2で保存する訳
このブログで使用しているAviファイルは、Xvidという圧縮技術を使っています。Xvidは「YV12」形式で保存されるので、最初から「YV12」で保存すれば良いのですが、今回使用している「Convolution3D」が「YV12では時間軸フィルタが殆ど効かない」と言うバグがある為、
やむなく「YUY2」で保存しています。
また、AviSynthの使用を前提で考える場合、入手出来るフィルタの大部分が「YUY2」又は「YV12」対応なので、RGBで保存する事にメリットはありません。
2007.2.16追記 多分H264もYUY2かYV12、それに準ずる色空間だと勝手に予想し、YUY2のまま検証進めました。
その他補足
※ドットバイドットでの精度的に言うと RGBの方が優れていますが、動画として扱う場合、最終的には現在主流のMpeg2、Avi(DivX、Xvid等)、H.264等々に変換する事になると思います。
そういった場合、結局YUY2、YV12等々の形式に変換する事になります。
どういう風に精度が落ちるかは別ページで説明しています → 色空間の話-動画と静止画の違い
色空間についてもっと詳しく知りたい方は→カラーフォーマットの謎