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

マテリアルタイプでは、マテリアルルールを使用して、マテリアル入力と頂点アトリビュートに対するシェーダープリプロセッサーの定義を自動化できます。

Kanzi のデフォルトのスマートマテリアルを使用する

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

独自のスマートマテリアルを作成するには、独自のスマートマテリアルの作成 を参照してください。

スマートマテリアルにプロパティを追加すると、Kanzi Studio は、追加したプロパティをサポートするように正しいプリプロセッサー定義の値とプロパティが設定されたマテリアルタイプのバリアントを自動的に作成します。

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

スマート物理ベースマテリアルを使用するには:

  1. Library > Materials and Textures で、Alt を押しながら右クリック Material Types を行い、SmartPhysicallyBased を選択します。

    Kanzi Studio は SmartPhysicallyBased マテリアルタイプと SmartPhysicallyBasedMaterial マテリアルを作成します。

    ../../_images/library-smart-physically-based-material.png
  2. Node Tree で、SmartPhysicallyBasedMaterial マテリアルを使用する 3D ノードを選択します。Properties で、Material または Mesh Material プロパティを SmartPhysicallyBasedMaterial に設定します。

    ../../_images/sphere-in-node-tree.png ../../_images/sphere-properties-mesh-material.png
  3. Properties で、マテリアルプロパティの隣にある go-to-item をクリックして、SmartPhysicallyBasedMaterial マテリアルに移動します。

    デフォルトでは、SmartPhysicallyBasedMaterial はメタリック・ラフネスワークフローを使用します。このワークフローでは、金属度と粗さに基づいてマテリアルを調整できます:

    • Roughness Factor は、0から1のスケールでマテリアルの粗さを設定します。

      • 滑らかで光沢のある表面にするには、プロパティ値を 0 に設定します。

      • 粗い拡散面にするには、プロパティ値を 1 に設定します。

    • Metallic Factor は、材料のメタルネスを0から1のスケールで設定します。

      • 誘電体マテリアルの場合は、値を 0 に設定します。

      • 金属の反射特性を完全に再現するマテリアルの場合、値を1に設定します。

    マテリアルに追加できるプロパティは、Add Property > Material コンテキストメニューにあります。例えば、次のことができます:

    ../../_images/properties-smart-pbr-material-default.png
  4. マテリアルでさまざまな物理ベースの機能を有効にするには、Add Property > Configuration コンテキストメニューを使用します。

    機能を有効にすると:

    • Kanzi Studio は、その機能の設定に使用できるプロパティをマテリアルに追加します。

    • 機能を微調整するために使用できるプロパティが Add Property > Material カテゴリで利用可能になります。

    例えば、スペキュラー・グロッシネスワークフローを使用するには、Configuration > Workflow プロパティを追加し、Specular Glossiness に設定します。

    Kanzi Studio は、マテリアルに次のプロパティを追加します:

    • Diffuse Color Factor はマテリアルのディフューズカラーを設定します。

    • Glossiness Factor は、材料の光沢を0から1のスケールで設定します。

      • 粗い拡散面にするには、プロパティ値を 0 に設定します。

      • 滑らかで光沢のある表面にするには、プロパティ値を 1 に設定します。

    • Specular Color Factor は、マテリアルのスペキュラーカラーを設定します。

    ../../_images/properties-add-workflow.png ../../_images/properties-smart-pbr-material-specular-workflow.png

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

次のスマート Phong マテリアルが利用可能です:

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

  • SmartVertexPhong は、頂点ベースの Phong マテリアルです。Phong 反射モデルを使用したライトの適用を含め、GPU 固有の計算のほとんどはバーテックスシェーダーで行われます。

