マテリアルタイプの使用

マテリアルタイプは、マテリアルのプロパティタイプを定義します。マテリアルタイプによって定義されたマテリアルプロパティ値を調整することで、マテリアルの外観を設定します。各マテリアルタイプには、頂点シェーダーとフラグメントシェーダーがあり、マテリアルで使用できるプロパティのタイプを設定します。

Kanzi Studio は、<KanziInstallation>/Studio/Asset Library ディレクトリにある Kanzi Studio アセットライブラリからのデフォルトのマテリアルタイプとシェーダーのセットを含むテンプレートプロジェクトを提供します。新しい Kanzi Studio プロジェクトを作成する際に、提供されるマテリアルタイプに基づいて異なるプロジェクトテンプレートを選択できます。

  • 事前定義されたマテリアルタイプを含まないテンプレートを開始するには、Import material types manually を選択します。必要に応じて、Kanzi Studio マテリアルライブラリからプロジェクトにマテリアルタイプを追加するか、自分自身でマテリアルタイプを作成することができます。プロジェクトにマテリアルタイプを追加する を参照してください。

  • High performance vertex shaders テンプレートは、低精度で高パフォーマンスのアプリケーション向けです。このテンプレートには頂点ベースのシェーダーが含まれています。Phong 反射モデルを使用したライトの適用を含め、GPU 固有の計算のほとんどはバーテックスシェーダーで行われます。ほとんどのデバイスにとって、これは良い出発点となります。

  • High quality fragment shaders テンプレートは、高精度のアプリケーション向けです。このテンプレートにはピクセルシェーダーベースのマテリアルが含まれています。Phong 反射モデルを使用したライトの適用を含め、GPU 固有の計算のほとんどはフラグメントシェーダーで行われます。これにより、多くの場合パフォーマンスと引き換えに、より高い画質が得られます。

  • Physically based rendering テンプレートは、最新のアプリケーション向けです。このテンプレートには、物理ベースレンダリング (PBR) の原則を実装したシェーダーに基づくマテリアルが含まれています。これらのマテリアルのプロパティはメタルネスなどの物理的特性を表すため、直感的に操作できます。物理ベースのライティングモデルを使用したライトの適用を含め、GPU 固有の計算のほとんどはフラグメントシェーダーで行われます。これにより、多くのライティング条件でよりリアルなレンダリング結果が得られます。

マテリアルタイプでは、頂点シェーダーとフラグメントシェーダーが、そのマテリアルで使用できるユニフォームとプロパティタイプを定義します。特定のマテリアルタイプで3Dノードをレンダリングする際、ユニフォームバインディングにより、Kanzi がレンダーステートに値を書き込み、それらの値をユニフォームとプロパティタイプに使用することができます。

ユニフォームバインディングを使用すると、シェーダーコードを変更せずに、マテリアルタイプで使用されるシェーダーユニフォームの値を変更できます。

ユニフォームバインディング を参照してください。

以下の操作を行うことができます。

プロジェクトにマテリアルタイプを追加する

