メインコンテンツまでスキップ

<pc-material>

<pc-material>タグは、<pc-render>コンポーネントのmaterial属性から適用できるマテリアルを定義するために使用されます。

使用法
  • <pc-app> の直接の子である必要があります。

この要素はエンジンのStandardMaterialをラップし、デフォルトでメタル/ラフネスのワークフローを使用します。素のStandardMaterialとは異なり、メタルネスワークフローが有効化されており(use-metalnessのデフォルトは"true")、これはmetalness-*属性が前提とする動作であり、glTFをはじめとするPBRツールが「PBR」と呼ぶものです。

グロスとラフネス

roughnessおよびroughness-map属性は、glossおよびgloss-mapのエイリアスで、加えてグロスチャンネルを反転します。1つのマテリアルではどちらか一方のファミリーだけを使用してください。両方を混在させると、2つのファミリーは反転について解釈が食い違うため、コンソールに警告が記録されます。gloss-map-*修飾子自体は反転に関与しないため、roughness-mapの設定にはそれらを使用するのが正しい方法です。

属性

属性タイプデフォルト説明
alpha-testNumber"0"アルファテストの参照値。不透明度がこの値を下回るフラグメントは破棄されます
alpha-to-coverageBoolean"false"マルチサンプリングで透明度を解決するアルファトゥカバレッジを使用するかどうか
ao-intensityNumber"1"アンビエントオクルージョンマップの強さ(0〜1)
ao-mapString-アンビエントオクルージョンマップとして使用するテクスチャ <pc-asset>id
blend-typeEnum"none"マテリアルを背後のシーンとブレンドする方法: "none" | "normal" | "additive" | "additive-alpha" | "premultiplied" | "multiplicative" | "multiplicative-2x" | "screen" | "min" | "max" | "subtractive"
bumpinessNumber"1"ノーマルマップの強さ。0はフラット、1はマップの効果を最大に適用します
cullEnum"back"メッシュのどの面をカリングするか: "none" | "back" | "front" | "front-and-back"
depth-biasNumber"0"フラグメントの深度に適用されるオフセット。Zファイティングの解決に使用します
depth-testBoolean"true"フラグメントを深度バッファに対してテストするかどうか
depth-writeBoolean"true"フラグメントが深度バッファに書き込むかどうか
diffuseColor"1 1 1"マテリアルのディフューズカラー
diffuse-mapString-ディフューズマップとして使用するテクスチャ <pc-asset>id
emissiveColor"0 0 0"マテリアルのエミッシブカラー
emissive-intensityNumber"1"エミッシブカラーとマップに適用される乗数
emissive-mapString-エミッシブマップとして使用するテクスチャ <pc-asset>id
enable-ggx-specularBoolean"false"異方性をサポートするGGXスペキュラモデルを使用するかどうか
fresnel-modelEnum"schlick"浅い角度でのスペキュラ反射に使用するフレネルモデル: "none" | "schlick"
glossNumber"0.25"マテリアルの光沢度。0(ラフ)から1(光沢)まで。roughnessも参照してください
gloss-invertBoolean"false"グロスの値とマップを反転し、ラフネスとして扱うかどうか。roughnessまたはroughness-mapを設定すると自動的に有効になります
gloss-mapString-グロスマップとして使用するテクスチャ <pc-asset>id
height-mapString-ハイトマップとして使用するテクスチャ <pc-asset>id
height-map-factorNumber"1"ハイトマップによる視差効果の強さ
idString-他のタグがこのマテリアルを参照するために使用する一意の識別子
metalnessNumber"1"表面の金属度。0(誘電体)から1(金属)まで
metalness-mapString-メタルネスマップとして使用するテクスチャ <pc-asset>id
normal-mapString-ノーマルマップとして使用するテクスチャ <pc-asset>id
occlude-directBoolean"false"アンビエントオクルージョンが直接光も減衰させるかどうか
occlude-specularEnum"ao"スペキュラ反射をオクルージョンする方法: "none" | "ao" | "gloss-dependent"
opacityNumber"1"マテリアルの不透明度。0(透明)から1(不透明)まで。視覚的な効果を得るには"none"以外のblend-typeが必要です
opacity-ditherEnum"none"ブレンドなしで透明度を近似する不透明度のディザリング: "none" | "bayer8" | "bluenoise" | "ignnoise"
opacity-fades-specularBoolean"true"マテリアルが透明になるにつれてスペキュラハイライトをフェードアウトさせるかどうか
opacity-mapString-オパシティマップとして使用するテクスチャ <pc-asset>id
roughnessNumber-マテリアルのラフネス。0(光沢)から1(ラフ)まで。glossのエイリアスで、gloss-invertも設定するため、gloss系の属性と組み合わせないでください
roughness-mapString-ラフネスマップとして使用するテクスチャ <pc-asset>idgloss-mapのエイリアスで、gloss-invertも設定するため、gloss系の属性と組み合わせないでください
slope-depth-biasNumber"0"表面の傾きに比例して適用される深度オフセット。Zファイティングの解決に使用します
specularColor"0 0 0"マテリアルのスペキュラカラー。メタルネスワークフローが無効か、use-metalness-specular-colorが有効な場合にのみ適用されます
specularity-factorNumber"1"正面の角度でのスペキュラ反射の強さ(0〜1)。use-metalness-specular-colorが有効な場合にのみ適用されます
two-sided-lightingBoolean"false"裏面を法線が反転しているかのようにライティングするかどうか
use-fogBoolean"true"マテリアルがシーンのフォグの影響を受けるかどうか
use-lightingBoolean"true"マテリアルがシーンのライトの影響を受けるかどうか。無効にすると、ディフューズカラーとマップのみを使用してアンリットでレンダリングされます
use-metalnessBoolean"true"旧来のスペキュラワークフローではなくメタルネスワークフローを使用するかどうか
use-metalness-specular-colorBoolean"false"メタルネスワークフローの使用中にスペキュラカラーで反射に色付けするかどうか
use-skyboxBoolean"true"マテリアルがシーンのスカイボックスによってライティングされるかどうか
use-tonemapBoolean"true"カメラのトーンマッピングをマテリアルに適用するかどうか

