v3d-core
Version:
WebGL-based humanoid model rendering engine.
177 lines (176 loc) • 6.47 kB
TypeScript
/** Copyright (c) 2021 The v3d Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
import { Scene } from "@babylonjs/core/scene";
import { Engine } from "@babylonjs/core/Engines/engine";
import { Color3 } from "@babylonjs/core/Maths/math";
import { GLTFLoaderExtensionObserver } from "./importer/loader-observer";
import { VRMManager } from "./importer/babylon-vrm-loader/src";
import { Animation, Animatable, Camera, DefaultRenderingPipeline, EventState, IShadowLight, ShadowGenerator, IAnimationKey, EasingFunction, Nullable, SceneOptimizerOptions } from "@babylonjs/core";
import { v3DSkyBox } from "./scene/skybox";
export declare class V3DCore implements GLTFLoaderExtensionObserver {
readonly engine: Engine;
scene?: Scene;
static FRAMERATE: number;
/**
* GLTFFileLoader plugin factory
* @private
*/
private _vrmFileLoader;
private _springBonesAutoUpdate;
get springBonesAutoUpdate(): boolean;
set springBonesAutoUpdate(value: boolean);
/**
* Shadow generators
*/
private _shadowGenerators;
/**
* Scene optimizer
*/
private _sceneOptimizer;
/**
* Rendering pipeline
*/
private readonly _renderingPipeline;
get renderingPipeline(): DefaultRenderingPipeline;
/**
* Callbacks when loading is done
*/
private _onLoadCompleteCallbacks;
addOnLoadCompleteCallbacks(callback: Function): void;
removeOnLoadCompleteCallback(callback: Function): void;
resetOnLoadCompleteCallbacks(): void;
private _beforeRenderFunc;
private _afterRenderFunc;
updateBeforeRenderFunction(func: (eventData: Scene, eventState: EventState) => void): void;
updateAfterRenderFunction(func: (eventData: Scene, eventState: EventState) => void): void;
private _cameraOnBeforeRenderFunc;
private _mainCamera;
get mainCamera(): Camera;
set mainCamera(value: Camera);
skyBox: v3DSkyBox;
/**
* Loaded VRM Managers
* @private
*/
loadedVRMManagers: VRMManager[];
addVRMManager(manager: VRMManager): void;
/**
* Get VRM Manager by index
* @param idx
*/
getVRMManagerByIndex(idx: number): VRMManager;
/**
* Get VRM Manager by URI
* VRM doesn't have any UID in metadata. Title can be unfilled too.
* Filename is the only reasonable ID.
* @param uri
*/
getVRMManagerByURI(uri: String): VRMManager;
constructor(engine: Engine, scene?: Scene, camera?: Camera);
/**
* Make background transparent.
*/
transparentBackground(): void;
/**
* Make background solid.
*/
solidBackground(): void;
/**
* Change background color.
* @param color
*/
setBackgroundColor(color: Color3): void;
/**
* Set background color from hex string.
* @param hex Hex color string
*/
setBackgroundColorHex(hex: string): void;
/**
* Add an ambient light.
* @param color color of the light
*/
addAmbientLight(color?: Color3): void;
/**
* Add a basic arc rotate camera to scene.
* TODO: there seems to be a bug when meshes are near the edge of camera cone
* Probably has something to do with culling
* @param radius rotation radius
*/
private addCamera;
/**
* Attach a arc rotate following camera to VRM model.
* Probably has something to do with culling
* @param manager VRM Manager to attach the camera to
* @param radius rotation radius
*/
attachCameraTo(manager: VRMManager, radius?: number): void;
/**
*
* Create a skybox for the scene.
* @param size size of the skybox
* @param textureName path to skybox texture
*/
createSkyBox(size: number, textureName?: string): void;
/**
* Enable shadow caster for light.
* @param light Light to enable shadows.
*/
enableShabows(light?: IShadowLight): void;
/**
* Get corresponding shadow generator for light.
* @param light Light to get shadow generator
*/
getShadownGenerator(light: IShadowLight): Nullable<ShadowGenerator>;
/**
* Convenience function for starting animation
* @param target
* @param name
* @param property
* @param duration
* @param from
* @param to
* @param loopMode
* @param easingFunction
* @param easingMode
*/
startQuickAnimation(target: any, name: string, property: string, duration: number, from: any, to: any, loopMode?: number | undefined, easingFunction?: EasingFunction, easingMode?: number): Animatable;
/**
* Convenience function for creating animation
* @param target
* @param name
* @param property
* @param keyFrames
* @param loopMode
* @param easingFunction
* @param easingMode
*/
createAnimation(target: any, name: string, property: string, keyFrames: Array<IAnimationKey>, loopMode?: number | undefined, easingFunction?: EasingFunction, easingMode?: number): [any, Animation];
enableOptimizer(options?: SceneOptimizerOptions): void;
/**
* Wrapper for SceneLoader.AppendAsync.
* @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename
* @param sceneFilename a string that defines the name of the scene file or starts with "data:" following by the stringified version of the scene or a File object (default: empty string)
*/
AppendAsync(rootUrl: string, sceneFilename?: string | File): Promise<Scene>;
/**
* Wrapper for SceneLoader.LoadAsync
* @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename
* @param sceneFilename a string that defines the name of the scene file or starts with "data:" following by the stringified version of the scene or a File object (default: empty string)
*/
LoadAsync(rootUrl: string, sceneFilename?: string | File): Promise<Scene>;
onLoadReady(): void;
/**
* Set up for time update.
* @private
*/
private setupObservable;
private enableResize;
private setupShadowGenerator;
private registerVrmExtension;
private registerVrmPlugin;
private setupRenderingPipeline;
}
export default V3DCore;