見出し画像

Blender 5.0 → Nuke 17 のUSDパイプラインを試してみた

1. Blender × Nukeを試してみた

ふとしたきっかけでNuke17を検証することになりました。触っているうちに、Nuke17にusd形式の3Dモデルデータを扱えると知ったので、BlenderとNukeの連携を試してみました。Nuke17でBlenderの3Dモデルを読み込むことができれば、3Dモデルと実写合成をする時に、Nuke17の強力なノードやコンポジットを使えるのではないかと思ったからです。

うまくいったことと、うまくいっていないこともあるのですが、学ぶことも多いので備忘録的にnoteを書いてみることにしました。

Nuke17とBlenderを連携して試してみた背景

  • Nukeは映画VFXの業界標準コンポジットツールです

  • Nuke 17(2026年2月リリース)でUSDベースの3Dシステムが正式版になりました

  • BlenderがUSD書き出しに対応している

  • この2つが繋がれば「Blenderでモデリング → Nukeで実写合成」が低コストで実現できるのでは?

  • 実際にどこまで使えるのか、特にマテリアルの互換性なども検証してみたいです

2. 環境

  • Blender 5.0

  • Nuke 17 Non-Commercial(無料版)

  • Mac M4 Max 64GB

3.Blenderの書き出しと、Nuke17での読み込み

Blender側

  • Blenderでスザンヌ(モンキー)をつくり、マテリアルにPrincipled BSDFのベースカラーをピンクに設定

  • ファイル → エキスポート → USD(.usdc)で書き出し

  • エキスポートのマテリアル設定でMaterialXネットワークにチェック (Nuke17とマテリアルに互換性があるらしい)

ただのスザンヌ
USD形式でエキスポートができる
Nuke17と互換性のあるマテリアルXにチェック

Nuke17での読み込み

Nuke17でBlenderで作った3Dモデルを読み込み、HDRIで環境光と仮想カメラをいれてみた

Nuke17のGeoImportノードでusdファイルを読み込み、GeoImportノードをViewノードにつなげる。Hydraビューアで3Dモデルが表示されます。ジオメトリの受け渡しは成功。BlenderとNuke17で軸が異なるので、GeoTransformで3Dモデルのスケールと回転を調整しました。

GeoImportノードをViewノードにつなげるだけでNuke17で表示されました

Nuke17のCameraノードを作成してScanlineRender2に接続しました。ScanlineRender2ノードは、3Dシーンを2D画像にレンダリングするノードで、Blenderで言うF12(レンダリング)ボタンと同じ役割で、3Dモデル、カメラ、ライトが揃った状態で、カメラから見た絵を画像として出力する機能です。

ScanlineRender2経由でレンダリングします

ScanlineRender2からWriteをつなげてレンダリングしようとしたら、Non-commercial版は書き出しサイズに制限がありました。そのため途中にReformatノードで書き出しサイズをHD-1080に変換する必要がありました。

Nuke17でのHDRIライティングの設定

せっかくなので、HDRIをNuke17に設定して、レンダリングしてみることにしました。

GeoDomeLigntのHDRI画像読み込みに少しハマる

やったことは、Nuke17のGeoDomeLightノードを作成してGeoMergeで3Dモデルとマージ。ただしGeoDomeLightにはHDRIのファイル指定UIが見当たらなかったのでReadノードで、HDRIのexrファイルを読み込み、ReadノードからGeoDomeLightへつなげました。

GeoMergeで3DモデルとHDRIのデータをマージして、ScanlineRender2のobj/scnにつなげました。

Nuke17のプレビュー画面

レンダリングしてみた

Writeノードで.jpgで書き出ししてみると、BlenderのプリンシプルBSDFで設定したベースカラーのピンクは渡っているのですがが、明らかにメタリック感が強いようです。

あきらかにメタルネスとラフネスがBlenderと合ってない

Blender側ではメタリック0、粗さ0.5に設定しているのに、Nukeのレンダリングではツルツルのメタル質感でした。

Nuke17のHydraビューアでは正しく表示されているのに、ScanlineRender2の出力だけおかしいようです。

ScanlineRender2のMaterialセクションでMaterial Familiesが「slr mtlx」や「slr preview」になっていることを確認 → MaterialXは認識されているが、レンダリング結果がおかしい

Nuke17のScanlineRender2のマテリアル設定

ClaudeにUSDファイルの中身を解析してもらう

ClaudeがUSDファイルの中身を解析したいと提案したので下記をやってもらいました。

  • PythonのpxrライブラリでUSDCファイルをテキスト(USDA)として書き出して中身を確認

  • UsdPreviewSurface側:metallic = 0、roughness = 0.5 → 正しい

  • MaterialX(OpenPBR Surface)側:base_metalness = 0、specular_roughness = 0.5 → 正しい

  • ベースカラーも正確に一致

  • Blender側のエクスポートに問題はなさそう

Claudeの解析結果。合っているような合っていないような。

Claudeによると、BlenderのMaterialXエクスポートはOpenPBR Surface(ND_open_pbr_surface_surfaceshader)で出力される。その一方、NukeのMtlxStandardSurfaceはAutodesk Standard Surfaceベースなので、シェーダーモデルが違う可能性で起きているのでは?というのですが、判断がつきませんでした。

感想

ちょっと中途半端な結果になってしまいましたが、BlenderからUSD形式で書き出した3DモデルをNuke17で読み込む作業の基礎が確認できました。

あとはNuke17のGeoImportノードなどを使ってノードを組み、カメラノードとレンダーノードを組み合わせてやりたいことの基礎が自力で組めたのは良かったです。Nuke17のノードベースのワークフローがBlenderのシェーダーエディタと似ていて、思ったより馴染みやすかったです。

BlenderとNuke17でMaterialXをつかったマテリアル互換性があるかと思っていたのですが、自分のやり方ではレンダリングのところだけうまくいきませんでした。他にやり方があるのかもなので、うまくいったらまた記事にしたいと思います。


いいなと思ったら応援しよう!