Open Shading Language (OSL)

Open Shading Language (OSL)では、新しい OSL マップ(さまざまな OSL マップを含む全体的なカテゴリ)を使用することができます。また、開発ツールを使用して独自の OSL マップを作成し、任意のレンダラーで使用することもできます。

Open Shading Language (OSL) は、理解しやすいオープン ソース シェーディング言語です。複数の異なる方法で使用することができます。3ds Max 内の OSL シェーダ用の実行環境である OSL マップを使用できます。このマップは、組み込みの標準 3ds Max マップと同様に機能します。簡単に使用できる、事前ロード済み OSL マップのカテゴリも用意されています。さらに、インターネットからダウンロードした任意の OSL マップを使用できます。最後に、開発ツールを使用して OSL 内でシェーダまたはマップを作成できます。この方法を使用すると、3ds Max C++ マップなどの同等な機能を開発するよりも大幅に簡単にカスタム マップを作成することができます。

OSL は、標準の 3ds Max シェーディング API (スキャンライン、vRay、Corona など)をサポートする任意のレンダラーで機能します。また、標準マップが要求される 3ds Max 内の任意の場所([ディスプレイスメント](Displacement)モディファイヤ内など)では、レンダラーの外側で機能します。Arnold のように OSL をネイティブにサポートするレンダラーでも機能します。このような場合、OSL マップ内の実行環境は使用されません。代わりに、OSL ソース コード、パラメータ値、およびシェーダ バインディングがレンダラーに送信されて、そこで OSL コードが実行されます。OSL をネイティブにサポートするレンダラーが毎日公開されています。

シェーダ ツリー内のすべてのシェーダが OSL シェーダである場合、OSL はシェーダ ツリー全体の編集および最適化を「ジャストインタイム」方式で一度に実行します。OSL シェーダと標準シェーダを組み合わせることができますが、最適化は適切に行われなくなります。

注: コンピュータ グラフィックスの用語は必ずしも正確ではありません。シェーダ、マップ、テクスチャ、手続き型、マテリアルなどの単語は、使用しているコンテキスト、アプリケーション、レンダラーが異なる場合は、異なる意味を持ちます。3ds Max で使用される OSL はクロージャをサポートしないため、マップとして表示されます。ただし、OSL はシェーディング言語であるため、シェーダおよびマップという用語は OSL のコンテキストで同義的に使用されます。
注: 元のレンダリング API は複数の出力をサポートしませんでした。複数の出力は、後で導入された拡張機能です。このため、ほとんどのマテリアルおよびマップは、複数の出力を含むマップとの接続を認識しません。この問題を解決するための仲介役として、出力セレクタ マップが導入されました。複数の出力を含むマップ、複数の出力を認識しないマップとの間に、このマップが自動的に挿入されます。[スレート マテリアル エディタ](Slate Material Editor)では、出力セレクタ マップは自動的に非表示になり、標準接続のように表示されます(ただし、ワイヤは赤でなく、青になります)。このオプションのオン/オフを切り替えるには、[スレート マテリアル エディタ](Slate Material Editor)の[オプション](Options)メニューで[基本設定](Preferences)を選択し、[単一マップ出力セレクタを非表示](Hide Single Map Output Selectors)を切り替えます。

OSL の制限事項

3ds Max で使用する OSL マップには、いくつかの制限事項があります。

制限事項 説明
マップのみをサポートし、マテリアルはサポートしない

OSL で記述されたシェーダには、カラー、浮動小数点の値、整数、文字列など、複数のデータ型を返す複数の出力が存在することがあります。これらはすべてサポートされます。

ただし、OSL はクロージャと呼ばれる特殊な型もサポートしています。クロージャはマテリアルと見なすことができます。これはサポートされていません。実際、OSL マップは手続き型テクスチャ(マップ)を構築する場合のみ使用することができ、マテリアルを構築する場合は使用できません。

したがって、推奨ワークフローは、手続き型テクスチャ マップを OSL で構築し、適切に定義された、レンダラーに依存しない標準マテリアル(フィジカル マテリアルなど)に出力を接続することです。

オンラインで検索した OSL シェーダが何も実行しない場合、または何も出力しない場合は、OSL マテリアルである可能性があります。

プレーンなデータ型のみをサポートする

3ds Max で使用する OSL マップは、カラー、ベクトル、浮動小数点、整数、文字列などのプレーンなデータ型のみをサポートします。配列や構造体は入力としてサポートされません。

これは、実際はほとんど問題になりません。配列や構造体を実際に入力として使用する OSL シェーダは非常に少ないためです。この制限は、パラメータにのみ適用されます。配列や構造体は、OSL コード内でも正常に機能します。

#include ステートメントがない

3ds Max の OSL コードに #include ステートメントを含めることはできません。OSL に #include <stdosl.h> が含まれている場合、このステートメントは不要であり、削除することができます。stdosl.h ファイルは、コンパイラによって暗黙的にインクルードされます。

ビューポートのサポート

多くの OSL マップがビューポートの表示に実際のシェーダを使用するようになったため、パフォーマンスが高まり、視覚的な表現が大幅に向上しました。この操作を行うには、「マップを使用する[リアリスティック](Realistic)モード」でビューポートを実行します。シェーダを使用する OSL マップの場合は、[マテリアル エディタ](Material Editor)の該当するパラメータの上に[ビューポート: 使用するシェーダ](Viewport: shader used)という通知が表示されます。引き続きベイク処理を使用する OSL マップの場合は、[ビューポート: 使用するベイク処理されたテクスチャ](Viewport: baked texture used)が表示されます。

次の OSL シェーダは現在、引き続きベイク処理されたテクスチャを使用していることに注意してください。

UVW

ルート

シーン

注: このビューポートの改善点は、ベイク処理されたテクスチャを常に使用する Arnold マテリアルではサポートされません。