UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

86 lines (79 loc) 3.04 kB
"use strict"; 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;