import type { Material } from '@babylonjs/core/Materials/material'; import type { Mesh } from '@babylonjs/core/Meshes/mesh'; import type { Nullable } from '@babylonjs/core/types'; import type { GLTFLoader, IMaterial } from '@babylonjs/loaders/glTF/2.0'; /** * VRM で指定される Material を生成する * [VRM が提供するシェーダ](https://vrm.dev/en/univrm/shaders/index.html) を特定し読み込む * - UnlitTexture: 不透明, VRM ファイル側で [KHR_materials_unlit](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_unlit) が定義されているため、何もしない * - UnlitCutout: 透明度が閾値以下の部分を透明とする, 同上 * - UnlitTransparent: アルファブレンド。ZWriteしない, 同上 * - UnlitTransparentZWrite: アルファブレンド。ZWriteする, 同上に加え、プロパティで ZWrite を強制しています * - MToon: MToonMaterial を差し替えています。 */ export declare class VRMMaterialGenerator { private readonly loader; /** * @inheritdoc */ constructor(loader: GLTFLoader); /** * マテリアルを生成する Promise を返す * VRM 対象外の場合は null */ generate(context: string, material: IMaterial, mesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable>; /** * VRM または VCI からマテリアルプロパティの配列を探す */ private getMaterialProperties; /** * マテリアル名から MaterialProperty を探す * @param materialName マテリアル名 * @param extension 拡張データ */ private findMaterialPropertyByName; /** * テクスチャを読み込む * @param context 現在のコンテキスト * @param material 生成した MToonMaterial * @param prop 生成した MToonMaterial のマテリアルプロパティ */ private loadMToonTexturesAsync; /** * シェーダ名からマテリアルを推測して生成する * @param context 現在のコンテキスト * @param material glTF マテリアル * @param babylonDrawMode 描画種類 * @param prop 生成するマテリアルプロパティ */ private createMaterialByShader; /** * マテリアルに VRM プロパティを設定 * VRM プロパティとマテリアルプロパティのマッピングを行っている * 初期値はマテリアル実装側に持っているため、値がある場合のみ上書きする */ private setMToonMaterialProperties; }