シェーダー

Shaders を使用して、画像内の適切なレベルの光と色を生成したり、特殊効果を生成したり、ポストプロセッシングを行ったりします。

Kanzi のシェーダーは、OpenGL ESシェーディング言語に基づいています。

Kanzi の各マテリアルタイプには、シェーディングアルゴリズムを定義するシェーダーが付属しています。

../../_images/vertex-shader-icon.png

Vertex Shader は個々の頂点を処理します。

Vertex Shader のソースファイルの拡張子は .vert.glsl です。

../../_images/fragment-shader-Icon.png

Fragment Shader は各フラグメントを処理します。

Fragment Shader のソースファイルは拡張子 .frag.glsl を持っています。

Kanzi Studio プロジェクトが OpenGL ES 3.2 をターゲットにしている場合、次のシェーダーも作成できます。

../../_images/geometry-shader-icon.png

Geometry Shader はプリミティブを処理します。

Geometry Shader のソースファイルは拡張子 .geom.glsl を持っています。

../../_images/tessellation-control-shader-icon.png

Tessellation Control Shader はプリミティブのテッセレーション量を決定し、入力パッチデータに変換を行います。

Tessellation Control Shader のソースファイルの拡張子は .tesc.glsl です。

../../_images/tessellation-evaluation-shader-icon.png

Tessellation Evaluation Shader は、プリミティブジェネレーターによって生成された抽象座標を使用して、頂点の値を計算します。

Tessellation Evaluation Shader のソースファイルは、拡張子 .tese.glsl を持っています。

ジオメトリシェーダーを使用する と テッセレーションシェーダーの使用 を参照してください。

Kanzi Studio プロジェクトでは、シェーダープログラムはコンピュータのハードドライブにファイルとして保存されます。シェーダーを Kanzi Studio プロジェクトの <KanziWorkspace>/Projects/<ProjectName>/Shaders ディレクトリに追加すると、Kanzi Studio は自動的にそれらを Library > Resource Files > Shaders に表示します。

Kanzi に付属するシェーダーは、<KanziInstallation>/Studio/Asset Library/MaterialTypes で見つけることができます。

  • Common ディレクトリには、汎用シェーダーを持つマテリアルタイプが含まれています。汎用シェーダー を参照してください。

  • FragmentPhong ディレクトリには、ピクセルベースのフォンシェーダーを持つマテリアルタイプが含まれています。ピクセルベースのPhongシェーダー を参照してください。

  • PhysicallyBasedRendering ディレクトリには、物理ベースのシェーダーを持つマテリアルタイプが含まれています。物理ベースシェーダー を参照してください。

  • Unlit ディレクトリには、ライトを使用しないシェーダーを持つマテリアルタイプが含まれています。Unlit シェーダー を参照してください。

  • VertexPhong ディレクトリには、頂点ベースのフォンシェーダーを持つマテリアルタイプが含まれています。頂点ベースのPhongシェーダー を参照してください。

独自のシェーダーを書くこともできます。シェーダーを編集する を参照してください。

Kanzi では、バイナリシェーダーも使用できます。バイナリシェーダーは、アプリケーションがデバイスのGPUに渡す前に、ハードウェアメーカーが提供するコンパイラで事前にコンパイルするシェーダープログラムです。これにより、ターゲットデバイスがアプリケーションをより速くロードできるようになります。バイナリシェーダーを使用すること を参照してください。

汎用シェーダー

<KanziInstallation>/Studio/Asset Library/MaterialTypes/Common ディレクトリには、汎用シェーダーを持つマテリアルタイプが含まれています。

ColorTexture

色付きテクスチャデータを表示します。

../../_images/color-texture.png

CubemapSkybox

キューブマップテクスチャをスカイボックスとして表示します。キューブマップテクスチャをスカイボックスとして使用する を参照してください。

../../_images/cubemap-skybox.png

DefaultBlit

Blit Render Pass で使用されるデフォルトシェーダー。レンダリング を参照してください。

../../_images/default-blit.png

DefaultCubemapBlit

Cubemap Render Pass の下で Blit Render Pass を使用するときに、そのレンダーパスで使用されるデフォルトシェーダー。レンダリング を参照してください。

../../_images/default-cubemap-blit.png

DefaultCubemapMipmapFilter、DefaultDepthMipmapFilter、DefaultMipmapFilter

コンポジションターゲットのミップマップ生成をカスタマイズするためのデフォルトシェーダー。コンポジションターゲットのミップマップの作成 を参照してください。

../../_images/default-mipmap.png

FontDefault

テキストフォントをレンダリングします。このシェーダーはグリフテクスチャとフォントカラーを組み合わせて出力を表示します。Text Block ノードおよび Text Box ノードと一緒に使用できます。Text Block ノードを使用する および Text Box ノードを使用する を参照してください。

../../_images/font-default.png

LatLongCubemapBlit