テクスチャマップ修飾子

上記の各*-map属性はテクスチャスロットを定義し、各スロットにはテクスチャのサンプリング方法を設定する一連の修飾子があります。<slot>aodiffuseemissiveglossheightmetalnessnormalopacityのいずれかに置き換えてください:

属性タイプデフォルト説明
<slot>-map-channelEnumスロットによるマップを読み取るテクスチャチャンネル
<slot>-map-offsetVector2"0 0"マップのUVオフセット
<slot>-map-rotationNumber"0"マップの回転(度単位)
<slot>-map-tilingVector2"1 1"表面に対するマップのタイリング(リピート)
<slot>-map-uvNumber"0"マップのサンプリングに使用するUVセットのインデックス

-map-channel修飾子はスロットによって異なります:

  • カラーマップ(diffuseemissive)は"r" | "g" | "b" | "a" | "rgb"を受け付け、デフォルトは"rgb"です。
  • スカラーマップ(aoglossheightmetalness)は"r" | "g" | "b" | "a"を受け付け、デフォルトは"g"です。
  • opacityマップは"r" | "g" | "b" | "a"を受け付け、デフォルトは"a"です。
  • normalマップにはチャンネル修飾子がありません — 常に3つのチャンネルすべてを読み取ります。

<pc-app>
<pc-asset src="assets/textures/dark-tiles.png" id="dark-tiles"></pc-asset>
<pc-material id="crimson" diffuse="crimson"></pc-material>
<pc-material id="gold" diffuse="#ffd700" metalness="1" roughness="0.3"></pc-material>
<pc-material id="glass" blend-type="normal" opacity="0.4"></pc-material>
<pc-material id="ground" diffuse-map="dark-tiles" diffuse-map-tiling="4 4"></pc-material>
<pc-scene>
<pc-entity name="box" position="-2 0 0">
<pc-render type="box" material="crimson"></pc-render>
</pc-entity>
<pc-entity name="sphere">
<pc-render type="sphere" material="gold"></pc-render>
</pc-entity>
<pc-entity name="capsule" position="2 0 0">
<pc-render type="capsule" material="glass"></pc-render>
</pc-entity>
<pc-entity name="ground" scale="10 1 10">
<pc-render type="plane" material="ground"></pc-render>
</pc-entity>
</pc-scene>
</pc-app>

実行時(アプリケーションの起動後)に挿入された<pc-material>は、挿入時にマテリアルを作成するため、JavaScriptから動的にマテリアルを追加できます。実行時の属性変更も即座に反映され(連続した変更は1回のマテリアル更新にまとめられます)、*-map属性を削除するとそのテクスチャスロットはクリアされます。

JavaScriptインターフェース

MaterialElement APIを使用して、<pc-material>要素をプログラムで作成および操作できます。