diff --git a/src/avatar-selector.js b/src/avatar-selector.js index 0b0aead55d1eaa6e6cd179365b1dcebec028544f..1ded01b457cd2a0d05cdd9a0ed9535b4fdd36a45 100644 --- a/src/avatar-selector.js +++ b/src/avatar-selector.js @@ -15,6 +15,7 @@ import "three/examples/js/loaders/GLTFLoader"; import "./components/animation-mixer"; import "./components/audio-feedback"; import "./components/loop-animation"; +import "./components/gamma-factor"; import "./gltf-component-mappings"; import { avatars } from "./assets/avatars/avatars"; diff --git a/src/components/gamma-factor.js b/src/components/gamma-factor.js new file mode 100644 index 0000000000000000000000000000000000000000..c3ffa4fce15ff11ad58cb27b1d140f1ed2e3e6e7 --- /dev/null +++ b/src/components/gamma-factor.js @@ -0,0 +1,43 @@ +AFRAME.registerComponent("gamma-factor", { + schema: { + gammaFactor: { type: "number", default: 2.2 } + }, + + init() { + const el = this.el; + + if (!el.isScene) { + console.warn("gamma-factor component can only be applied to <a-scene>"); + } + }, + + update(prevData) { + const data = this.data; + const sceneEl = this.el; + const renderer = sceneEl.renderer; + let needsShaderUpdate = false; + + if (data.gammaFactor !== prevData.gammaFactor) { + renderer.gammaFactor = data.gammaFactor; + needsShaderUpdate = true; + } + + if (!needsShaderUpdate || sceneEl.time === 0) { + return; + } + + sceneEl.object3D.traverse(function(node) { + if (!node.isMesh) { + return; + } + + if (Array.isArray(node.material)) { + node.material.forEach(function(material) { + material.needsUpdate = true; + }); + } else { + node.material.needsUpdate = true; + } + }); + } +}); diff --git a/src/hub.html b/src/hub.html index 601c0d52b558e0cc62cda525bd60fe7210783d51..aa2b0b31e479c8f1a8e33def1721ac15a1fd64a8 100644 --- a/src/hub.html +++ b/src/hub.html @@ -25,6 +25,7 @@ <a-scene renderer="antialias: true; gammaOutput: true; sortObjects: true; physicallyCorrectLights: true;" + gamma-factor networked-scene="adapter: janus; audio: true; debug: true; connectOnLoad: false;" physics="gravity: -6; debug: false;" mute-mic="eventSrc: a-scene; toggleEvents: action_mute" diff --git a/src/hub.js b/src/hub.js index 592b30b01290f4cf2333adf4d69830eb478f4be6..68798e67164b8f700c74b803ca787014869e314c 100644 --- a/src/hub.js +++ b/src/hub.js @@ -73,6 +73,7 @@ import "./components/position-at-box-shape-border"; import "./components/remove-networked-object-button"; import "./components/destroy-at-extreme-distances"; import "./components/media-loader"; +import "./components/gamma-factor"; import ReactDOM from "react-dom"; import React from "react";