緯度経度 (正距円筒図法) テクスチャをキューブマップにブリットします。このシェーダーは、Blit Render Pass で DefaultCubemapBlit シェーダーの代わりに使用できます。レンダリング を参照してください。

../../_images/lat-long-cubemap-blit.png

LatLongSkybox

緯度経度 (正距円筒図法) テクスチャをスカイボックスとして表示します。緯度経度環境テクスチャを使用する を参照してください。

../../_images/latlong-skybox.png

MaskTexture

1つのテクスチャが別のテクスチャをマスクするテクスチャデータを表示します。

../../_images/mask-texture.png

SweepTextures

テクスチャデータを一つのテクスチャから別のテクスチャへと遷移させて表示します。

../../_images/sweep-textures.png

Textured

テクスチャデータを表示します。テクスチャ (Textures) と テクスチャ付きマテリアルの作成 を参照してください。

../../_images/texture.png

ピクセルベースのPhongシェーダー

<KanziInstallation>/Studio/Asset Library/MaterialTypes/FragmentPhong ディレクトリには、OpenGL ES2で使用するピクセルベースのフォンシェーダーを持つマテリアルタイプが含まれています。フォン反射モデルを使用したライティングの適用を含む、GPU特有の計算のほとんどはフラグメントシェーダーで行われます。これにより、しばしばパフォーマンスを犠牲にしても、より良い画質が得られます。

FragmentPhong

Blinn-Phong シェーディングモデル を実装します。デフォルトで、このシェーダーは1つのディレクショナルライト、1つのスポットライト、および2つのポイントライトをサポートします。シェーダーは各フラグメントのライティングを計算します。

../../_images/fragment-phong.png

FragmentPhongCube

ビュー ベクトルと表面法線の反射から計算されたキューブマップ反射を表示し、その結果をフォン シェーディングと組み合わせます。

../../_images/fragment-phong-cube.png

FragmentPhongMorph

モーフィングを有効にします。Morph リソースの使用 を参照してください。

../../_images/fragment-phong-morph.png

FragmentPhongSkinned

スキンメッシュデータを表示します。スキンメッシュの使用 を参照してください。

../../_images/fragment-phong-skinned.png

FragmentPhongSkinnedMorph

FragmentPhongMorph シェーダーと FragmentPhongSkinned シェーダーを組み合わせます。

../../_images/fragment-phong-skinned-morph.png

FragmentPhongTextured

3Dノードで使用できるテクスチャデータを表示します。テクスチャ (Textures) および テクスチャ付きマテリアルの作成 を参照してください。

../../_images/fragment-phong-textured.png

FragmentPhongTexturedCube

FragmentPhongCube シェーダーと FragmentPhongTextured シェーダーを組み合わせます。

../../_images/fragment-phong-textured-cube.png

FragmentPhongTexturedNormalMap

スキンメッシュデータを表示します。スキンメッシュの使用 を参照してください。

../../_images/fragment-phong-textured-normal-map.png

FragmentPhongTexturedCubeNormalMap

FragmentPhongTexturedNormalMap シェーダーをビュー ベクトルと表面法線の反射から計算されたキューブマップ反射と組み合わせます。

../../_images/fragment-phong-textured-cube-normal-map.png

FragmentPhongTexturedSkinned

FragmentPhongSkinned シェーダーと FragmentPhongTextured シェーダーを組み合わせます。

../../_images/fragment-phong-textured-skinned.png

FragmentPhongTexturedSkinnedMorph

FragmentPhongMorph、FragmentPhongSkinned、および FragmentPhongTextured シェーダーを結合します。

../../_images/fragment-textured-phong-skinned-morph.png

頂点ベースのPhongシェーダー

<KanziInstallation>/Studio/Asset Library/MaterialTypes/VertexPhong ディレクトリには、OpenGL ES2 での使用に最適化された頂点ベースのフォンシェーダーを持つマテリアルタイプが含まれています。フォン反射モデルを使用したライトの適用を含む、GPU 固有の計算のほとんどは頂点シェーダーで行われます。これは、ほとんどのデバイスにとって良い出発点です。

VertexPhong

Blinn-Phongシェーディングモデル を実装します。デフォルトで、このシェーダーは1つのディレクショナルライト、1つのスポットライト、および2つのポイントライトをサポートします。シェーダーは各頂点のライティングを計算します。

../../_images/vertex-phong.png

VertexPhongCube

ビュー ベクトルと表面法線の反射から計算されたキューブマップ反射を表示し、その結果をフォン シェーディングと組み合わせます。

../../_images/vertex-phong-cube.png

VertexPhongMorph

モーフィングを有効にします。Morph リソースの使用 を参照してください。

../../_images/vertex-phong-morph.png

VertexPhongSkinned

  • スキンメッシュデータを表示します。このシェーダーは、複数の変換とウェイトに基づいて頂点を変換し、その結果をフォンシェーディングと組み合わせます。

  • サードパーティのコンテンツ作成ツールでマトリックスパレットとウェイトを定義する場合、それらはメッシュ属性の一部です。

  • このシェーダーは、メッシュデータにスキンデータ(マトリックスパレットとウェイト)を含まないジオメトリとは互換性がありません。

