の新機能Katana 3.0

3Delightレンダラー

Katana今バンドル3Delight:プロダクションレンダリングの高い要求に耐えるように設計された単方向パストレーサー。3Delightプラグインのワークフローオプションは次のとおりです。

  • 完全にインタラクティブなライブレンダリング(ライト、オブジェクト、マテリアル、カメラの追加、減算、変更)
  • 簡略化されたレンダーパス管理とサンプリングコントロール
  • マルチライトツールとGafferThreeノードを介したインタラクティブライトミキシング
  • 深い出力を持つすべてのライトタイプの高速大気レンダリング
  • すべてのライトタイプにわたる統一されたライトサンプリング
  • Cryptomatteワークフローのサポート
  • 完全なOSLシェーディングエンジン

Katanaインストーラーは、3Delightをオプションのコンポーネントとして提供しますKatanaインストール。3Delightは、プレビューおよびライブレンダリングで無料で使用できます。ディスクおよびバッチレンダリングには、 3delight_r透かしを削除するライセンス。お問い合わせくださいsales@foundry.com詳細については。Katanaのサンプルプロジェクトでは、必要に応じてレンダラーで3Delightを使用するようになりました。

注意:  Katanaレンダラーに依存しないレンダラープラグインAPIを介して他のレンダラーを引き続きサポートします。

Hydra-Powered Viewer

Katana 3.0には、既存のものよりも大幅にインタラクティブでスケーラブルな新しい3Dシーンビューアータブが含まれています視聴者タブ。

新しいビューアーはヒドラ、オープンソースの主要コンポーネントとしてPixar Animation Studiosで開発された、最新のスケーラブルなOpenGLレンダリングアーキテクチャユニバーサルシーンの説明 (米ドル)事業。

ビューアー(Hydra)タブは次を使用して実装されますKatanaのViewer API。これは、 Katana 2.6。

パフォーマンスの改善

のパフォーマンスの改善Katana 3.0に含まれるもの:

  • の改善Katanaのシーン処理ライブラリGeolib3。

    • 「no-op」シーングラフの場所のメモリと計算のオーバーヘッドを大幅に削減しました。

    • シーンの依存関係の中断のないクッキングの実験的サポート。通常、Geolib3は、クックされていない場所、またはGeolib3のキャッシュにない場所から位置データが要求された場合、クック操作を中止して再スケジュールします。この機能を有効にすると、Geolib3は位置データの欠落を検出すると、代わりにそのデータを再帰的にクックし、位置データが要求されたポイントで元のOpに戻ります。この機能を有効にするには、環境変数を設定します。 KATANA_ENABLE_RECURSIVE_COOKS = 1

    • 最適化FnAttribute

      • 一般的に作成される属性(整数[0、256]、フロート0.0fおよび1.0f、ダブル0.0および1.0、空の文字列および空のグループなど)は一度だけ作成され、その後再利用されます。これにより、メモリ割り当てのオーバーヘッドとFnAttributeオブジェクトの参照カウントの操作が回避されます。

      • FnAttributeクラスは現在、移動に対応しており、移動コンストラクターと移動割り当て演算子を定義しています。サポートされているコンパイラを使用すると、FnAttributeオブジェクトの参照カウントを操作するオーバーヘッドを削減できます。

      • DataAttribute クラスは、個別のコピーを作成するのではなく、構築されたデータバッファの所有権を取得できるようになりました。これにより、データをFnAttributeの内部バッファーにコピーする必要がないため、ピークメモリ使用量を削減し、全体的なレンダリング時間を短縮できます。
    • AlembicIn、AttributeSet、ConstraintResolve、LookFileResolve、OpScriptなど、パフォーマンスが重要ないくつかのGeolib3 Opsの最適化。

    • API境界で文字列の一時的なコピーを作成しないようにする最適化。たとえば、上の多くのメソッドGeolibCookInterface文字列パラメーターを取得するようになりましたStringViewの代わりにconst std :: string&

  • のパフォーマンスの改善レンダリングログ大量のログ出力を処理する場合、 モニターレンダラーからの画像更新を処理するとき、およびシーングラフ多数の場所が開いているか固定されている場合。

  • ノードグラフの名前空間の処理が改善され、ノードグラフの読み込み、検索、操作にかかる時間が短縮されました。

  • ノードグラフとGeolib3 Opツリー間の同期時間の改善。

  • アプリケーションの起動時間とCPU使用率の改善。