次の方法でプロジェクトにマテリアルタイプを追加できます。

  • スマートマテリアルタイプを作成します。

    Kanzi Studio には、次のスマートマテリアルタイプがあります。

    • SmartPhysicallyBased は、物理ベースレンダリング (PBR) の原則を実装しています。

    • SmartVertexPhong は、頂点ベースの Phong シェーダーを使用する高パフォーマンスのマテリアルタイプです。

    • SmartFragmentPhong は、ピクセルベースの Phong シェーダーを使用する、高品質ですがパフォーマンスが低めのマテリアルタイプです。

    スマートマテリアルタイプを作成するには、Library > Materials and Textures で Alt を押しながら右クリック Material Types を選択し、作成したいスマートマテリアルタイプを選択します。

    Kanzi Studio は、作成したマテリアルタイプのスマートマテリアルをプロジェクトに追加します。スマートマテリアルを使用する を参照してください。

  • Kanzi デフォルトのマテリアルタイプを作成します。

    Kanzi は、さまざまな目的のためのデフォルトのマテリアルタイプのセットを備えています。プロジェクトにまだ存在しない Kanzi デフォルトのマテリアルタイプを作成するには、Library > Materials and Textures Alt を押しながら右クリック Material Types で、追加したいマテリアルタイプを選択します。

    テンプレートに事前定義されたマテリアルタイプが含まれていないプロジェクトを作成した場合、すべての Kanzi デフォルトのマテリアルタイプを追加することができます。

    • ColorTexture、DefaultBlit、FontDefault、MaskTexture、SweepTextures、および Textured は、汎用シェーダーを持つマテリアルタイプです。これらのシェーダーはパフォーマンスよりも機能性と品質を重視しているため、これらのマテリアルタイプは開発目的に適しています。汎用シェーダー を参照してください。

    • VertexPhong マテリアルタイプは、頂点ベースのフォンシェーダーを使用した高パフォーマンスのマテリアルタイプです。頂点ベースのPhongシェーダー を参照してください。

    • FragmentPhong マテリアルタイプは、ピクセルベースのフォンシェーダーを使用したパフォーマンスが低いマテリアルタイプです。ピクセルベースのPhongシェーダー を参照してください。

    • PhysicallyBased マテリアルタイプは、物理ベースレンダリング (PBR) の原則を実装するシェーダーを使用します。物理ベースシェーダー を参照してください。

    • Unlit マテリアルタイプは、ライトを使用しないシェーダーを使用します。Unlit シェーダー を参照してください。

    Kanzi Studio はマテリアルタイプを追加し、そのマテリアルタイプを使用してマテリアルを作成します。同じマテリアルタイプから追加のマテリアルを作成することができます。マテリアルを使用する (Using materials) を参照してください。

    ../../_images/material-types-alt-context-menu.png
  • 新しいマテリアルタイプを作成します。

    新しいマテリアルタイプを作成するには、Library Alt を押しながら右クリック Materials and Textures で、Material Type を選択します。

    Kanzi Studio は、マテリアルタイプとそのマテリアルタイプを使用するマテリアルを作成します。

    作成した Material Type の Vertex Shader と Fragment Shader を編集するには、それらをダブルクリックします。シェーダーを編集する を参照してください。GLSL コードを手書きせずにフラグメントシェーダーをビジュアルに構築するには、シェーダーグラフ (エクスペリメンタル) を参照してください。

    ../../_images/create-material-type.png ../../_images/material-type-and-its-material-in-library.png

デフォルトのマテリアルタイプを修正する

VertexPhong、FragmentPhong、PhysicallyBased、または Unlit のマテリアルタイプを変更するには:

  1. デフォルトの VertexPhong、FragmentPhong、PhysicallyBased、または Unlit のマテリアルタイプのいずれかをプロジェクトに選択または追加します。プロジェクトにマテリアルタイプを追加する を参照してください。

    例えば、Library > Materials and Textures > Material Types で VertexPhong マテリアルタイプを選択します。

    ../../_images/vertexphong-in-library.png
  2. Properties の Preprocessor Definitions で、マテリアルタイプのプロパティを設定します。

    この方法は、Kanzi に付属する FragmentPhong、VertexPhong、PhysicallyBased、および Unlit マテリアルタイプに使用できます。その他のマテリアルタイプのプロパティを変更するには、シェーダーを手動で編集する必要があります。シェーダーを編集する を参照してください。

    例えば、マテリアルのベースカラーを含むテクスチャの使用を有効にするには、KANZI_SHADER_USE_BASECOLOR_TEXTURE の値を1に設定し、Enter キーを押します。

    ../../_images/phong-preprocessor-defines-basecolor-texture.png

    VertexPhong および FragmentPhong マテリアルタイプでは、次の Preprocessor Definitions を設定できます。

    • KANZI_SHADER_MORPH_TARGET_COUNT は、Kanzi がモーフで一度にアクティブにできるモーフターゲットの数を設定します。モーフを使用する を参照してください。

    • KANZI_SHADER_NUM_DIRECTIONAL_LIGHTS は、マテリアルに使用する Directional Light ノードの数を設定します。マテリアルタイプのライト数の設定 を参照してください。

    • KANZI_SHADER_NUM_POINT_LIGHTS は、マテリアルに使用する Point Light ノードの数を設定します。マテリアルタイプのライト数の設定 を参照してください。

    • KANZI_SHADER_NUM_SPOT_LIGHTS は、マテリアルに使用する Spot Light ノードの数を設定します。マテリアルタイプのライト数の設定 を参照してください。

    • KANZI_SHADER_SKINNING_BONE_COUNT はスキニングのためにメッシュ内のボーンの数を設定します。スキンメッシュの使用 を参照してください。

    • KANZI_SHADER_USE_BASECOLOR_TEXTURE は、マテリアルのベースカラーを含むテクスチャの使用を可能にします。

    • KANZI_SHADER_USE_MORPH_DATA_TEXTURE はモーフデータテクスチャの使用を可能にします。モーフを使用する を参照してください。

    • KANZI_SHADER_USE_MORPH_NORMAL_LIMIT は、生成されたモーフ法線とモーフベースメッシュの差を制限することを可能にします。モーフを追加する を参照してください。

    • KANZI_SHADER_USE_MORPH_TARGET_NORMALS は、モーフベースシェイプの法線を使用する代わりに、各モーフターゲットシェイプが独自の法線を使用できるようにします。モーフターゲット法線の使用 を参照してください。

    • KANZI_SHADER_USE_MORPH_TARGET_TANGENTS は、モーフベースシェイプの接線を使用する代わりに、各モーフターゲットシェイプが独自の接線を使用できるようにします。

    • KANZI_SHADER_USE_NORMALMAP_TEXTURE は、マテリアルのための法線マップを含むテクスチャの使用を可能にします。

    • KANZI_SHADER_USE_REFLECTION_CUBE はキューブマップ反射の使用を可能にします。キューブマップ反射の作成 を参照してください。

    PhysicallyBased マテリアルタイプで設定できる Preprocessor Definitions については、物理ベースのマテリアルプロパティ を参照してください。

  3. Properties > Shader で、Kanzi Studio はユニフォーム配列を自動的に更新します。不足しているユニフォームソースタイプがある場合、Kanzi Studio はそれらを赤字で示します。

    Properties > Input の Property Types で Sync with Uniforms をクリックし、このマテリアルタイプを使用するマテリアルに不足しているプロパティを追加します。

    ../../_images/phong-shader-uniforms-missing-texture-properties.png ../../_images/sync-with-uniforms.png

