Skip to content

Commit

Permalink
KHR_materials_emissive_strength
Browse files Browse the repository at this point in the history
  • Loading branch information
sebavan committed Oct 27, 2021
1 parent 7954feb commit 1d3131d
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 1 deletion.
7 changes: 6 additions & 1 deletion Playground/scenes/BoomBox/BoomBox.gltf
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,12 @@
"emissiveTexture": {
"index": 3
},
"name": "BoomBox_Mat"
"name": "BoomBox_Mat",
"extensions": {
"KHR_materials_emissive_strength": {
"emissiveStrength": 0.2
}
}
}
],
"nodes": [
Expand Down
10 changes: 10 additions & 0 deletions dist/preview release/glTF2Interface/babylon.glTF2Interface.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1047,6 +1047,16 @@ declare module BABYLON.GLTF2 {
ior: number;
}

/**
* Interfaces from the KHR_materials_emissive_strength extension
* !!! Experimental Extension Subject to Changes !!!
*/

/** @hidden */
interface IKHRMaterialsEmissiveStrength extends IMaterialExtension {
emissiveStrength: number;
}

/**
* Interfaces from the KHR_materials_pbrSpecularGlossiness extension
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ export class GLTFComponent extends React.Component<IGLTFComponentProps> {
<CheckBoxLineComponent label="KHR_draco_mesh_compression" isSelected={() => extensionStates["KHR_draco_mesh_compression"].enabled} onSelect={(value) => (extensionStates["KHR_draco_mesh_compression"].enabled = value)} />
<CheckBoxLineComponent label="KHR_materials_pbrSpecularGloss..." isSelected={() => extensionStates["KHR_materials_pbrSpecularGlossiness"].enabled} onSelect={(value) => (extensionStates["KHR_materials_pbrSpecularGlossiness"].enabled = value)} />
<CheckBoxLineComponent label="KHR_materials_clearcoat" isSelected={() => extensionStates["KHR_materials_clearcoat"].enabled} onSelect={(value) => (extensionStates["KHR_materials_clearcoat"].enabled = value)} />
<CheckBoxLineComponent label="KHR_materials_emissive_strength" isSelected={() => extensionStates["KHR_materials_emissive_strength"].enabled} onSelect={(value) => (extensionStates["KHR_materials_emissive_strength"].enabled = value)} />
<CheckBoxLineComponent label="KHR_materials_ior" isSelected={() => extensionStates["KHR_materials_ior"].enabled} onSelect={(value) => (extensionStates["KHR_materials_ior"].enabled = value)} />
<CheckBoxLineComponent label="KHR_materials_sheen" isSelected={() => extensionStates["KHR_materials_sheen"].enabled} onSelect={(value) => (extensionStates["KHR_materials_sheen"].enabled = value)} />
<CheckBoxLineComponent label="KHR_materials_specular" isSelected={() => extensionStates["KHR_materials_specular"].enabled} onSelect={(value) => (extensionStates["KHR_materials_specular"].enabled = value)} />
Expand Down
1 change: 1 addition & 0 deletions inspector/src/components/globalState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export class GlobalState {
KHR_mesh_quantization: { enabled: true },
KHR_materials_pbrSpecularGlossiness: { enabled: true },
KHR_materials_clearcoat: { enabled: true },
KHR_materials_emissive_strength: { enabled: true },
KHR_materials_ior: { enabled: true },
KHR_materials_sheen: { enabled: true },
KHR_materials_specular: { enabled: true },
Expand Down
67 changes: 67 additions & 0 deletions loaders/src/glTF/2.0/Extensions/KHR_materials_emissive_strength.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { Nullable } from "babylonjs/types";
import { PBRMaterial } from "babylonjs/Materials/PBR/pbrMaterial";
import { Material } from "babylonjs/Materials/material";

import { IMaterial } from "../glTFLoaderInterfaces";
import { IGLTFLoaderExtension } from "../glTFLoaderExtension";
import { GLTFLoader } from "../glTFLoader";
import { IKHRMaterialsEmissiveStrength } from 'babylonjs-gltf2interface';

const NAME = "KHR_materials_emissive_strength";

/**
* [Experimental Spec](https://github.com/KhronosGroup/glTF/pull/1994)
*/
export class KHR_materials_emissive_strength implements IGLTFLoaderExtension {
/**
* The name of this extension.
*/
public readonly name = NAME;

/**
* Defines whether this extension is enabled.
*/
public enabled: boolean;

/**
* Defines a number that determines the order the extensions are applied.
*/
public order = 170;

private _loader: GLTFLoader;

/** @hidden */
constructor(loader: GLTFLoader) {
this._loader = loader;
this.enabled = this._loader.isExtensionUsed(NAME);
}

/** @hidden */
public dispose() {
(this._loader as any) = null;
}

/** @hidden */
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsEmissiveStrength>(context, material, this.name, (extensionContext, extension) => {
const promises = new Array<Promise<any>>();
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
promises.push(this._loadEmissivePropertiesAsync(extensionContext, extension, babylonMaterial));
return Promise.all(promises).then(() => { });
});
}

private _loadEmissivePropertiesAsync(context: string, properties: IKHRMaterialsEmissiveStrength, babylonMaterial: Material): Promise<void> {
if (!(babylonMaterial instanceof PBRMaterial)) {
throw new Error(`${context}: Material type not supported`);
}

if (properties.emissiveStrength !== undefined) {
babylonMaterial.emissiveColor.scaleToRef(properties.emissiveStrength, babylonMaterial.emissiveColor);
}

return Promise.resolve();
}
}

GLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_emissive_strength(loader));
1 change: 1 addition & 0 deletions loaders/src/glTF/2.0/Extensions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export * from "./KHR_lights_punctual";
export * from "./KHR_materials_pbrSpecularGlossiness";
export * from "./KHR_materials_unlit";
export * from "./KHR_materials_clearcoat";
export * from "./KHR_materials_emissive_strength";
export * from "./KHR_materials_sheen";
export * from "./KHR_materials_specular";
export * from "./KHR_materials_ior";
Expand Down

0 comments on commit 1d3131d

Please sign in to comment.