シェーダー

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 または Vulkan をターゲットとする場合は、次のシェーダーも作成できます。

../../_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 シェーダーインクルードライブラリを使用できます。シェーダーインクルードライブラリを使用する を参照してください。

汎用シェーダー

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

ColorTexture

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

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

CubemapSkybox

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

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

DefaultBlit

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

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

DefaultCubemapBlit

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

../../_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

lat-long (正距円筒図法) テクスチャをキューブマップにブリットします。このシェーダーは、Blit レンダーパスで 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 ディレクトリには、ピクセルベースの Phong シェーダーを使用するマテリアルタイプが含まれています。Phong 反射モデルを使用したライトの適用を含め、GPU 固有の計算のほとんどはフラグメントシェーダーで行われます。これにより、多くの場合パフォーマンスと引き換えに、より高い画質が得られます。

FragmentPhong

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

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

FragmentPhongCube

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

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

FragmentPhongMorph

モーフィングを有効にします。モーフを使用する を参照してください。

../../_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 ディレクトリには、頂点ベースの Phong シェーダーを使用するマテリアルタイプが含まれています。Phong 反射モデルを使用したライトの適用を含め、GPU 固有の計算のほとんどはバーテックスシェーダーで行われます。ほとんどのデバイスにとって、これは良い出発点となります。

VertexPhong

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

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

VertexPhongCube

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

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

VertexPhongMorph

モーフィングを有効にします。モーフを使用する を参照してください。

../../_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 ディレクトリには、物理ベースのシェーダーを使用するマテリアルタイプが含まれています。これらのシェーダーは、物理ベースレンダリング (PBR) の原則を実装しています。物理ベースのマテリアルのプロパティは、金属度などの物理的特性を表すため、直感的に操作できます。物理ベースのライティングモデルを使用したライトの適用を含め、GPU 固有の計算のほとんどはフラグメントシェーダーで行われます。これにより、多くのライティング条件において、よりリアルなレンダリング結果が得られます。

PhysicallyBased

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

  • 粗さと金属度の設定

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

  • ベースカラーアルファ

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

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

PhysicallyBasedClearCoat

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

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

PhysicallyBasedMorph

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

../../_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つのターゲットによるモーフィングを有効にします。モーフを使用する を参照してください。

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

UnlitSkinned

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

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

UnlitTextured

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

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

関連項目

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

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

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

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

シェーダーを編集する

Kanzi でOpenGL ES 3.0+を使用する

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

ライトノードを使用する