マテリアルタイプにプロパティを追加する

マテリアルタイプにプロパティを追加して、ニーズに合ったものにします。カスタマイズまたは作成したマテリアルタイプを使用することで、プロジェクト内のマテリアルの外観をより迅速かつ簡単に設定できます。マテリアルタイプにプロパティを追加すると、Kanzi Studio はそのマテリアルタイプを使用しているすべてのマテリアルにプロパティを追加します。

マテリアルタイプにプロパティを追加するには:

  1. Library > Materials and Textures > Material Types で、プロパティを追加したいマテリアルタイプ内の、プロパティを使用したいシェーダーをダブルクリックします。

    ../../_images/mymaterialtype-fragment-shader.png
  2. Shader Source Editor で、シェーダーコードにプロパティを追加し、シェーダーを保存します。

    Kanzi のデフォルトのユニフォームは、Uniforms メニューから選択することで宣言できます。シェーダーを編集する を参照してください。

    ../../_images/use-uniforms-in-shader-source-editor.png
  3. Library で、シェーダーにプロパティを追加したマテリアルタイプを選択します。Properties で、Sync with Uniforms をクリックします。

    Kanzi Studio は、シェーダーで定義したプロパティをマテリアルタイプとそのマテリアルタイプを使用するマテリアルに追加します。Kanzi Studio は、マテリアルタイプに対して、Kanzi がレンダーステートに書き込み、このマテリアルタイプを使用する3Dノードをレンダリングする際にプロパティの値として使用するユニフォームバインディングも追加します。ユニフォームバインディング を参照してください。

    ../../_images/mymaterialtype-red-in-library.png ../../_images/mymaterialtype-sync-with-uniforms.png

マテリアルタイプの再利用

Kanzi Studio プロジェクトでマテリアルタイプを作成すると、プロジェクトアイテムをエクスポートおよびインポートすることで、そのマテリアルタイプを別の Kanzi Studio プロジェクトで再利用できます。プロジェクトアイテムのエクスポートとインポート を参照してください。

注釈

他のシェーダーからコードを再利用するシェーダーを持つマテリアルタイプを再利用したい場合は、アセットパッケージを作成してください。シェーダーコードの再利用 と アセットパッケージの作成 を参照してください。

Material Type プロパティタイプ

マテリアルタイプの利用可能なプロパティタイプのリストについては、マテリアルタイプ (Material type) を参照してください。

関連項目

マテリアルを使用する (Using materials)

スマートマテリアルを使用する

マテリアルタイプとマテリアル

物理ベースのマテリアルプロパティ

シェーダーを編集する

モーフを使用する

スキンメッシュの使用

マテリアルタイプのライト数の設定