ユーザーインターフェースの改善

Katana 3には、アプリケーションの全体的なユーザーエクスペリエンスを向上させる多数の機能強化とバグ修正が含まれています。注目すべき変更点は次のとおりです。

  • アーティストが自分の作品に集中できるように、よりモダンでフラットな外観のカラーパレットが改訂されました。

  • より大きな色見本。

  • パラメーター、属性、プロジェクト設定、および設定のツールチップ。属性の種類などの情報に簡単にアクセスできます。

  • 2種類のコントロールを区別するために、再設計されたチェックボックスとラジオボタン。

  • 再編成タブメインメニューとタブを追加組み込みタイプのタブを明確に区別するメニュー。ロードされるタブのタイプKatanaリソースの場所、ユーザーのホームディレクトリから読み込むことができるカスタムタイプのタブ。

  • アプリケーションのフォントサイズの設定に応じてスケーリングされる、さらに多くのUI要素。

引き続き、ユーザーインターフェイスの側面を改善します。 Katana顧客からのフィードバックを取り入れたリリースを予定しています。

廃止された機能

  • AttributeScriptノードタイプは廃止され、次のノード作成メニューから非表示になりました。 ノードグラフタブ。既存のAttributeScriptノードKatanaプロジェクトは引き続き動作し、AttributeScriptノードは次の方法で作成できます。 NodegraphAPIスクリプトを作成しますが、新しいプロジェクトの場合は、代わりにOpScriptノードとLuaを使用することをお勧めします。AttributeScriptノードのサポートは、将来のリリースで削除される予定です。

  • GafferThreeに取って代わられた古典的なGafferノードタイプKatana 2.0v1は、ノード作成メニューから非表示になりましたノードグラフタブ。

  • 次のほとんど使用されていない2Dノードは、 ノードグラフタブ:ImageAddMix、ImageAtop、ImageAverage、ImageBlack、ImageDifference、ImageDistort、ImageDivide、ImageExclusion、ImageFrom、ImageGeometric、ImageHypot、ImageMatte、ImageMatteMix、ImageMax、ImageMin、ImageMinus、ImageMix、ImageMultiply、ImageOver、ImagePlus、ImageScreen、ImageUnder、ImageWhite。これらのノードタイプは、スクリプトを使用して作成できます。既存のプロジェクトのノードは以前と同様に機能し続けます。

  • color / useSingleComponentRGB好み、商業で使用されなかったKatana、廃止されました。

サードパーティソフトウェアの変更

次の表は、付属のサードパーティソフトウェアのバージョンに対する変更をまとめたものですKatana

バージョンKatana 2.6 バージョンKatana 3.0v9
3Delight 出荷されてない 13.4.9
アレンビック 1.5.3 1.6.1
LuaJIT 出荷されてない 2.1.0
ナンピー 1.5.1(Linuxのみ) 出荷されてない
Python 2.7.3 2.7.13
RLM 9.3 12.2
TBB 4.4.6 2017アップデート8
米ドル 出荷されてない 0.8.0
PyQt 4.10.4 4.11.4
ZeroMQ 3.2.5 4.2.1
PyZeroMQ 13.0.2 16.0.2
VS CRT 2010(Windowsのみ) 出荷されてない

コンパイラの変更

Katana 3.0は、LinuxではGCC 4.8、WindowsではVisual Studio 2015でコンパイルされます。

Katana 2.5およびKatana 2.6は、LinuxではGCC 4.1、WindowsではVisual Studio 2010で構築されました。