スマート Phong マテリアルを使用するには:

  1. Library > Materials and Textures で、Alt を押しながら右クリック Material Types を行い、SmartVertexPhong または SmartFragmentPhong を選択します。

    Kanzi Studio は、Library にマテリアルタイプとマテリアルを作成します。

    ../../_images/library-smart-vertex-phong-material.png
  2. Node Tree で、マテリアルを使用する 3D ノードを選択します。Properties で、Material または Mesh Material プロパティを、インポートしたスマート Phong マテリアルに設定します。

    ../../_images/sphere-in-node-tree.png ../../_images/properties-smart-vertex-phong-mesh-material.png
  3. Properties で、マテリアルプロパティの隣にある go-to-item をクリックして、マテリアルのプロパティに移動します。使用する Material プロパティを追加して設定します。

    例:

    • テクスチャを使用するには、Material > Texture プロパティを追加し、レンダリングするテクスチャに設定します。

      Texture プロパティを追加すると、Add Property > Material コンテキストメニューで Texture Offset プロパティと Texture Tiling プロパティが使用可能になります。

      ../../_images/properties-smart-vertex-phong-material-texture.png
    • キューブマップテクスチャを使用するには、TextureCube プロパティを追加し、レンダリングしたいキューブマップテクスチャに設定します。

      TextureCube プロパティを追加すると、Add Property > Material コンテキストメニューで CubemapColor プロパティが使用可能になります。

    • デフォルトでは、スマート Phong マテリアルがサポートするスポットライトは 1 つです。Scene に複数の Spot Light ノードが含まれている場合は、Material > Limit Spot Lights プロパティを追加し、使用したいスポットライトの数に設定します。

独自のスマートマテリアルの作成

ここでは、マテリアルルールを使用して、カラーとテクスチャのいずれか、または両方のレンダリングを可能にする独自のスマートマテリアルを作成します。

