Blender 5.2 LTS 新機能:Cyclesのメモリ不足を解消する「テクスチャキャッシュ」機能が追加

CGソフト

Blender 5.2 LTS では、多数の画像テクスチャを使用するシーンでも、レンダリング時のメモリ使用量が大幅に改善されます。ここでは、Blender 公式開発ブログで紹介された新機能 Cycles テクスチャキャッシュ の仕組みと使い方を紹介したいと思います。

テクスチャキャッシュについて

テクスチャキャッシュは、多くの画像テクスチャを使用するシーンにおいて、メモリ使用量とレンダリングの起動時間を大幅に削減する機能です。膨大なテクスチャデータを扱う際のリソース不足を解消し、より規模の大きいシーンの構築を可能にします。

一方で、レンダリング時の計算速度にわずかな影響が生じることや、最適化された専用ファイル(.tx)を保存するためのディスク容量が余分に必要になるといったトレードオフもあります。

Blender 5.2 LTS の Cycles には、レンダリングに必要な画像タイルと解像度だけを読み込む仕組みが導入され、レンダリング時間をほとんど増やすことなくメモリ使用量を大幅に抑えられる ようになりました。

機能の使い方

テクスチャキャッシュ機能を利用するには、レンダリングプロパティの Performance(パフォーマンス) セクション内にある Texture Cache パネルを開き、Auto Generate(自動生成) を有効にします。

Blender 5.2 LTS のテクスチャキャッシュ機能を利用するには、レンダリングプロパティ内の Texture Cache パネルを開き、Auto Generate(自動生成) を有効にします。

この設定をオンにすると、使用される各画像に対して最適化された .tx ファイルが自動生成されます。生成されたファイルは元の画像と同じ階層に作成される blender_tx/ フォルダに保存され、レンダリングに必要なタイルと解像度だけを効率よく読み込めるよう設計されています。

また、この仕組みは個人ユーザーでも手間なく使えるように作られており、画像を更新すれば .tx ファイルも自動で再生成されます。カラースペースやフィルタリングの設定も、シェーダーノードでの使用状況に応じて適切に判断されます。

さらに、レンダーファームやプロダクションパイプライン向けには、より細かな制御が可能なオプションも用意されています。

パフォーマンスについて

シーンによってメモリ削減やパフォーマンス向上の効果は大きく変わります。特に、ジオメトリよりも画像テクスチャがどれだけメモリを占めているかが、効果を左右する重要なポイントになります。

Blender 開発チームが、多数の画像テクスチャを使用したベンチマークシーンで検証を行ったところ、テクスチャキャッシュ によってメモリ使用量が減り、レンダリング時間も最適化されることが確認されています。

Txファイルの手動生成と設定

Texture Cache パネルには、必要に応じて .tx ファイルを手動で生成するためのボタンも用意されています。デフォルトの保存場所は、Blenderのプリファレンス(Preferences)から変更することが可能で、画像ファイルからの相対パス、あるいは絶対パスのいずれかを指定できます。

なお、他のレンダラーやOpenImageIOの maketx ツールによって生成された標準的な .tx ファイルも読み込むことは可能ですが、Cyclesに最適化されたファイルと比較すると読み込み効率が落ちる場合があります。

また、コマンドライン(CUI)を使用してCyclesネイティブの .tx ファイルを生成することも可能です。以下のコマンドが提供されています。

# blendファイル内のすべての画像に対してtxファイルを生成する
blender scene.blend --command maketx

# 特定の画像ファイルに対して個別にtxファイルを生成する
blender --command maketx image.png --colorspace sRGB

ビューポートの変更点

Blender 5.2 LTS のテクスチャキャッシュ導入に合わせて、Simplify(簡略化)パネルの設定もアップデート されています。 従来の Texture Limit(テクスチャ制限) オプションは廃止され、代わりに Texture Resolution をパーセンテージで指定する方式へと変更されました。

この新しい設定は、テクスチャキャッシュ機能のオン・オフに関係なく動作し、シーン全体のテクスチャ解像度を一括で調整できます。 より直感的に扱えるようになり、軽量化したい場合のコントロールがわかりやすくなっています。

この機能は、特に複雑なシーンをビューポートでレンダリングする際に効果を発揮します。テクスチャ解像度を 50% や 25% に下げることで読み込みが軽くなり、作業中でもテクスチャが確実にメモリ内に収まるよう調整できます。結果として、インタラクティブな操作がよりスムーズになります。

さらに、メモリ管理の最適化として、ビューポートのレンダリングが完了し Blender がアイドル状態になると、使用されていない画像データが定期的にメモリからクリアされる仕組みも導入されています。これにより、長時間の作業でもメモリ使用量が過度に膨らみにくくなっています。

技術的な詳細

ここからは、新機能の裏側を支える技術的な詳細について解説します。今回のシステムは、CPUだけでなく、機能やAPIが異なるさまざまなGPUバックエンドにまたがって動作するよう設計されています。

GPUアーキテクチャへの対応