スキンメッシュの使用 を参照してください。

../../_images/vertex-phong-skinned.png

VertexPhongSkinnedMorph

VertexPhongMorph シェーダーと VertexPhongSkinned シェーダーを組み合わせます。

../../_images/vertex-phong-skinned-morph.png

VertexPhongTextured

3Dノードで使用できるテクスチャデータを表示します。テクスチャ (Textures) および テクスチャ付きマテリアルの作成 を参照してください。

../../_images/vertex-phong-textured.png

VertexPhongTexturedCube

VertexPhongCube シェーダーと VertexPhongTextured シェーダーを組み合わせます。

../../_images/vertex-phong-textured-cube.png

VertexPhongTexturedMorph

VertexPhongMorph シェーダーと VertexPhongTextured シェーダーを組み合わせます。

../../_images/vertex-phong-textured-morph.png

VertexPhongTexturedSkinned

VertexPhongSkinned シェーダーと VertexPhongTextured シェーダーを組み合わせます。

../../_images/vertex-phong-textured-skinned.png

VertexPhongTexturedSkinnedMorph

VertexPhongMorph、VertexPhongSkinned、および VertexPhongTextured シェーダーを結合します。

../../_images/vertex-phong-textured-skinned-morph.png

物理ベースシェーダー

<KanziInstallation>/Studio/Asset Library/MaterialTypes/PhysicallyBasedRendering ディレクトリには、OpenGL ES3 アプリケーション向けの物理ベースシェーダーを使用したマテリアルタイプが含まれています。これらのシェーダーは、物理ベースレンダリング (PBR) の原則を実装しています。物理ベースのマテリアルのプロパティは、メタルネスなどの物理的特性を表しているため、直感的に制御できます。物理ベースのライティングモデルを使用したライトの適用を含む、GPU 固有の計算のほとんどはフラグメントシェーダーで行われます。これにより、多くの照明条件でより現実的なレンダリング結果が得られます。

PhysicallyBased

物理ベースのシェーディングモデルを実装し、デフォルトで有効にします:

  • 粗さと金属度の設定

  • 1 つのディレクショナルライト、1 つのスポットライト、および 2 つのポイントライト

  • ベースカラーアルファ

  • ラインハルトトーンマッピング

../../_images/physically-based.png

PhysicallyBasedClearCoat

物理ベースレンダリングを使用して、クリアコートで覆われたマテリアルをレンダリングします。これは一般的に車両の塗装に使用されます。

../../_images/physically-based-clear-coat.png

PhysicallyBasedMorph

デフォルトで、3つのターゲットによるモーフィングを有効にします。Morph リソースの使用 を参照してください。

../../_images/physically-based-morph.png

PhysicallyBasedSkinned

デフォルトで、最大64個のボーンを持つメッシュのスキニングを有効にします。スキンメッシュの使用 を参照してください。

../../_images/physically-based-skinned.png

PhysicallyBasedTextured

ベースカラー、法線、粗さ、金属、オクルージョンマップ、および素材から放出される光を含むテクスチャの使用を可能にします。物理ベースのテクスチャードマテリアルを作成する を参照してください。

../../_images/physically-based-textured.png

PostProcessTonemap

デフォルトでReinhardトーンマッピングを適用するフルスクリーンポストプロセッシングマテリアル。

../../_images/post-process-tonemap.png

Unlit シェーダー

<KanziInstallation>/Studio/Asset Library/MaterialTypes/Unlit ディレクトリには、KHR_materials_unlit glTF 拡張機能で定義されたアンリットシェーディングモデルを使用するシェーダーを持つマテリアルタイプが含まれています。アンリットシェーダーは、物理ベースのシェーダーの代替として提供されており、パフォーマンスや美的理由で使用することができます。例えば、ライティングを必要としない「手描き」風の外観を実現するためにアンリットマテリアルを使用することができます。

Unlit

ライティング計算、トーンマッピング、および余分なテクスチャマップやファクターを使用せずに、物理ベースのシェーディングモデルの代替を実装します。

../../_images/unlit.png

UnlitMorph

デフォルトで、3つのターゲットによるモーフィングを有効にします。Morph リソースの使用 を参照してください。

../../_images/unlit-morph.png

UnlitSkinned

デフォルトで、最大64個のボーンを持つメッシュのスキニングを有効にします。スキンメッシュの使用 を参照してください。

../../_images/unlit-skinned.png

UnlitTextured

アンリットマテリアルにテクスチャを使用できるようにします。

../../_images/unlit-textured.png

関連項目

シェーダーのベストプラクティス

バイナリシェーダーを使用すること

フラグメントシェーダーの最適化

シェーダースイッチの削減

シェーダーを編集する

Kanzi でOpenGL ES 3.0+を使用する

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

ライトノードを使用する