コンパイラの変更は、ほとんどのお客様には影響しません。互換性の理由から、 Katana APIを長い間、顧客のプラグインライブラリに直接コンパイルされたC ++ヘッダーとソースのセットと、C ++レイヤーでラップされた安定したコンパイラに依存しないCベースのAPIに分けてきました。たとえば、Geolib Opsを作成するプラグイン作成者は、ツールチェーンを選択してプラグインを自由に構築できます。

この互換性ノートは、PythonまたはQtにリンクするプラグインを作成するWindowsプラグイン作成者には適用されません。VisualStudio 2015を使用してこれらのプラグインを再構築する必要があります。

注意:  Python 2.7 C拡張を構築するための標準WindowsコンパイラはVisual Studio 2008ですが、このコンパイラはしてはいけません Python C拡張の構築に使用されますKatana。お客様は、distutils / setuptoolsが選択したコンパイラーをオーバーライドして、以下と互換性のあるネイティブPython拡張機能を構築する必要がある場合があります。 Katana。見るhttps://docs.python.org/2.7/distutils/apiref.html#module-distutils.msvccompiler手順については。

APIの変更

Katana 3.0のAPIは、C ++ 11標準をサポートしない古いコンパイラで引き続き構築されます。C ++ 98コンパイラのサポートは、将来のリリースで削除されますKatana

Katanaに対して構築されたC ++プラグインKatana 2.5以降はバイナリ互換Katana 3.0(PythonまたはQtにリンクするWindowsプラグイン、および開発中のViewer APIを使用するプラグインを除く)。

Katanaに対して構築されたC ++プラグインKatana 2.5以降はソース互換とともにKatana以下で説明するいくつかの例外を除いて、3.0 API。

プラグインの例

KatanaのサンプルプラグインはC ++ 11に段階的に移行されており、C ++ 11標準をサポートしない古いコンパイラでのビルドが保証されなくなりました。

ビューアーAPI

Viewer APIは、Hydra Viewerと並行して開発されたもので、次のバージョンとは大きく異なります。 Katana 2.6v4。ビューアAPIに関する情報Katana 3.0はKatana開発者ガイド

資産プラグイン

PythonベースのAssetAPIプラグインは廃止され、それらのサポートは将来のリリースで削除されます。今後、パフォーマンスと安定性の理由から、AssetAPIプラグインはC ++で記述する必要があります。

クックインターフェース

GeolibCookInterface :: execOp()プライベートなユーザー定義データ(別名「プライベートデータ」)を実行済みのOpに送信します。これにより、呼び出し元のプライベートデータが呼び出し先に継承されるという問題も解決されます。修正された動作では、呼び出し元がexecOp()プライベートデータを指定しないgetPrivateData() 戻りますヌル呼び出し先で。2.5または2.6 SDKに対して構築されたOpsは、実行されたOpにプライベートデータをリークする機能を保持しますexecOp()。ただし、3.0 SDKに対して再構築し、 privateDataのパラメータexecOp()代わりに。OpScriptへの変更はありません。OpScriptはプライベートデータをサポートしていません。

FnAttribute

の実装FnAttributeより高性能になりました:

  • 静的属性:特定の属性(整数[0、256]、フロート0.0fと1.0f、ダブル0.0と1.0、空の文字列と空のグループなど)は一度だけ作成され、その後再利用されます。つまり、参照カウントをインクリメントおよびデクリメントする必要はありません。
  • 移動コンストラクターと演算子:これらの新しい演算子(C ++ 11)は、 FnAttribute。新しいコンパイラを使用すると、オブジェクトをいつ移動できるかが検出されます。つまり、参照カウントをインクリメントまたはデクリメントする必要はありません。

注意:  Katana 3.0v9は異なるアルゴリズムを使用して属性ハッシュを計算するため、属性ハッシュはKatana 2.x.

の動作DataAttributegetNearestSample()メソッドが変更され、場合によっては、C ++プラグインをビルドするためにコードを変更する必要がありますKatana 3.0 API。

の以前のリリースではKatanaを呼び出すことにより、サンプルバッファへの生のポインタを取得することが可能でしたgetNearestSample(time).data()。パフォーマンス上の理由により、 Katana 3.0このイディオムは許可されず、コンパイル時エラーが発生します。FnAttribute今ではConstVectorによって返されるオブジェクトgetNearestSample()を呼び出す前にローカル変数に割り当てられますデータ() 方法。以下に例を示します。

