@babylonjs/loaders
Version:
For usage documentation please visit https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes/.
307 lines (306 loc) • 13.9 kB
TypeScript
import type { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
import type { IAnimation, ICamera, IGLTF, IKHRLightsPunctual_Light, IEXTLightsArea_Light, IMaterial, IMesh, INode } from "../glTFLoaderInterfaces.js";
import type { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
import { Matrix, Quaternion, Vector2 } from "@babylonjs/core/Maths/math.vector.js";
import type { Color3 } from "@babylonjs/core/Maths/math.color.js";
import { Color4 } from "@babylonjs/core/Maths/math.color.js";
import type { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
import type { Light } from "@babylonjs/core/Lights/light.js";
import type { Nullable } from "@babylonjs/core/types.js";
import type { IEXTLightsImageBased_LightImageBased } from "babylonjs-gltf2interface";
import type { BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js";
import type { IInterpolationPropertyInfo, IObjectAccessor } from "@babylonjs/core/FlowGraph/typeDefinitions.js";
import { GLTFPathToObjectConverter } from "./gltfPathToObjectConverter.js";
import type { AnimationGroup } from "@babylonjs/core/Animations/animationGroup.js";
import type { Mesh } from "@babylonjs/core/Meshes/mesh.js";
export interface IGLTFObjectModelTree {
cameras: IGLTFObjectModelTreeCamerasObject;
nodes: IGLTFObjectModelTreeNodesObject;
materials: IGLTFObjectModelTreeMaterialsObject;
extensions: IGLTFObjectModelTreeExtensionsObject;
animations: {
length: IObjectAccessor<IAnimation[], AnimationGroup[], number>;
__array__: {};
};
meshes: {
length: IObjectAccessor<IMesh[], (Mesh | undefined)[], number>;
__array__: {};
};
}
export interface IGLTFObjectModelTreeNodesObject<GLTFTargetType = INode, BabylonTargetType = TransformNode> {
length: IObjectAccessor<GLTFTargetType[], BabylonTargetType[], number>;
__array__: {
__target__: boolean;
translation: IObjectAccessor<GLTFTargetType, BabylonTargetType, Vector3>;
rotation: IObjectAccessor<GLTFTargetType, BabylonTargetType, Quaternion>;
scale: IObjectAccessor<GLTFTargetType, BabylonTargetType, Vector3>;
matrix: IObjectAccessor<GLTFTargetType, BabylonTargetType, Matrix>;
globalMatrix: IObjectAccessor<GLTFTargetType, BabylonTargetType, Matrix>;
weights: {
length: IObjectAccessor<GLTFTargetType, BabylonTargetType, number>;
__array__: {
__target__: boolean;
} & IObjectAccessor<GLTFTargetType, BabylonTargetType, number>;
} & IObjectAccessor<GLTFTargetType, BabylonTargetType, number[]>;
extensions: {
EXT_lights_ies?: {
multiplier: IObjectAccessor<INode, Light, number>;
color: IObjectAccessor<INode, Light, Color3>;
};
KHR_node_visibility?: {
visible: IObjectAccessor<INode, Mesh, boolean>;
};
};
};
}
export interface IGLTFObjectModelTreeCamerasObject {
__array__: {
__target__: boolean;
orthographic: {
xmag: IObjectAccessor<ICamera, ICamera, Vector2>;
ymag: IObjectAccessor<ICamera, ICamera, Vector2>;
zfar: IObjectAccessor<ICamera, ICamera, number>;
znear: IObjectAccessor<ICamera, ICamera, number>;
};
perspective: {
yfov: IObjectAccessor<ICamera, ICamera, number>;
zfar: IObjectAccessor<ICamera, ICamera, number>;
znear: IObjectAccessor<ICamera, ICamera, number>;
aspectRatio: IObjectAccessor<ICamera, ICamera, Nullable<number>>;
};
};
}
export interface IGLTFObjectModelTreeMaterialsObject {
__array__: {
__target__: boolean;
pbrMetallicRoughness: {
baseColorFactor: IObjectAccessor<IMaterial, PBRMaterial, Color4>;
metallicFactor: IObjectAccessor<IMaterial, PBRMaterial, Nullable<number>>;
roughnessFactor: IObjectAccessor<IMaterial, PBRMaterial, Nullable<number>>;
baseColorTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
metallicRoughnessTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
emissiveFactor: IObjectAccessor<IMaterial, PBRMaterial, Color3>;
normalTexture: {
scale: IObjectAccessor<IMaterial, PBRMaterial, number>;
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
occlusionTexture: {
strength: IObjectAccessor<IMaterial, PBRMaterial, number>;
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
emissiveTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
extensions: {
KHR_materials_anisotropy: {
anisotropyStrength: IObjectAccessor<IMaterial, PBRMaterial, number>;
anisotropyRotation: IObjectAccessor<IMaterial, PBRMaterial, number>;
anisotropyTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
KHR_materials_clearcoat: {
clearcoatFactor: IObjectAccessor<IMaterial, PBRMaterial, number>;
clearcoatRoughnessFactor: IObjectAccessor<IMaterial, PBRMaterial, number>;
clearcoatTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
clearcoatNormalTexture: {
scale: IObjectAccessor<IMaterial, PBRMaterial, number>;
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
clearcoatRoughnessTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
KHR_materials_dispersion: {
dispersion: IObjectAccessor<IMaterial, PBRMaterial, number>;
};
KHR_materials_emissive_strength: {
emissiveStrength: IObjectAccessor<IMaterial, PBRMaterial, number>;
};
KHR_materials_ior: {
ior: IObjectAccessor<IMaterial, PBRMaterial, number>;
};
KHR_materials_iridescence: {
iridescenceFactor: IObjectAccessor<IMaterial, PBRMaterial, number>;
iridescenceIor: IObjectAccessor<IMaterial, PBRMaterial, number>;
iridescenceThicknessMinimum: IObjectAccessor<IMaterial, PBRMaterial, number>;
iridescenceThicknessMaximum: IObjectAccessor<IMaterial, PBRMaterial, number>;
iridescenceTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
iridescenceThicknessTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
KHR_materials_sheen: {
sheenColorFactor: IObjectAccessor<IMaterial, PBRMaterial, Color3>;
sheenRoughnessFactor: IObjectAccessor<IMaterial, PBRMaterial, number>;
sheenColorTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
sheenRoughnessTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
KHR_materials_specular: {
specularFactor: IObjectAccessor<IMaterial, PBRMaterial, number>;
specularColorFactor: IObjectAccessor<IMaterial, PBRMaterial, Color3>;
specularTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
specularColorTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
KHR_materials_transmission: {
transmissionFactor: IObjectAccessor<IMaterial, PBRMaterial, number>;
transmissionTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
KHR_materials_diffuse_transmission: {
diffuseTransmissionFactor: IObjectAccessor<IMaterial, PBRMaterial, number>;
diffuseTransmissionTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
diffuseTransmissionColorFactor: IObjectAccessor<IMaterial, PBRMaterial, Nullable<Color3>>;
diffuseTransmissionColorTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
KHR_materials_volume: {
thicknessFactor: IObjectAccessor<IMaterial, PBRMaterial, number>;
attenuationColor: IObjectAccessor<IMaterial, PBRMaterial, Color3>;
attenuationDistance: IObjectAccessor<IMaterial, PBRMaterial, number>;
thicknessTexture: {
extensions: {
KHR_texture_transform: ITextureDefinition;
};
};
};
};
};
}
interface ITextureDefinition {
offset: IObjectAccessor<IMaterial, PBRMaterial, Vector2>;
rotation: IObjectAccessor<IMaterial, PBRMaterial, number>;
scale: IObjectAccessor<IMaterial, PBRMaterial, Vector2>;
}
export interface IGLTFObjectModelTreeMeshesObject {
}
export interface IGLTFObjectModelTreeExtensionsObject {
KHR_lights_punctual: {
lights: {
length: IObjectAccessor<IKHRLightsPunctual_Light[], Light[], number>;
__array__: {
__target__: boolean;
color: IObjectAccessor<IKHRLightsPunctual_Light, Light, Color3>;
intensity: IObjectAccessor<IKHRLightsPunctual_Light, Light, number>;
range: IObjectAccessor<IKHRLightsPunctual_Light, Light, number>;
spot: {
innerConeAngle: IObjectAccessor<IKHRLightsPunctual_Light, Light, number>;
outerConeAngle: IObjectAccessor<IKHRLightsPunctual_Light, Light, number>;
};
};
};
};
EXT_lights_area: {
lights: {
length: IObjectAccessor<IEXTLightsArea_Light[], Light[], number>;
__array__: {
__target__: boolean;
color: IObjectAccessor<IEXTLightsArea_Light, Light, Color3>;
intensity: IObjectAccessor<IEXTLightsArea_Light, Light, number>;
size: IObjectAccessor<IEXTLightsArea_Light, Light, number>;
rect: {
aspect: IObjectAccessor<IEXTLightsArea_Light, Light, number>;
};
};
};
};
EXT_lights_ies: {
lights: {
length: IObjectAccessor<IKHRLightsPunctual_Light[], Light[], number>;
};
};
EXT_lights_image_based: {
lights: {
__array__: {
__target__: boolean;
intensity: IObjectAccessor<IEXTLightsImageBased_LightImageBased, BaseTexture, number>;
rotation: IObjectAccessor<IEXTLightsImageBased_LightImageBased, BaseTexture, Quaternion>;
};
length: IObjectAccessor<IEXTLightsImageBased_LightImageBased[], BaseTexture[], number>;
};
};
}
/**
* get a path-to-object converter for the given glTF tree
* @param gltf the glTF tree to use
* @returns a path-to-object converter for the given glTF tree
*/
export declare function GetPathToObjectConverter(gltf: IGLTF): GLTFPathToObjectConverter<unknown, unknown, unknown>;
/**
* This function will return the object accessor for the given key in the object model
* If the key is not found, it will return undefined
* @param key the key to get the mapping for, for example /materials/\{\}/emissiveFactor
* @returns an object accessor for the given key, or undefined if the key is not found
*/
export declare function GetMappingForKey(key: string): IObjectAccessor | undefined;
/**
* Set interpolation for a specific key in the object model
* @param key the key to set, for example /materials/\{\}/emissiveFactor
* @param interpolation the interpolation elements array
*/
export declare function SetInterpolationForKey(key: string, interpolation?: IInterpolationPropertyInfo[]): void;
/**
* This will ad a new object accessor in the object model at the given key.
* Note that this will NOT change the typescript types. To do that you will need to change the interface itself (extending it in the module that uses it)
* @param key the key to add the object accessor at. For example /cameras/\{\}/perspective/aspectRatio
* @param accessor the object accessor to add
*/
export declare function AddObjectAccessorToKey<GLTFTargetType = any, BabylonTargetType = any, BabylonValueType = any>(key: string, accessor: IObjectAccessor<GLTFTargetType, BabylonTargetType, BabylonValueType>): void;
export {};