NUKEのスピードを速くするためのTips集
- 2016/12/19
(初公開 2016/12/19, 最終更新 2020/11/27)
NukeにはOpenEXR、16bit half floatの連番素材が向いています。もちろん"Crop"されたものを使った方が高速です。EXRには様々な保存形式があります。"tile"は重く、"scanline"は速いです。また、OpenEXR v1.x系よりもv2.x系の方が読み込みが高速になるように最適化されています。
同じ素材を何度も読んでいると、余計に時間が掛かります。
1つだけ読み込んで使いまわす方が負担が少なくなります。
Cropノードを使って計算範囲を小さくすれば、処理速度が向上します。動いている場合はCurveToolノードのAutoCropで分析し、四隅のキーフレームを作成する方法があります。ただ、Pythonを使う方が便利です。ノードを選択して以下のコードを実行すると、Cropノードが作成されます。
layer='a'は、alphaチャンネルを分析するという意味です。必要に応じてlayer='rgb'のようにすることもできます。また、何も書かなければプロジェクトのframe rangeが分析されますが、以下のように開始フレームと終了フレームを指定することもできます。
バウンディング・ボックス(BBOX)のサイズが不必要に大きいと、レンダリングが重くなったり、エラーでレンダリングできなくなる場合さえあります。BBOXは常に最小サイズにすべきです。BBOXは、TransformノードやCornerPinノード、Blurノードを使った場合などに大きくなります。BBOXが大きくなった直後に、ReformatノードかCropノードを追加すると良いです。
そもそも素材が必要以上に巨大な解像度である、という場合には、まずReformatノードを追加することで計算を高速にできます。
[Resize type]は"none"にして、"center"にチェックを入れるとセンター合わせされるので便利です。
Blurノードなど、デフォルトで[channels]が"all"になっているノードには注意した方が良いです。rgba以外のチャンネルにも処理を適用しているために、必要以上にNukeが重くなっている可能性があります。必要に応じて"rgba"や"rgb"、"alpha"に変更すると良いです。
また、menu.pyに以下のコードを書いておけば、Blurノードの[channels]はデフォルトで"rgba"になるので大変便利です。
Removeノードを使って、ノードの流れが持つチャンネルを"rgba"や"rgb"だけにできます。これ自体がNukeを軽くするわけではありませんが、下流に[channels]が意図せず"all"になっているノードが存在した場合に効果があります。
Transformノードの重いモーションブラーは使いません。
代わりにVectorBlurノードを使用します。
デフォルトではpostage stampは毎フレーム表示の更新を行い、Nukeを重くします。Shift + Sを押して[Preferences]ウィンドウを開き、Node Graphタブの [postage stamp mode] を "Static frame" に切り替えると良いです。
デフォルトでは計算中のノードツリーをぴかぴか光らせる機能がオンになっています。Preference(Shift+S) > Node Graph > "highlight running operators" のチェックを外すことでオフにできます。このチェックを外すとNukeが少しだけ軽くなるかもしれません。なんにせよNukeに余計な負荷を掛けたくありません。
ZDefocusノードのsizeに大きい値を入れるとどんどん重くなります。sizeに大きい数値を入れるよりも、GradeノードでDepthの値を調整した方が軽くなります。
ノードツリーにTrackerノードが含まれていると、それだけで重くなることがあります。Trackerノードはツリーの主流には置かない方が良いです。
ScanlineRenderノードの"samples"は上げすぎると確実に重くなります。必要以上に大きい数値になっていないか確認すべきです。
また、motion vectorが不要なケースなら、"off"と"none"に設定することでScanlineRenderノードを軽くできます。
重いのはサーバーで作業しているからだ、というケースは往々にしてあります。そのようなときのためにNukeにはローカライズ・キャッシュ機能があります。ローカルにコピーされたキャッシュを読み込むというものですが、Nukeの計算が劇的に速くなる場合があります。
Nukeに限ったことではありませんが、一般的にプリレンダリング(Prerendering)やプリコンプ(Precomp)と呼ばれる、合成作業の一部を書き出す手法があります。これによって作業を軽くできます。Writeノードで書き出したものを読み込み、Switchノードでノードツリーと書き出し済みのEXR連番ファイルを交互に切り替えられるようにします。
VectorBlurノードなど、重いノードは作業中はDisableして、レンダリング時だけ有効に切り替えるようにすると良いです。以下のPythonコードで、すべてのVectorBlurノードの"disable"のチェックを入れることができます。
いろいろ工夫しても、Nukeというのは重くなるものです。そういうときは、いくつかのNukeスクリプトファイルに分割して作業を行うべきです。たとえばトラッキング作業、ロトスコープ作業、ペイント作業などをフィニッシュの作業とは切り分けて、別のNukeスクリプトファイルで行います。または、作業したい部分のノードツリーだけを新規Nukeスクリプトにコピー&ペーストすると、軽く作業できるときがあります。
1. 素材のファイル形式
NukeにはOpenEXR、16bit half floatの連番素材が向いています。もちろん"Crop"されたものを使った方が高速です。EXRには様々な保存形式があります。"tile"は重く、"scanline"は速いです。また、OpenEXR v1.x系よりもv2.x系の方が読み込みが高速になるように最適化されています。
2. 複数のReadノードを避ける
同じ素材を何度も読んでいると、余計に時間が掛かります。
1つだけ読み込んで使いまわす方が負担が少なくなります。
3. Cropする
Cropノードを使って計算範囲を小さくすれば、処理速度が向上します。動いている場合はCurveToolノードのAutoCropで分析し、四隅のキーフレームを作成する方法があります。ただ、Pythonを使う方が便利です。ノードを選択して以下のコードを実行すると、Cropノードが作成されます。
nukescripts.autocrop(layer='a')
layer='a'は、alphaチャンネルを分析するという意味です。必要に応じてlayer='rgb'のようにすることもできます。また、何も書かなければプロジェクトのframe rangeが分析されますが、以下のように開始フレームと終了フレームを指定することもできます。
nukescripts.autocrop(first=20, last=40, layer='a')
4. BBOXが大きくなったらReformatノードかCropノードを追加
バウンディング・ボックス(BBOX)のサイズが不必要に大きいと、レンダリングが重くなったり、エラーでレンダリングできなくなる場合さえあります。BBOXは常に最小サイズにすべきです。BBOXは、TransformノードやCornerPinノード、Blurノードを使った場合などに大きくなります。BBOXが大きくなった直後に、ReformatノードかCropノードを追加すると良いです。
5. 大きい素材はまずReformat
そもそも素材が必要以上に巨大な解像度である、という場合には、まずReformatノードを追加することで計算を高速にできます。
[Resize type]は"none"にして、"center"にチェックを入れるとセンター合わせされるので便利です。
6. チャンネルに注意する
Blurノードなど、デフォルトで[channels]が"all"になっているノードには注意した方が良いです。rgba以外のチャンネルにも処理を適用しているために、必要以上にNukeが重くなっている可能性があります。必要に応じて"rgba"や"rgb"、"alpha"に変更すると良いです。
また、menu.pyに以下のコードを書いておけば、Blurノードの[channels]はデフォルトで"rgba"になるので大変便利です。
nuke.knobDefault("Blur.channels", "rgba")
7. チャンネルのRemove
Removeノードを使って、ノードの流れが持つチャンネルを"rgba"や"rgb"だけにできます。これ自体がNukeを軽くするわけではありませんが、下流に[channels]が意図せず"all"になっているノードが存在した場合に効果があります。
8. Transformノードのmotionblurは使わない
Transformノードの重いモーションブラーは使いません。
代わりにVectorBlurノードを使用します。
9. postage stamp
デフォルトではpostage stampは毎フレーム表示の更新を行い、Nukeを重くします。Shift + Sを押して[Preferences]ウィンドウを開き、Node Graphタブの [postage stamp mode] を "Static frame" に切り替えると良いです。
10. highlight running operators
デフォルトでは計算中のノードツリーをぴかぴか光らせる機能がオンになっています。Preference(Shift+S) > Node Graph > "highlight running operators" のチェックを外すことでオフにできます。このチェックを外すとNukeが少しだけ軽くなるかもしれません。なんにせよNukeに余計な負荷を掛けたくありません。
11. ZDefocusノードの注意
ZDefocusノードのsizeに大きい値を入れるとどんどん重くなります。sizeに大きい数値を入れるよりも、GradeノードでDepthの値を調整した方が軽くなります。
12. Trackerノード
ノードツリーにTrackerノードが含まれていると、それだけで重くなることがあります。Trackerノードはツリーの主流には置かない方が良いです。
13. ScanlineRenderノードを軽くする
ScanlineRenderノードの"samples"は上げすぎると確実に重くなります。必要以上に大きい数値になっていないか確認すべきです。
また、motion vectorが不要なケースなら、"off"と"none"に設定することでScanlineRenderノードを軽くできます。
14. ローカライズ機能を使う
重いのはサーバーで作業しているからだ、というケースは往々にしてあります。そのようなときのためにNukeにはローカライズ・キャッシュ機能があります。ローカルにコピーされたキャッシュを読み込むというものですが、Nukeの計算が劇的に速くなる場合があります。
15. プリレンダリングする
Nukeに限ったことではありませんが、一般的にプリレンダリング(Prerendering)やプリコンプ(Precomp)と呼ばれる、合成作業の一部を書き出す手法があります。これによって作業を軽くできます。Writeノードで書き出したものを読み込み、Switchノードでノードツリーと書き出し済みのEXR連番ファイルを交互に切り替えられるようにします。
16. 重いノードは作業中にDisableしておく
VectorBlurノードなど、重いノードは作業中はDisableして、レンダリング時だけ有効に切り替えるようにすると良いです。以下のPythonコードで、すべてのVectorBlurノードの"disable"のチェックを入れることができます。
for n in nuke.allNodes('VectorBlur'):
n["disable"].setValue(1)
17. Nukeファイルを分割したり、新規Nukeファイルで作業する
いろいろ工夫しても、Nukeというのは重くなるものです。そういうときは、いくつかのNukeスクリプトファイルに分割して作業を行うべきです。たとえばトラッキング作業、ロトスコープ作業、ペイント作業などをフィニッシュの作業とは切り分けて、別のNukeスクリプトファイルで行います。または、作業したい部分のノードツリーだけを新規Nukeスクリプトにコピー&ペーストすると、軽く作業できるときがあります。
参考文献
1. Scott, Chambers. "10 tips to optimising Nuke and creating efficient workflows". Nukepedia. 2010-01-29. http://www.nukepedia.com/written-tutorials/10-tips-to-optimising-nuke-and-creating-efficient-workflows/ (参照2016-12-18).
2. satheesh R. "Nuke workFlow optimisation TIPS". Nuke Tutorials & Tools. 2012-10-20.
http://satheeshnuketutorials.blogspot.jp/2012/10/nuke-workflow-optimisation-tips.html (参照2016-12-18).
3. WWYSKWW. "Nuke的 その1~4". ------------. 2013-09-18. http://wwwyskwww.blogspot.jp/2013/09/nuke-14.html (参照2016-12-18).
4. 鍋潤太郎. "[鍋潤太郎のハリウッドVFX最前線]Vol.15 NUKEコンポジター 慎ともこ女史に訊く! ~「猿の惑星:創世記」事例". PRONEWS. 2013-09-18. http://www.pronews.jp/column/juntaro-nabe/1110071100.html (参照2016-12-18).
5. KLF. "作業を快適にするあれこれ". コンポジット系(Vice Magazine口調). 2012-04-21. http://advcomposite.blogspot.jp/2012/04/blog-post.html (参照2016-12-18).
1. Scott, Chambers. "10 tips to optimising Nuke and creating efficient workflows". Nukepedia. 2010-01-29. http://www.nukepedia.com/written-tutorials/10-tips-to-optimising-nuke-and-creating-efficient-workflows/ (参照2016-12-18).
2. satheesh R. "Nuke workFlow optimisation TIPS". Nuke Tutorials & Tools. 2012-10-20.
http://satheeshnuketutorials.blogspot.jp/2012/10/nuke-workflow-optimisation-tips.html (参照2016-12-18).
3. WWYSKWW. "Nuke的 その1~4". ------------. 2013-09-18. http://wwwyskwww.blogspot.jp/2013/09/nuke-14.html (参照2016-12-18).
4. 鍋潤太郎. "[鍋潤太郎のハリウッドVFX最前線]Vol.15 NUKEコンポジター 慎ともこ女史に訊く! ~「猿の惑星:創世記」事例". PRONEWS. 2013-09-18. http://www.pronews.jp/column/juntaro-nabe/1110071100.html (参照2016-12-18).
5. KLF. "作業を快適にするあれこれ". コンポジット系(Vice Magazine口調). 2012-04-21. http://advcomposite.blogspot.jp/2012/04/blog-post.html (参照2016-12-18).
- 関連記事
-
- 10分で分かるNUKE*4 (ブラー&デフォーカス編) (2024/05/26)
- 10分で分かるNUKE*3 (Rotoノード編) (2023/11/06)
- さまざまなグレイン・ワークフロー(Nuke) (2023/09/14)
- Nukeのノードのクローンは使ってはいけない!(という都市伝説?) (2023/05/11)
- NukeのTCL入門!さまざまな情報を取得して活用する方法 (2023/04/18)
- スクリーンクリーン: Nukeでグリーンバックを均一にするテクニック (2023/04/04)
- 10分で分かるNUKE*2 (2020/12/15)
- 10分で分かるNUKE (2020/12/01)
- NukeにおけるOCIOを使ったACESシーンリニアワークフロー (2019/05/08)
- NUKEのスピードを速くするためのTips集 (2016/12/19)
- Nuke Pythonを使ってノードの設定を一括変更する (2016/12/03)
- NUKEのエクスプレッション(Expression)の便利な使い方 (2016/10/18)
- NUKE初心者におすすめのショートカット (2016/10/11)
- NUKE入門! 画像サイズをマスターする10項目のルール (2016/07/15)
- NUKEのノードツリーを整理してワンランク上の合成作業を目指す (2015/11/17)