独自のスマートマテリアルを作成するには:

  1. Library > Materials and Textures > Material Types で、マテリアルルールを作成したいマテリアルタイプを作成または選択します。

    例えば、カラーとテクスチャのいずれか、または両方のレンダリングをサポートするカスタムマテリアルタイプを作成します:

    1. Library の Alt を押しながら右クリック Materials and Textures で、Material Type を選択し、SmartColorTexture と名付けます。

      ../../_images/create-material-type.png ../../_images/library-smart-color-texture.png
    2. Library で、SmartColorTexture マテリアルタイプを展開し、Vertex Shader をダブルクリックして Shader Source Editor で開きます。シェーダーファイルの内容を以下に置き換えます。

      #version 310 es
      
      precision mediump float;
      
      in vec3 kzPosition;
      uniform highp mat4 kzProjectionCameraWorldMatrix;
      
      #if USE_TEXTURE
      in vec2 kzTextureCoordinate0;
      uniform vec2 TextureOffset;
      uniform vec2 TextureTiling;
      out vec2 vTexCoord;
      #endif
      
      void main()
      {
      #if USE_TEXTURE
          vTexCoord = kzTextureCoordinate0 * TextureTiling + TextureOffset;
      #endif
          gl_Position = kzProjectionCameraWorldMatrix * vec4(kzPosition.xyz, 1.0);
      }
      

      Save をクリックします。

    3. SmartColorTexture > Fragment Shader をダブルクリックして Shader Source Editor で開きます。シェーダーファイルの内容を以下に置き換えます。

      #version 310 es
      
      precision mediump float;
      
      uniform float BlendIntensity;
      
      #if USE_COLOR
      uniform lowp vec4 Ambient;
      #endif
      
      #if USE_TEXTURE
      in vec2 vTexCoord;
      uniform sampler2D Texture;
      #endif
      
      layout(location = 0) out vec4 fragColor;
      
      void main()
      {
      
      #if USE_TEXTURE
          vec4 textureColor = texture(Texture, vTexCoord);
      #endif
      
      #if USE_COLOR && USE_TEXTURE
          float alpha = Ambient.a * BlendIntensity;
      
          fragColor.rgb = textureColor.rgb * Ambient.rgb * alpha;
          fragColor.a   = textureColor.a * alpha;
      
      #elif USE_COLOR
          fragColor = Ambient * BlendIntensity;
      
      #elif USE_TEXTURE
          fragColor = textureColor * BlendIntensity;
      
      #else
          fragColor = vec4(0.0);
      #endif
      
      }
      

      Save をクリックします。

    4. Library で、SmartColorTexture マテリアルタイプを選択します。Properties の Preprocessor Definitions で、以下を追加します:

      • USE_COLOR キーを追加し、その値を 0 に設定

      • USE_TEXTURE キーを追加し、その値を 0 に設定

      次に、ユーザーがマテリアルに追加するプロパティに基づいて、これらのプリプロセッサ定義の値を制御するマテリアルルールを作成します。

      ../../_images/properties-preprocessors-color-texture.png
  2. マテリアルルールを作成します:

    1. Library で、マテリアルタイプを選択します。Properties > Material Rules で、Add Material Rule をクリックします。

      ../../_images/library-smart-color-texture.png ../../_images/properties-smart-color-texture-add-material-rule.png
    2. Material Rule で、以下を設定します:

      • Name をわかりやすい名前に

        例えば、Use Color に設定します。

      • Material Looks For を、このマテリアルルールに影響を与えたいプロパティに:

        • Object Properties は、マテリアルを使用するオブジェクトからマテリアルに自動的に提供されます。これらのプロパティをマテリアルに追加することはできません。

        • Material Rule Properties は、マテリアルルールで使用できるカスタムプロパティです。マテリアルルールでのカスタムプロパティタイプの使用 を参照してください。

        • Material Properties は、マテリアルに追加したときにそのマテリアルに存在する Kanzi プロパティです。

        例えば、Material Looks For を Material Properties > Ambient プロパティタイプに設定します。

        SmartColorTexture マテリアルタイプのマテリアルに Ambient Color プロパティを追加すると、Kanzi Studio は次にこのルールに追加するアクションを実行します。

        デフォルトでは、マテリアルルールで Found オプションが有効になっています。Found オプションを無効にすると、Material Looks For プロパティがマテリアルに存在しない場合にルールがアクションを実行します。

      ../../_images/properties-rules-use-color.png
    3. 作成した Material Rule で、Actions を右クリックし、以下を選択します:

      • Set Preprocessor Value: シェーダーのプリプロセッサマクロの値を設定します

      • Generate Vertex Data: 不足しているメッシュの頂点データを生成します

        このアクションは、タンジェントを持たないメッシュにタンジェント空間法線マップを割り当てます。メッシュがすでにタンジェントを持っている場合、このアクションはタンジェントを再生成しません。

      • Make Property Available: マテリアルルールの Material Looks For ドロップダウンで選択したプロパティをマテリアルが検出した場合にのみ、そのマテリアルでプロパティを使用可能にします。

      例えば、Set Preprocessor Value を選択し、以下を設定します:

      • Preprocessor Definition Name を USE_COLOR に

      • Method を Set に

        これにより、プリプロセッサマクロの値を定数値に設定します。

        Material Looks For プロパティの値をプリプロセッサマクロにコピーするには、Copy value メソッドを使用します。

      • Preprocessor Definition Value を 1 に

      ユーザーが SmartColorTexture マテリアルタイプのマテリアルに Ambient Color プロパティを追加すると、このアクションは USE_COLOR プリプロセッサマクロの値を 1 に設定します。

      ../../_images/properties-create-set-preprocessor-value.png ../../_images/properties-set-preprocessor-value-use-color.png
  3. テクスチャを使用するためのマテリアルルールを作成するには、前の手順を繰り返しますが、次の点を変更します。

    1. マテリアルルールに Use Texture という名前を付け、Texture プロパティタイプに作用するように設定します。

      ../../_images/properties-rules-use-texture.png
    2. Set Preprocessor Value アクションで、USE_TEXTURE プリプロセッサー定義の値を設定します。

      ../../_images/properties-set-preprocessor-value-use-texture.png
  4. Sync with Uniforms をクリックします。

    Kanzi Studio は、バーテックスシェーダーでユニフォームを定義した Ambient Color、Texture、Texture Offset、Texture Tiling の各インプットプロパティをマテリアルタイプに追加します。

    ../../_images/properties-smart-color-texture-sync-with-uniforms.png
  5. Property Types ドロップダウンで、Material > BlendMode (Blend Mode) を選択します。Sync with Uniforms をクリックします。

    ../../_images/properties-input-add-blend-mode.png ../../_images/properties-blend-mode-sync.png
  6. 3D ノードが SmartColorTextureMaterial マテリアルを使用するように設定します。デフォルトでは、このマテリアルは透明な黒色をレンダリングします。

  7. Library で、SmartColorTextureMaterial マテリアルを選択します。Properties で、次のプロパティを追加して設定できます。

    • 色をレンダリングするには Material > Ambient Color

    • テクスチャをレンダリングするには Material > Texture

      Texture プロパティを追加すると、Kanzi Studio は Texture Offset プロパティと Texture Tiling プロパティもマテリアルに追加します。

    • カラーブレンディングを使用するには Blend Mode

      デフォルトでは、このマテリアルは Opaque ブレンドモードを使用します。

    マテリアルルールで使用するプロパティを追加すると、Kanzi Studio は Library > Materials and Textures > Material Types > SmartColorTexture に、プリプロセッサー定義をマテリアルルールで定義した値に設定したバージョンのマテリアルタイプを作成します。

    ../../_images/preview-smart-color-texture-material.gif

