@openhps/core
Version:
Open Hybrid Positioning System - Core component
86 lines (79 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _LightingModel = _interopRequireDefault(require("../core/LightingModel.js"));
var _PropertyNode = require("../core/PropertyNode.js");
var _constants = require("../../constants.js");
var _MaterialNode = require("../accessors/MaterialNode.js");
var _MathNode = require("../math/MathNode.js");
var _TSLBase = require("../tsl/TSLBase.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Represents the lighting model for unlit materials. The only light contribution
* is baked indirect lighting modulated with ambient occlusion and the material's
* diffuse color. Environment mapping is supported. Used in {@link MeshBasicNodeMaterial}.
*
* @augments LightingModel
*/
class BasicLightingModel extends _LightingModel.default {
/**
* Constructs a new basic lighting model.
*/
constructor() {
super();
}
/**
* Implements the baked indirect lighting with its modulation.
*
* @param {NodeBuilder} builder - The current node builder.
*/
indirect({
context
}) {
const ambientOcclusion = context.ambientOcclusion;
const reflectedLight = context.reflectedLight;
const irradianceLightMap = context.irradianceLightMap;
reflectedLight.indirectDiffuse.assign((0, _TSLBase.vec4)(0.0));
// accumulation (baked indirect lighting only)
if (irradianceLightMap) {
reflectedLight.indirectDiffuse.addAssign(irradianceLightMap);
} else {
reflectedLight.indirectDiffuse.addAssign((0, _TSLBase.vec4)(1.0, 1.0, 1.0, 0.0));
}
// modulation
reflectedLight.indirectDiffuse.mulAssign(ambientOcclusion);
reflectedLight.indirectDiffuse.mulAssign(_PropertyNode.diffuseColor.rgb);
}
/**
* Implements the environment mapping.
*
* @param {NodeBuilder} builder - The current node builder.
*/
finish(builder) {
const {
material,
context
} = builder;
const outgoingLight = context.outgoingLight;
const envNode = builder.context.environment;
if (envNode) {
switch (material.combine) {
case _constants.MultiplyOperation:
outgoingLight.rgb.assign((0, _MathNode.mix)(outgoingLight.rgb, outgoingLight.rgb.mul(envNode.rgb), _MaterialNode.materialSpecularStrength.mul(_MaterialNode.materialReflectivity)));
break;
case _constants.MixOperation:
outgoingLight.rgb.assign((0, _MathNode.mix)(outgoingLight.rgb, envNode.rgb, _MaterialNode.materialSpecularStrength.mul(_MaterialNode.materialReflectivity)));
break;
case _constants.AddOperation:
outgoingLight.rgb.addAssign(envNode.rgb.mul(_MaterialNode.materialSpecularStrength.mul(_MaterialNode.materialReflectivity)));
break;
default:
console.warn('THREE.BasicLightingModel: Unsupported .combine value:', material.combine);
break;
}
}
}
}
var _default = exports.default = BasicLightingModel;