従来のCPUベースのテクスチャキャッシュシステムでは、スレッド間でメモリ予算を管理しつつ、欠落している画像タイルがあった場合は一時的にスレッドをブロック(待機)させ、使用中のタイルが破棄されないようロックをかける手法が一般的です。

しかし、何千ものスレッドが同時に実行され、実行中に直接ディスクにアクセスすることが難しいGPUにおいて、この手法は現実的ではありません。そこでCyclesでは、すべてのスレッドからキャッシュミス(欠落)を集計し、不足しているタイルをバッチ処理で一括して読み込み、その後カーネルを再実行するというアプローチが採用されました。

この仕組みはゲーム開発などで用いられるシステムに似ていますが、正確なレンダリング結果が求められるCyclesでは、実際のテクスチャが読み込まれるまでの間に低解像度の代替画像を使用することはできません。Cycles のウェーブフロントパストレーシングでは、数百万のパスが同時に処理されるため、この特性がタイル読み込みによるレイテンシを自然に隠し、GPU 上でも効率的なテクスチャアクセスを実現しています。

タイルマップ

画像タイルは読み込まれる際にテクスチャ内にパッキングされ、各画像タイルから、ピクセルが格納されているテクスチャ内のオフセット位置への「仮想テクスチャマッピング」が行われます。

各タイルにはリピートモードに応じた2ピクセルのパディング(余白)が設けられています。この余白によって、GPU のハードウェアフィルタリングをそのまま活用しながら、CPU・GPU のどちらでも 単一タイルからの読み込みだけで正しいフィルタリング結果を得られる ようになっています。

レイの微分

カメラからの距離や角度に応じて適切なミップマップ(解像度)レベルを見つけるために、ネイティブのSVMシェーディングシステムに「Ray Differentials(レイの微分)」機能が追加されました。この実装は、自動微分による双対数(Dual numbers)の計算に基づいています。

興味深い点として、間接バウンス(Indirect bounces) の計算では、直接光ほど細かなディテールが必要ないため、あえて微分の幅を広げて処理しています。この工夫により、様々なシーンにおいてテクスチャキャッシュのメモリ消費を約30%削減することに成功しています。

シーン内でのミップマップレベルの視覚化

キャッシュの破棄

CPUベースのシステムでは固定のメモリ予算を設定することが多いですが、数千万ものパスが同時に処理される GPU では、キャッシュに収まりきらなくなった瞬間にパフォーマンスが急激に低下するリスクがあります。

そのため、今回のシステムでは厳密なメモリ予算を設ける代わりに、Cyclesに既存する「タイルレンダリング」の仕組みを利用したキャッシュ破棄戦略が採用されています。Cycles はデフォルトで 2048 ピクセル単位の大きなタイルでレンダリングを行い、レンダーパスをディスクに書き出すことでメモリを節約します。

テクスチャキャッシュでは、「直近の2つのレンダータイルで使用されなかった画像をメモリから破棄する」というルールが適用されます。1つ目のタイルで画像を読み込み、2つ目のタイルでさらに画像を読み込み、3つ目のタイルを描画する前に、使われなくなった画像を破棄します。間接バウンスで使用されるテクスチャの多くは複数タイル間で共有されるため、必要なデータはメモリに残り続け、不要なものだけが効率よく整理されます。

この仕組みにより、4K・8K・16K といった超高解像度のレンダリングでも、テクスチャキャッシュのメモリ使用量をほぼ一定に保つことが可能 になります。 また、搭載メモリが少ない環境では、レンダータイルサイズを 1024 や 512 に下げることで、多少のパフォーマンス低下と引き換えに、さらにメモリを節約することもできます。

今後の課題と展望

Blender 5.2 LTSのリリースに向けて、開発チームは以下の課題に取り組む予定としています。

  • 古い世代のGPUにおけるパフォーマンスの調査
  • Simplify(簡略化)のテクスチャコントロール機能のさらなる改善
  • レンダーファームやプロダクションパイプライン向けの細かな調整

さらに将来的なアップデートに向けて、以下のような改善の機会も残されているとのことです。

  • ビューポートナビゲーション時の双方向性(インタラクティビティ)の向上
  • Blendファイルにパックされたテクスチャのサポート
  • ミップマップのバイアス制御
  • シェーダー内でRay Differentials(レイの微分)にアクセスできる機能の追加
  • バンプマップおよびノーマルマップにおけるテクスチャフィルタリングの改善

フィードバックについて

Cyclesのテクスチャキャッシュ機能は、すでにBlenderのデイリービルドにて利用可能です。

不具合を発見した場合はバグトラッカーへ報告し、フィードバックがある場合はDevTalkのトピックに投稿することが推奨されています。

Blenderの開発をサポート

このような新機能の開発には、専任のデザインおよび開発リソースが必要となります。Blenderの継続的な進化を支援するための「Blender Development Fund(開発基金)」では、月額または1回限りの寄付を受け付けています。

詳細や支援については、Blender Fundの公式ページをご覧ください。


Cycles Texture Cache

コメント

Translate »
タイトルとURLをコピーしました