// Works with both Katana 2 and Katana 3. `p` is valid until either of `sample` // or `myIntAttr` are destructed. auto sample = myIntAttr.getNearestSample(.0f); const int* p = sample.data(); // Results in a compile-time error in Katana 3. const int* p = myIntAttr.getNearestSample(.0f).data(); 

マルチサンプルのサンプルバッファへの生のポインタを取得しやすくするためDataAttribute オブジェクト、 Katana 3.0は、新しいC ++ APIを次の形式で導入します。 getSamples()方法。以下に例を示します。

for (const auto& sample : myIntAttr.getSamples()) { ProcessSample(sample.getSampleTime(), sample.data(), sample.size()); } // Assign the result of `getSamples` to a local variable if you want pointers to // remain valid for longer. Here, the raw pointers stored in `vec` remain valid // until either the `myIntAttr` or `samples` objects are destructed. auto samples = myIntAttr.getSamples(); vector<tuple<float /*time*/, const int* /*data*/, size_t /*size*/>> vec; for (const auto& sample : samples) { vec.emplace_back(sample.getSampleTime(), sample.data(), sample.size()); } 

さらに、新しいgetValuesAs()属性のプライマリタイムサンプルからの固定数の値で構築されたC ++オブジェクトを返す関数が追加されました。たとえば、あなたが持っている場合FloatAttribute 4x4マトリックスを表す場合、次のようなコードを使用してImathマトリックスオブジェクトに変換できます。

auto m44f = myFloatAttr.getValuesAs<Imath::M44f, 16>(); 

FnAttributesは、構築されたデータバッファの所有権を取得できるようになりました。これにより、データをコピーする必要がないため、ピークメモリ使用量を削減し、全体的なレンダリング時間を短縮できます。 FnAttributeの内部バッファ。

のためにFnAttributeデータバッファーの所有権を取得するには、呼び出し元は、削除機能とnull以外のデータポインター(コンテキスト)を FnAttributeのコンストラクタ。これにより、次の結果が得られます。

  1. FnAttributeサンプル時間の値のコピーを取得します{-0.5、0.0、0.5}。
  2. 各タイムサンプルバッファーのポインターの値(ポインターではなく、ポインターが指すもの)をコピーします。
  3. 破棄されると、属性はユーザー指定の関数を呼び出し、ユーザー指定のコンテキストをそれに渡します。使用例については、以下を参照してください。
  4. サンプルバッファーとユーザー指定のコンテキスト(これらは異なる場合があります)は、 FnAttributeデータの所有権を取得しました。

使用例:

// ----------------------------------------------------------------------------- // Create an IntAttribute with a single time sample of 10 values. int64_t tupleSize = 1; int64_t valueCount = 10; // Create a buffer to store our data -- this must live on the heap, as the // attribute we create stores pointers into this memory block. unique_ptr<int[]> buf(new int[valueCount]); // Fill `buf` with data. // ... FnAttribute::IntAttribute myIntAttr(buf.get(), valueCount, tupleSize, buf.get(), [](void* context) { delete[] static_cast<int*>(context); }); // myIntAttr now owns the buffer. buf.release(); // ----------------------------------------------------------------------------- // Create a FloatAttribute with three time samples of 64 values. int64_t tupleSize = 4; int64_t valueCount = 64; int64_t sampleCount = 3; // Create a buffer to store our data -- this must live on the heap, as the // attribute we create stores pointers into this memory block. unique_ptr<float[]> buf(new float[valueCount * sampleCount]); // Fill `buf` with data. // ... // FnAttribute copies these buffers into internal storage; they need not live on // the heap. const float* samples[] = {&buf[valueCount * 0], &buf[valueCount * 1], &buf[valueCount * 2]}; float sampleTimes[] = {-0.5f, 0.0f, 0.5f}; FnAttribute::FloatAttribute myFloatAttr(sampleTimes, sampleCount, samples, valueCount, tupleSize, buf.get(), [](void* context) { delete[] static_cast<float*>(context); }); // myFloatAttr now owns the buffer. buf.release(); 

