スマートマテリアルを使用する¶
マテリアルタイプでは、マテリアルルールを使用して、マテリアル入力と頂点アトリビュートに対するシェーダープリプロセッサーの定義を自動化できます。
Kanzi のデフォルトのスマートマテリアルを使用する¶
Kanzi Studio には、次のスマートマテリアルタイプがあります。
SmartPhysicallyBased。スマート物理ベースマテリアルを使用する を参照してください。
SmartVertexPhong。スマート Phong マテリアルを使用する を参照してください。
SmartFragmentPhong。スマート Phong マテリアルを使用する を参照してください。
独自のスマートマテリアルを作成するには、独自のスマートマテリアルの作成 を参照してください。
スマートマテリアルにプロパティを追加すると、Kanzi Studio は、追加したプロパティをサポートするように正しいプリプロセッサー定義の値とプロパティが設定されたマテリアルタイプのバリアントを自動的に作成します。
スマート物理ベースマテリアルを使用する¶
スマート物理ベースマテリアルを使用するには:
Library > Materials and Textures で、Alt を押しながら右クリック Material Types を行い、SmartPhysicallyBased を選択します。
Kanzi Studio は SmartPhysicallyBased マテリアルタイプと SmartPhysicallyBasedMaterial マテリアルを作成します。
Node Tree で、SmartPhysicallyBasedMaterial マテリアルを使用する 3D ノードを選択します。Properties で、Material または Mesh Material プロパティを SmartPhysicallyBasedMaterial に設定します。
Properties で、マテリアルプロパティの隣にある
をクリックして、SmartPhysicallyBasedMaterial マテリアルに移動します。デフォルトでは、SmartPhysicallyBasedMaterial はメタリック・ラフネスワークフローを使用します。このワークフローでは、金属度と粗さに基づいてマテリアルを調整できます:
Roughness Factor は、0から1のスケールでマテリアルの粗さを設定します。
滑らかで光沢のある表面にするには、プロパティ値を 0 に設定します。
粗い拡散面にするには、プロパティ値を 1 に設定します。
Metallic Factor は、材料のメタルネスを0から1のスケールで設定します。
誘電体マテリアルの場合は、値を 0 に設定します。
金属の反射特性を完全に再現するマテリアルの場合、値を1に設定します。
マテリアルに追加できるプロパティは、Add Property > Material コンテキストメニューにあります。例えば、次のことができます:
テクスチャを使用するようにマテリアルを設定します。物理ベースのテクスチャードマテリアルを作成する を参照してください。
マテリアルが使用できるライトのタイプと数を設定します。スマートマテリアルのライト数の設定 を参照してください。
マテリアルでさまざまな物理ベースの機能を有効にするには、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 は、マテリアルのスペキュラーカラーを設定します。
スマート Phong マテリアルを使用する¶
次のスマート Phong マテリアルが利用可能です:
SmartFragmentPhong は、OpenGL ES2 と互換性のあるシェーダーを使用するピクセルベースの Phong マテリアルです。Phong 反射モデルを使用したライトの適用を含む、GPU 固有の計算のほとんどはフラグメントシェーダーで行われます。これにより、多くの場合パフォーマンスと引き換えに、より良い画質が得られます。
SmartVertexPhong は、OpenGL ES2 での使用に最適化されたシェーダーを使用する頂点ベースの Phong マテリアルです。Phong 反射モデルを使用したライトの適用を含む、GPU 固有の計算のほとんどは頂点シェーダーで行われます。
スマート Phong マテリアルを使用するには:
Library > Materials and Textures で、Alt を押しながら右クリック Material Types を行い、SmartVertexPhong または SmartFragmentPhong を選択します。
Kanzi Studio は、Library にマテリアルタイプとマテリアルを作成します。
Node Tree で、マテリアルを使用する 3D ノードを選択します。Properties で、Material または Mesh Material プロパティを、インポートしたスマート Phong マテリアルに設定します。
Properties で、マテリアルプロパティの隣にある
をクリックして、マテリアルのプロパティに移動します。使用する Material プロパティを追加して設定します。例:
テクスチャを使用するには、Material > Texture プロパティを追加し、レンダリングするテクスチャに設定します。
Texture プロパティを追加すると、Add Property > Material コンテキストメニューで Texture Offset プロパティと Texture Tiling プロパティが使用可能になります。
キューブマップテクスチャを使用するには、TextureCube プロパティを追加し、レンダリングしたいキューブマップテクスチャに設定します。
TextureCube プロパティを追加すると、Add Property > Material コンテキストメニューで CubemapColor プロパティが使用可能になります。
デフォルトでは、スマート Phong マテリアルがサポートするスポットライトは 1 つです。Scene に複数の Spot Light ノードが含まれている場合は、Material > Limit Spot Lights プロパティを追加し、使用したいスポットライトの数に設定します。
独自のスマートマテリアルの作成¶
ここでは、マテリアルルールを使用して、カラーとテクスチャのいずれか、または両方のレンダリングを可能にする独自のスマートマテリアルを作成します。
独自のスマートマテリアルを作成するには:
Library > Materials and Textures > Material Types で、マテリアルルールを作成したいマテリアルタイプを作成または選択します。
例えば、カラーとテクスチャのいずれか、または両方のレンダリングをサポートするカスタムマテリアルタイプを作成します:
Library の Alt を押しながら右クリック Materials and Textures で、Material Type を選択し、SmartColorTexture と名付けます。
Library で、SmartColorTexture マテリアルタイプを展開し、Vertex Shader をダブルクリックして Shader Source Editor で開きます。シェーダーファイルの内容を以下に置き換えます。
precision mediump float; attribute vec3 kzPosition; uniform highp mat4 kzProjectionCameraWorldMatrix; #if USE_TEXTURE attribute vec2 kzTextureCoordinate0; uniform vec2 TextureOffset; uniform vec2 TextureTiling; varying vec2 vTexCoord; #endif void main() { #if USE_TEXTURE vTexCoord = kzTextureCoordinate0 * TextureTiling + TextureOffset; #endif gl_Position = kzProjectionCameraWorldMatrix * vec4(kzPosition.xyz, 1.0); }
Save をクリックします。
SmartColorTexture > Fragment Shader をダブルクリックして Shader Source Editor で開きます。シェーダーファイルの内容を以下に置き換えます。
precision mediump float; uniform float BlendIntensity; #if USE_COLOR uniform lowp vec4 Ambient; #endif #if USE_TEXTURE varying vec2 vTexCoord; uniform sampler2D Texture; #endif void main() { #if USE_TEXTURE vec4 textureColor = texture2D(Texture, vTexCoord); #endif #if USE_COLOR && USE_TEXTURE float alpha = Ambient.a * BlendIntensity; gl_FragColor.rgb = textureColor.rgb * Ambient.rgb * alpha; gl_FragColor.a = textureColor.a * alpha; #elif USE_COLOR gl_FragColor = Ambient * BlendIntensity; #elif USE_TEXTURE gl_FragColor = textureColor * BlendIntensity; #else gl_FragColor = vec4(0.0); #endif }
Save をクリックします。
Library で、SmartColorTexture マテリアルタイプを選択します。Properties の Preprocessor Definitions で、以下を追加します:
USE_COLOR キーを追加し、その値を 0 に設定
USE_TEXTURE キーを追加し、その値を 0 に設定
次に、ユーザーがマテリアルに追加するプロパティに基づいて、これらのプリプロセッサ定義の値を制御するマテリアルルールを作成します。
マテリアルルールを作成します:
Library で、マテリアルタイプを選択します。Properties > Material Rules で、Add Material Rule をクリックします。
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 プロパティがマテリアルに存在しない場合にルールがアクションを実行します。
作成した 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 に設定します。
テクスチャを使用するためのマテリアルルールを作成するには、前の手順を繰り返しますが、次の点を変更します。
マテリアルルールに Use Texture という名前を付け、Texture プロパティタイプに作用するように設定します。
Set Preprocessor Value アクションで、USE_TEXTURE プリプロセッサー定義の値を設定します。
Sync with Uniforms をクリックします。
Kanzi Studio は、バーテックスシェーダーでユニフォームを定義した Ambient Color、Texture、Texture Offset、Texture Tiling の各インプットプロパティをマテリアルタイプに追加します。
Property Types ドロップダウンで、Material > BlendMode (Blend Mode) を選択します。Sync with Uniforms をクリックします。
3D ノードが SmartColorTextureMaterial マテリアルを使用するように設定します。デフォルトでは、このマテリアルは透明な黒色をレンダリングします。
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 に、プリプロセッサー定義をマテリアルルールで定義した値に設定したバージョンのマテリアルタイプを作成します。
マテリアルルールでカスタムプロパティタイプを使用する¶
マテリアルルールでカスタムプロパティタイプを使用するには:
プロパティタイプを作成します。プロパティタイプの作成 を参照してください。
New Property Type ウィンドウで、Material Rule Property フラグを有効にします。
これで、作成したプロパティタイプをマテリアルルールで使用できるようになります。このプロパティタイプは、Property Type ドロップダウンメニューの Material Rule Properties の下に表示されます。
マテリアルルールに条件を追加する¶
マテリアルルールでは、ルールがアクションを実行するために満たす必要がある条件を作成できます。マテリアルルールの条件は、関係演算子を使用して、ルールのプロパティタイプの値を定数値と比較します。
マテリアルルールで条件を作成するには、そのルールに作用するプロパティタイプのデータタイプが論理値、エヌメレーション、または整数である必要があります。
マテリアルルールは、そのプロパティタイプの値がルール内のすべての条件を満たす場合にのみ、アクションを実行します。
例えば、SmartVertexPhong マテリアルタイプには、モーフターゲットの数が 4 より大きい場合にモーフデータテクスチャの使用を有効にするマテリアルルールがあります。