マテリアルルールでカスタムプロパティタイプを使用する

マテリアルルールでカスタムプロパティタイプを使用するには:

  1. プロパティタイプを作成します。プロパティタイプの作成 を参照してください。

    ../../_images/create-property-type.png
  2. New Property Type ウィンドウで、Material Rule Property フラグを有効にします。

    ../../_images/new-property-type-boolean-material-rule-property.png

これで、作成したプロパティタイプをマテリアルルールで使用できるようになります。このプロパティタイプは、Property Type ドロップダウンメニューの Material Rule Properties の下に表示されます。

../../_images/properties-material-rule-property-in-dropdown.png

マテリアルのルールでメッシュの機能を使用する

マテリアルタイプでメッシュの設定を使用するには、入力プロパティとして特定のメッシュの機能を選択します。

../../_images/selecting-mesh-features.png

これらの機能は実際のプロパティではなく、マテリアルに関連付けられたメッシュが直接持つ機能です。マテリアルを Mesh または Model3D に割り当てると、これらのメッシュの機能を読み取り、それに基づいてルールを実行する派生マテリアルタイプが生成されます。マテリアルタイプにメッシュの機能に関連するルールがない場合は、適切な派生マテリアルタイプがすでに存在している可能性が高く、割り当てても何も変わりません。

読み取られるメッシュの機能は次のとおりです。

  • Vertex Color は、頂点データにカラーチャンネルが存在するかどうかを確認します。

    メッシュに頂点カラーがある場合、値は 1 になり、それ以外の場合は 0 になります。

  • Vertex Normal は、頂点データに法線チャンネルが存在するかどうかを確認します。

    メッシュに頂点法線がある場合、値は 1 になり、それ以外の場合は 0 になります。

  • Vertex Tangent は、頂点データに接線チャンネルが存在するかどうかを確認します。

    メッシュに頂点接線がある場合、値は 1 になり、それ以外の場合は 0 になります。

  • Morph Data Normal は、モーフターゲットのデータに法線チャンネルが存在するかどうかを確認します。

    メッシュのモーフターゲットに法線がある場合、値は 1 になり、それ以外の場合は 0 になります。

  • Morph Data Tangent は、モーフターゲットのデータに接線チャンネルが存在するかどうかを確認します。

    メッシュのモーフターゲットに接線がある場合、値は 1 になり、それ以外の場合は 0 になります。

  • Morph Data Texture は、モーフのレンダリングにモーフデータテクスチャが必要かどうかを確認します。

    メッシュのモーフデータテクスチャが必要な場合、値は 1 になり、それ以外の場合は 0 になります。

    Model3D.MorphDataTexture プロパティを判定することもできますが、実際のメッシュデータの機能を判定する方が適切です。メッシュデータの機能はメッシュ固有のものであり、プロパティを設定する必要がないためです。

  • Morph Target Count は、メッシュデータに関連付けられたモーフターゲットの数を読み取ります。

    値はメッシュのモーフターゲットの数と等しくなります。モーフデータがない場合は 0 になります。

  • Bone Count は、メッシュに関連付けられたスケルトン(アーマチュアデータ)のボーン数を読み取ります。

    値はスケルトンのボーン数と等しくなります。アーマチュアデータがない場合は 0 になります。

マテリアルルールに条件を追加する

マテリアルルールでは、ルールがアクションを実行するために満たす必要がある条件を作成できます。マテリアルルールの条件は、関係演算子を使用して、ルールのプロパティタイプの値を定数値と比較します。

マテリアルルールで条件を作成するには、そのルールに作用するプロパティタイプのデータタイプが論理値、エヌメレーション、または整数である必要があります。

マテリアルルールは、そのプロパティタイプの値がルール内のすべての条件を満たす場合にのみ、アクションを実行します。

例えば、SmartVertexPhong マテリアルタイプには、モーフターゲットの数が 4 より大きい場合にモーフデータテクスチャの使用を有効にするマテリアルルールがあります。

../../_images/smart-vertex-phong-morph-target-condition.png

関連項目

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

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

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

シェーダーを編集する