作成できるようになりましたStringAttributeユーザーが提供したメモリの所有権を取得する。結果的に、 StringAttributeハッシュ計算は、通常のコピーハッシュとゼロコピーハッシュについても変更されました。

次の例は、マルチサンプリングの作成を示していますStringAttribute提供された文字列バッファの所有権を取得します。

const char* kString1 = "We hope"; const char* kString2 = "you enjoy"; const char* kString3 = "Katana 3.0v1."; // Prepare the string data. char** valueArrayForSample1 = new char*[1]; char* dataForSample1 = new char[strlen(kString1) + 1]; memcpy(dataForSample1, kString1, strlen(kString1) + 1); valueArrayForSample1[0] = dataForSample1; char** valueArrayForSample2 = new char*[1]; char* dataForSample2 = new char[strlen(kString2) + 1]; memcpy(dataForSample2, kString2, strlen(kString2) + 1); valueArrayForSample2[0] = dataForSample2; char** valueArrayForSample3 = new char*[1]; char* dataForSample3 = new char[strlen(kString3) + 1]; memcpy(dataForSample3, kString3, strlen(kString3) + 1); valueArrayForSample3[0] = dataForSample3; // Prepare the value pointers and sample time array. char** valuePtrs[3] = {valueArrayForSample1, valueArrayForSample2, valueArrayForSample3}; float sampleTimes[3] = {-0.5f, 0.0f, 0.5f}; // This vector will be passed to StringAttribute's constructor so we can // clean up the data when the attribute is to be destroyed. auto* context = new std::vector<char**>{ valueArrayForSample1, valueArrayForSample2, valueArrayForSample3}; FnAttribute::StringAttribute zeroCopyStringAttribute(sampleTimes, 3, (const char***)valuePtrs, 1, 1, context, [](void* context){ auto* memoryToFree = static_cast<std::vector<char**>*>(context); for(char** dataForSample : *memoryToFree) { delete[] dataForSample[0]; delete[] dataForSample; } delete memoryToFree; }); // Access the attribute data as normal. auto firstSample = zeroCopyStringAttribute.getNearestSample(-0.5f); auto secondSample = zeroCopyStringAttribute.getNearestSample(0.0f); auto thirdSample = zeroCopyStringAttribute.getNearestSample(0.5f); std::cout << "[-0.5] = " << firstSample[0] << std::endl; std::cout << "[0.0] = " << secondSample[0] << std::endl; std::cout << "[0.5] = " << thirdSample[0] << std::endl; 

の使用法KatanaFnAttribute外部アプリケーションからのライブラリ(経由 FnAttribute :: Bootstrap()機能)一貫してkatana_rライセンスが必要です。

OpScript

OpScriptレガシーAPIのサポートは削除されました。このAPIは、次のアルファリリースの一部でデフォルトで利用可能でした。 Katana 2.0v1、ただしそれ以降はデフォルトで無効になっています。

OpScriptノードは、LuaインタープリターとしてLuaJIT 2.1.0を使用するようにアップグレードされました。これにより、一般的なパフォーマンスが向上するだけでなく、将来の改善の基礎が築かれます。変更は一般に透過的であるはずですが、Lua5.1ベースの以前のOpScript実装は、LuaJITベースの実装で問題が発生した場合でも引き続き利用できます。この実装は、環境変数を設定することで選択できますKATANA_OPSCRIPT_INTERPRETERLua_5_1

LuaJITはLua 5.1言語標準に厳密に準拠しており、Lua 5.1に祖父となった一部のLua 5.0コンストラクトはLuaJITでは使用できません。これらは:

  • そのmath.mod() function; use math.fmod() or the %代わりに演算子。
  • 暗黙のarg parameter for old-style vararg functions; use Lua 5.1 vararg expressions (...)代わりに
  • そのstring.gfind() function; use string.gmatch()代わりに

OpScriptが以前のLuaJITリリースのアドレス空間制限の影響を受けないように、「GC64」モードでLuaJIT 2.1をビルドすることに注意してください。

詳細については、次を参照してください。

レンダラープラグイン

DiskRenderOutputProcess :: setRenderAction()メソッドのrenderActionパラメータのタイプが変更されましたstd :: auto_ptr <RenderAction>FnPlatform :: internal :: UniquePtr (別名std :: unique_ptr)。なのでstd :: unique_ptrコピーできませんFnPlatform :: internal :: UniquePtr :: move (別名std :: unique_ptr :: move)あるコンテナから別のコンテナに内部ポインタを移動するには、明示的に呼び出す必要があります。

ディスプレイドライバー

に送信されるピクセルデータを設定できるようになりましたKatana Display Driver APIを介してRGBAまたはARGBとして。RGBAは、によって使用される内部ピクセル形式ですKatanaこのピクセル形式を使用すると、 Katanaアルファチャネルの順序を変更するためにチャネルスウィズルを実行する必要はありません。次の例は、このチャネルピクセル形式を有効にする方法を示しています。

NewChannelMessage_v2Ptr newChannelMessage_v2( new FnKat::NewChannelMessage_v2(*newFrameMessage)); // Setup NewChannelMessage_v2 newChannelMessage_v2->setChannelID(/* Channel ID */); newChannelMessage_v2->setChannelOrigin(0, 0); newChannelMessage_v2->setChannelDimensions(1000, 1000); newChannelMessage_v2->setSampleRate(sampleRate); newChannelMessage_v2->setDataSize(4 * sizeof(float)); newChannelMessage_v2->setPixelLayout(FnKat::NewChannelMessagev2::PixelLayout::RGBA); newChannelMessage_v2->setChannelName(legacyChannelName); 

改善されたパフォーマンスKatanaのメモリ割り当てとメッセージ送信オーバーヘッドの削減を含む、ディスプレイドライバAPI。

のための新しい「ゼロコピー」オプションDataMessageタイプが導入されました。これにより、ディスプレイドライバーの作成者は、ピクセルバッファーの所有権をディスプレイドライバーAPIに転送できます。これにより、ピクセルコピーとメモリ割り当てのオーバーヘッドが大幅に削減されます。例えば:

// Pixel buffer clean-up callback. void ImageDataDeleter(void* data) { char* dataArray = reinterpret_cast<char*>(data); delete[] dataArray; } // Sending pixel buffers back to Katana... FnKat::DataMessage dataMsg(/* ... */); // Configure coordinates/dimensions unchanged... // Allocate pixel buffer... char *dataArray = new char[blockSize]; // NEW: Pass pixel data clean-up callback to setData() and the Display Driver  // API will take ownership of the pixel buffer. dataMsg.setData(dataArray, blockSize, ImageDataDeleter); // Send to Katana via Katana Pipe interface pipe->send(dataMsg); 

FnLogging

C ++クラスFnLogging :: FnLogQueue廃止されており、将来のリリースで削除される予定です。このクラスは機能していなかったため、インスタンス化しようとした場合に警告を記録しました。

削除されたAPI

で廃止されたAPIヘッダーとソースKatana 2.5は削除されました。これらのヘッダーは次のとおりです。

  • FnGeolib:util / Mutex.h、util / Platform.h、util / PowerNap.h、util / Semaphore.h、util / ThreadException.h、util / Timer.h

  • FnRender:plugin / SocketConnection.h、plugin / CommandLineTools.h

共通プラグインの互換性

米ドル

に対してコンパイルされた米ドルのバイナリKatana 2.6は以下と互換性がありますKatana 3.0。

USDソースコードは、次に対してコンパイルできます。 Katana 3.0(USDバージョン0.8.2以降)

USD /のサポートKatana Windowsのプラグインは引き続き利用できません。

RenderMan

RenderMan for Katanaに対してコンパイルされたバイナリKatana 2.6は以下と互換性がありますKatana 3.0。

アーノルド

アーノルドKatanaに対してコンパイルされたバイナリKatana 2.6は以下と互換性がありますKatana 3.0。