@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +73 -0
- package/README.md +3 -0
- package/dist/RenderingEngine.d.ts +296 -0
- package/dist/RenderingEngine.d.ts.map +1 -0
- package/dist/RenderingEngine.js +1079 -0
- package/dist/RenderingEngine.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.d.ts +11 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.d.ts.map +1 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.js +169 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.js.map +1 -0
- package/dist/injectors/TextureUnifierInjector.d.ts +14 -0
- package/dist/injectors/TextureUnifierInjector.d.ts.map +1 -0
- package/dist/injectors/TextureUnifierInjector.js +227 -0
- package/dist/injectors/TextureUnifierInjector.js.map +1 -0
- package/dist/interfaces/ILoader.d.ts +4 -0
- package/dist/interfaces/ILoader.d.ts.map +1 -0
- package/dist/interfaces/ILoader.js +3 -0
- package/dist/interfaces/ILoader.js.map +1 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts +307 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts.map +1 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.js +31 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.js.map +1 -0
- package/dist/interfaces/IRenderingEngine.d.ts +43 -0
- package/dist/interfaces/IRenderingEngine.d.ts.map +1 -0
- package/dist/interfaces/IRenderingEngine.js +3 -0
- package/dist/interfaces/IRenderingEngine.js.map +1 -0
- package/dist/loaders/EnvironmentMapLoader.d.ts +98 -0
- package/dist/loaders/EnvironmentMapLoader.d.ts.map +1 -0
- package/dist/loaders/EnvironmentMapLoader.js +348 -0
- package/dist/loaders/EnvironmentMapLoader.js.map +1 -0
- package/dist/loaders/GeometryLoader.d.ts +38 -0
- package/dist/loaders/GeometryLoader.d.ts.map +1 -0
- package/dist/loaders/GeometryLoader.js +505 -0
- package/dist/loaders/GeometryLoader.js.map +1 -0
- package/dist/loaders/HTMLElementAnchorLoader.d.ts +17 -0
- package/dist/loaders/HTMLElementAnchorLoader.d.ts.map +1 -0
- package/dist/loaders/HTMLElementAnchorLoader.js +84 -0
- package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -0
- package/dist/loaders/LightLoader.d.ts +19 -0
- package/dist/loaders/LightLoader.d.ts.map +1 -0
- package/dist/loaders/LightLoader.js +152 -0
- package/dist/loaders/LightLoader.js.map +1 -0
- package/dist/loaders/MaterialLoader.d.ts +99 -0
- package/dist/loaders/MaterialLoader.d.ts.map +1 -0
- package/dist/loaders/MaterialLoader.js +1175 -0
- package/dist/loaders/MaterialLoader.js.map +1 -0
- package/dist/managers/CameraManager.d.ts +20 -0
- package/dist/managers/CameraManager.d.ts.map +1 -0
- package/dist/managers/CameraManager.js +195 -0
- package/dist/managers/CameraManager.js.map +1 -0
- package/dist/managers/EnvironmentGeometryManager.d.ts +43 -0
- package/dist/managers/EnvironmentGeometryManager.d.ts.map +1 -0
- package/dist/managers/EnvironmentGeometryManager.js +210 -0
- package/dist/managers/EnvironmentGeometryManager.js.map +1 -0
- package/dist/managers/PostProcessingManager.d.ts +1014 -0
- package/dist/managers/PostProcessingManager.d.ts.map +1 -0
- package/dist/managers/PostProcessingManager.js +1013 -0
- package/dist/managers/PostProcessingManager.js.map +1 -0
- package/dist/managers/RenderingManager.d.ts +83 -0
- package/dist/managers/RenderingManager.d.ts.map +1 -0
- package/dist/managers/RenderingManager.js +567 -0
- package/dist/managers/RenderingManager.js.map +1 -0
- package/dist/managers/SceneTracingManager.d.ts +26 -0
- package/dist/managers/SceneTracingManager.d.ts.map +1 -0
- package/dist/managers/SceneTracingManager.js +122 -0
- package/dist/managers/SceneTracingManager.js.map +1 -0
- package/dist/managers/SceneTreeManager.d.ts +55 -0
- package/dist/managers/SceneTreeManager.d.ts.map +1 -0
- package/dist/managers/SceneTreeManager.js +501 -0
- package/dist/managers/SceneTreeManager.js.map +1 -0
- package/dist/managers/postprocessing/GodRaysManager.d.ts +13 -0
- package/dist/managers/postprocessing/GodRaysManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/GodRaysManager.js +64 -0
- package/dist/managers/postprocessing/GodRaysManager.js.map +1 -0
- package/dist/managers/postprocessing/OutlineManager.d.ts +15 -0
- package/dist/managers/postprocessing/OutlineManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/OutlineManager.js +67 -0
- package/dist/managers/postprocessing/OutlineManager.js.map +1 -0
- package/dist/managers/postprocessing/SSAARenderPass.d.ts +54 -0
- package/dist/managers/postprocessing/SSAARenderPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/SSAARenderPass.js +234 -0
- package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +15 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.js +67 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +47 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.js +134 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +13 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.js +78 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +2 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +23 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +15 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +25 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +2 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +102 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts +2 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js +99 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +37 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +171 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +2 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +131 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +15 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +76 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +2 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +134 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.js.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +2 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.js +12 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.js.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +2 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +42 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js.map +1 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +38 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.js +106 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.js.map +1 -0
- package/dist/managers/postprocessing/utils/CopyShader.d.ts +14 -0
- package/dist/managers/postprocessing/utils/CopyShader.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/CopyShader.js +36 -0
- package/dist/managers/postprocessing/utils/CopyShader.js.map +1 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +10 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.js +29 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.js.map +1 -0
- package/dist/managers/postprocessing/utils/NormalPass.d.ts +88 -0
- package/dist/managers/postprocessing/utils/NormalPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/NormalPass.js +157 -0
- package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -0
- package/dist/managers/postprocessing/utils/RenderPass.d.ts +115 -0
- package/dist/managers/postprocessing/utils/RenderPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/RenderPass.js +251 -0
- package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -0
- package/dist/materials/GemMaterial.d.ts +38 -0
- package/dist/materials/GemMaterial.d.ts.map +1 -0
- package/dist/materials/GemMaterial.js +253 -0
- package/dist/materials/GemMaterial.js.map +1 -0
- package/dist/materials/MeshUnlitMaterialParameters.d.ts +4 -0
- package/dist/materials/MeshUnlitMaterialParameters.d.ts.map +1 -0
- package/dist/materials/MeshUnlitMaterialParameters.js +3 -0
- package/dist/materials/MeshUnlitMaterialParameters.js.map +1 -0
- package/dist/materials/MultiPointsMaterial.d.ts +94 -0
- package/dist/materials/MultiPointsMaterial.d.ts.map +1 -0
- package/dist/materials/MultiPointsMaterial.js +567 -0
- package/dist/materials/MultiPointsMaterial.js.map +1 -0
- package/dist/materials/SpecularGlossinessMaterial.d.ts +14 -0
- package/dist/materials/SpecularGlossinessMaterial.d.ts.map +1 -0
- package/dist/materials/SpecularGlossinessMaterial.js +162 -0
- package/dist/materials/SpecularGlossinessMaterial.js.map +1 -0
- package/dist/objects/SDBone.d.ts +13 -0
- package/dist/objects/SDBone.d.ts.map +1 -0
- package/dist/objects/SDBone.js +75 -0
- package/dist/objects/SDBone.js.map +1 -0
- package/dist/objects/SDColor.d.ts +17 -0
- package/dist/objects/SDColor.d.ts.map +1 -0
- package/dist/objects/SDColor.js +49 -0
- package/dist/objects/SDColor.js.map +1 -0
- package/dist/objects/SDData.d.ts +19 -0
- package/dist/objects/SDData.d.ts.map +1 -0
- package/dist/objects/SDData.js +48 -0
- package/dist/objects/SDData.js.map +1 -0
- package/dist/objects/SDObject.d.ts +14 -0
- package/dist/objects/SDObject.d.ts.map +1 -0
- package/dist/objects/SDObject.js +81 -0
- package/dist/objects/SDObject.js.map +1 -0
- package/dist/shaders/PCSS.d.ts +3 -0
- package/dist/shaders/PCSS.d.ts.map +1 -0
- package/dist/shaders/PCSS.js +127 -0
- package/dist/shaders/PCSS.js.map +1 -0
- package/dist/shaders/gem.d.ts +3 -0
- package/dist/shaders/gem.d.ts.map +1 -0
- package/dist/shaders/gem.js +578 -0
- package/dist/shaders/gem.js.map +1 -0
- package/dist/shaders/multi_points.d.ts +3 -0
- package/dist/shaders/multi_points.d.ts.map +1 -0
- package/dist/shaders/multi_points.js +294 -0
- package/dist/shaders/multi_points.js.map +1 -0
- package/dist/styling/viewport-css.d.ts +2 -0
- package/dist/styling/viewport-css.d.ts.map +1 -0
- package/dist/styling/viewport-css.js +117 -0
- package/dist/styling/viewport-css.js.map +1 -0
- package/dist/three/font.d.ts +2365 -0
- package/dist/three/font.d.ts.map +1 -0
- package/dist/three/font.js +6 -0
- package/dist/three/font.js.map +1 -0
- package/dist/three/geometries/TextGeometry.d.ts +22 -0
- package/dist/three/geometries/TextGeometry.d.ts.map +1 -0
- package/dist/three/geometries/TextGeometry.js +45 -0
- package/dist/three/geometries/TextGeometry.js.map +1 -0
- package/dist/three/loaders/FontLoader.d.ts +15 -0
- package/dist/three/loaders/FontLoader.d.ts.map +1 -0
- package/dist/three/loaders/FontLoader.js +118 -0
- package/dist/three/loaders/FontLoader.js.map +1 -0
- package/dist/three/loaders/RGBELoader.d.ts +24 -0
- package/dist/three/loaders/RGBELoader.d.ts.map +1 -0
- package/dist/three/loaders/RGBELoader.js +299 -0
- package/dist/three/loaders/RGBELoader.js.map +1 -0
- package/dist/types/IThreejsData.d.ts +7 -0
- package/dist/types/IThreejsData.d.ts.map +1 -0
- package/dist/types/IThreejsData.js +3 -0
- package/dist/types/IThreejsData.js.map +1 -0
- package/dist/types/ThreejsData.d.ts +11 -0
- package/dist/types/ThreejsData.d.ts.map +1 -0
- package/dist/types/ThreejsData.js +42 -0
- package/dist/types/ThreejsData.js.map +1 -0
- package/package.json +65 -0
- package/src/RenderingEngine.ts +1342 -0
- package/src/index.ts +23 -0
- package/src/injectors/Tag3dGeometryCreationInjector.ts +170 -0
- package/src/injectors/TextureUnifierInjector.ts +224 -0
- package/src/interfaces/ILoader.ts +3 -0
- package/src/interfaces/IPostProcessingEffectDefinitions.ts +402 -0
- package/src/interfaces/IRenderingEngine.ts +48 -0
- package/src/loaders/EnvironmentMapLoader.ts +355 -0
- package/src/loaders/GeometryLoader.ts +565 -0
- package/src/loaders/HTMLElementAnchorLoader.ts +107 -0
- package/src/loaders/LightLoader.ts +171 -0
- package/src/loaders/MaterialLoader.ts +1418 -0
- package/src/managers/CameraManager.ts +178 -0
- package/src/managers/EnvironmentGeometryManager.ts +224 -0
- package/src/managers/PostProcessingManager.ts +1169 -0
- package/src/managers/RenderingManager.ts +657 -0
- package/src/managers/SceneTracingManager.ts +120 -0
- package/src/managers/SceneTreeManager.ts +569 -0
- package/src/managers/postprocessing/GodRaysManager.ts +52 -0
- package/src/managers/postprocessing/OutlineManager.ts +58 -0
- package/src/managers/postprocessing/SSAARenderPass.ts +339 -0
- package/src/managers/postprocessing/SelectiveBloomManager.ts +58 -0
- package/src/managers/postprocessing/ao/ao/AOEffect.ts +180 -0
- package/src/managers/postprocessing/ao/ao/AOPass.ts +128 -0
- package/src/managers/postprocessing/ao/ao/shader/ao_compose.glsl +17 -0
- package/src/managers/postprocessing/ao/ao/shader/ao_compose.ts +19 -0
- package/src/managers/postprocessing/ao/hbao/HBAOEffect.ts +41 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao.glsl +96 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao.ts +98 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.glsl +92 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.ts +95 -0
- package/src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts +245 -0
- package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.glsl +125 -0
- package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts +127 -0
- package/src/managers/postprocessing/ao/ssao/SSAOEffect.ts +106 -0
- package/src/managers/postprocessing/ao/ssao/shader/ssao.glsl +128 -0
- package/src/managers/postprocessing/ao/ssao/shader/ssao.ts +130 -0
- package/src/managers/postprocessing/ao/utils/shader/basic.glsl +6 -0
- package/src/managers/postprocessing/ao/utils/shader/basic.ts +8 -0
- package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.glsl +36 -0
- package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.ts +38 -0
- package/src/managers/postprocessing/utils/CopyMaterial.ts +130 -0
- package/src/managers/postprocessing/utils/CopyShader.ts +39 -0
- package/src/managers/postprocessing/utils/FullScreenQuad.ts +47 -0
- package/src/managers/postprocessing/utils/NormalPass.ts +222 -0
- package/src/managers/postprocessing/utils/RenderPass.ts +366 -0
- package/src/materials/GemMaterial.ts +268 -0
- package/src/materials/MeshUnlitMaterialParameters.ts +4 -0
- package/src/materials/MultiPointsMaterial.ts +646 -0
- package/src/materials/SpecularGlossinessMaterial.ts +182 -0
- package/src/objects/SDBone.ts +51 -0
- package/src/objects/SDColor.ts +54 -0
- package/src/objects/SDData.ts +44 -0
- package/src/objects/SDObject.ts +58 -0
- package/src/shaders/PCSS.ts +124 -0
- package/src/shaders/gem.ts +575 -0
- package/src/shaders/gem_frag.glsl +517 -0
- package/src/shaders/gem_vert.glsl +53 -0
- package/src/shaders/multi_points.ts +291 -0
- package/src/shaders/multi_points_frag.glsl +166 -0
- package/src/shaders/multi_points_vert.glsl +120 -0
- package/src/styling/viewport-css.ts +113 -0
- package/src/styling/viewport.css +111 -0
- package/src/three/font.ts +2 -0
- package/src/three/geometries/TextGeometry.ts +58 -0
- package/src/three/loaders/FontLoader.ts +205 -0
- package/src/three/loaders/RGBELoader.ts +496 -0
- package/src/types/IThreejsData.ts +16 -0
- package/src/types/ThreejsData.ts +43 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,1175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.adaptShaders = exports.MATERIAL_TYPE = exports.MaterialLoader = void 0;
|
|
27
|
+
const THREE = __importStar(require("three"));
|
|
28
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
29
|
+
const PCSS_1 = require("../shaders/PCSS");
|
|
30
|
+
const EnvironmentMapLoader_1 = require("./EnvironmentMapLoader");
|
|
31
|
+
const GemMaterial_1 = require("../materials/GemMaterial");
|
|
32
|
+
const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
|
|
33
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
34
|
+
const MultiPointsMaterial_1 = require("../materials/MultiPointsMaterial");
|
|
35
|
+
const SDColor_1 = require("../objects/SDColor");
|
|
36
|
+
const SpecularGlossinessMaterial_1 = require("../materials/SpecularGlossinessMaterial");
|
|
37
|
+
// #endregion Type aliases (6)
|
|
38
|
+
// #region Classes (1)
|
|
39
|
+
class MaterialLoader {
|
|
40
|
+
// #endregion Properties (16)
|
|
41
|
+
// #region Constructors (1)
|
|
42
|
+
constructor(_renderingEngine) {
|
|
43
|
+
this._renderingEngine = _renderingEngine;
|
|
44
|
+
// #region Properties (16)
|
|
45
|
+
this._converter = viewer_shared_services_1.Converter.instance;
|
|
46
|
+
this._blending = 0.0;
|
|
47
|
+
this._defaultLineMaterialData = new viewer_shared_types_1.MaterialBasicLineData({ color: '#199b9b' });
|
|
48
|
+
this._defaultMaterialData = new viewer_shared_types_1.MaterialStandardData({ color: '#199b9b', side: viewer_shared_types_1.MATERIAL_SIDE.DOUBLE, metalness: 0.0 });
|
|
49
|
+
this._defaultPointMaterialData = new viewer_shared_types_1.MaterialPointData({ color: '#199b9b' });
|
|
50
|
+
this._envMap = null;
|
|
51
|
+
this._envMapIntensity = 1;
|
|
52
|
+
this._envMapType = EnvironmentMapLoader_1.ENVIRONMENT_MAP_TYPE.NULL;
|
|
53
|
+
this._environmentMapRotationEuler = new THREE.Euler();
|
|
54
|
+
this._height = 1020;
|
|
55
|
+
this._lightSizeUV = 0.025;
|
|
56
|
+
this._materialCache = {};
|
|
57
|
+
this._maxMapCount = 0;
|
|
58
|
+
this._pointSize = 1.0;
|
|
59
|
+
this._textureEncoding = THREE.SRGBColorSpace;
|
|
60
|
+
this._threeJsTextureCache = {};
|
|
61
|
+
}
|
|
62
|
+
// #endregion Constructors (1)
|
|
63
|
+
// #region Public Getters And Setters (12)
|
|
64
|
+
get defaultLineMaterialData() {
|
|
65
|
+
return this._defaultLineMaterialData;
|
|
66
|
+
}
|
|
67
|
+
set defaultLineMaterialData(value) {
|
|
68
|
+
this._defaultLineMaterialData = value;
|
|
69
|
+
this.assignDefaultLineMaterial();
|
|
70
|
+
}
|
|
71
|
+
get defaultMaterialData() {
|
|
72
|
+
return this._defaultMaterialData;
|
|
73
|
+
}
|
|
74
|
+
set defaultMaterialData(value) {
|
|
75
|
+
this._defaultMaterialData = value;
|
|
76
|
+
this.assignDefaultMaterial();
|
|
77
|
+
}
|
|
78
|
+
get defaultPointMaterialData() {
|
|
79
|
+
return this._defaultPointMaterialData;
|
|
80
|
+
}
|
|
81
|
+
set defaultPointMaterialData(value) {
|
|
82
|
+
this._defaultPointMaterialData = value;
|
|
83
|
+
this.assignDefaultPointMaterial();
|
|
84
|
+
}
|
|
85
|
+
get maxMapCount() {
|
|
86
|
+
return this._maxMapCount;
|
|
87
|
+
}
|
|
88
|
+
set maxMapCount(value) {
|
|
89
|
+
this._maxMapCount = value;
|
|
90
|
+
}
|
|
91
|
+
get textureEncoding() {
|
|
92
|
+
return this._textureEncoding;
|
|
93
|
+
}
|
|
94
|
+
set textureEncoding(value) {
|
|
95
|
+
this._textureEncoding = value;
|
|
96
|
+
this.assignTextureEncoding();
|
|
97
|
+
}
|
|
98
|
+
get threeJsTextureCache() {
|
|
99
|
+
return this._threeJsTextureCache;
|
|
100
|
+
}
|
|
101
|
+
set threeJsTextureCache(value) {
|
|
102
|
+
this._threeJsTextureCache = value;
|
|
103
|
+
}
|
|
104
|
+
// #endregion Public Getters And Setters (12)
|
|
105
|
+
// #region Public Methods (18)
|
|
106
|
+
assignColorCorrection(value) {
|
|
107
|
+
const convertColor = (c, toggle) => {
|
|
108
|
+
if (!c)
|
|
109
|
+
return;
|
|
110
|
+
if (c instanceof SDColor_1.SDColor) {
|
|
111
|
+
c.colorCorrection(toggle);
|
|
112
|
+
return c;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const sdColor = this._renderingEngine.colorCache.find(color => color.equals(c));
|
|
116
|
+
if (sdColor) {
|
|
117
|
+
sdColor.colorCorrection(toggle);
|
|
118
|
+
return sdColor;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// we check in this case if the converted color has been stored already
|
|
122
|
+
const clone = c.clone();
|
|
123
|
+
toggle === true ? clone.convertSRGBToLinear() : clone.convertLinearToSRGB();
|
|
124
|
+
const sdColorClone = this._renderingEngine.colorCache.find(color => color.equals(clone));
|
|
125
|
+
if (sdColorClone) {
|
|
126
|
+
sdColorClone.colorCorrection(toggle);
|
|
127
|
+
return sdColorClone;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// some colors may not have been set by us, but have been set automatically
|
|
131
|
+
// in this case we expect the color to be linear either way and therefore omit a color correction
|
|
132
|
+
return c;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
for (const cacheKey in this._materialCache) {
|
|
138
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
|
+
const material = this._materialCache[cacheKey].material;
|
|
140
|
+
if (material.color)
|
|
141
|
+
material.color = convertColor(material.color, value);
|
|
142
|
+
if (material.specular)
|
|
143
|
+
material.specular = convertColor(material.specular, value);
|
|
144
|
+
if (material.emissive)
|
|
145
|
+
material.emissive = convertColor(material.emissive, value);
|
|
146
|
+
if (material.colorTransferBegin)
|
|
147
|
+
material.colorTransferBegin = convertColor(material.colorTransferBegin, value);
|
|
148
|
+
if (material.colorTransferEnd)
|
|
149
|
+
material.colorTransferEnd = convertColor(material.colorTransferEnd, value);
|
|
150
|
+
if (material.attenuationColor)
|
|
151
|
+
material.attenuationColor = convertColor(material.attenuationColor, value);
|
|
152
|
+
if (material.sheencolor)
|
|
153
|
+
material.sheencolor = convertColor(material.sheencolor, value);
|
|
154
|
+
if (material.specularColor)
|
|
155
|
+
material.specularColor = convertColor(material.specularColor, value);
|
|
156
|
+
material.needsUpdate = true;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
assignDefaultLineMaterial() {
|
|
160
|
+
for (const cacheKey in this._materialCache) {
|
|
161
|
+
if (this._materialCache[cacheKey].material instanceof THREE.LineBasicMaterial && this._materialCache[cacheKey].materialData === undefined) {
|
|
162
|
+
const material = this._materialCache[cacheKey].material;
|
|
163
|
+
if (this._materialCache[cacheKey].materialData && this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialBasicLineData)
|
|
164
|
+
continue;
|
|
165
|
+
const { properties, mapCount } = this.getMaterialProperties(this._defaultLineMaterialData, MATERIAL_TYPE.LINE, undefined);
|
|
166
|
+
this.maxMapCount = Math.max(this.maxMapCount, mapCount);
|
|
167
|
+
material.copy(new THREE.LineBasicMaterial(properties));
|
|
168
|
+
material.needsUpdate = true;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
assignDefaultMaterial() {
|
|
173
|
+
for (const cacheKey in this._materialCache) {
|
|
174
|
+
if (this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial && this._materialCache[cacheKey].materialData === undefined) {
|
|
175
|
+
const material = this._materialCache[cacheKey].material;
|
|
176
|
+
if (this._materialCache[cacheKey].materialData && this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialStandardData)
|
|
177
|
+
continue;
|
|
178
|
+
const { properties, mapCount } = this.getMaterialProperties(this._defaultMaterialData, MATERIAL_TYPE.MESH, this._materialCache[cacheKey].materialSettings);
|
|
179
|
+
this.maxMapCount = Math.max(this.maxMapCount, mapCount);
|
|
180
|
+
material.copy(new THREE.MeshPhysicalMaterial(properties));
|
|
181
|
+
material.needsUpdate = true;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
assignDefaultPointMaterial() {
|
|
186
|
+
for (const cacheKey in this._materialCache) {
|
|
187
|
+
if (this._materialCache[cacheKey].material instanceof THREE.PointsMaterial && this._materialCache[cacheKey].materialData === undefined) {
|
|
188
|
+
const material = this._materialCache[cacheKey].material;
|
|
189
|
+
if (this._materialCache[cacheKey].materialData && this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialPointData)
|
|
190
|
+
continue;
|
|
191
|
+
const { properties, mapCount } = this.getMaterialProperties(this._defaultPointMaterialData, MATERIAL_TYPE.POINT, undefined);
|
|
192
|
+
this.maxMapCount = Math.max(this.maxMapCount, mapCount);
|
|
193
|
+
material.copy(new THREE.PointsMaterial(properties));
|
|
194
|
+
material.needsUpdate = true;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
assignEnvironmentMap(e, type) {
|
|
199
|
+
this._envMap = e;
|
|
200
|
+
this._envMapType = type;
|
|
201
|
+
for (const cacheKey in this._materialCache) {
|
|
202
|
+
if ((this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshStandardMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshBasicMaterial)) {
|
|
203
|
+
const material = this._materialCache[cacheKey].material;
|
|
204
|
+
if (this._materialCache[cacheKey].materialData &&
|
|
205
|
+
(this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialStandardData ||
|
|
206
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialGemData ||
|
|
207
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData ||
|
|
208
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData) &&
|
|
209
|
+
this._materialCache[cacheKey].materialData.envMap !== undefined)
|
|
210
|
+
continue;
|
|
211
|
+
if (this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData && this._renderingEngine.environmentMapForUnlitMaterials === false)
|
|
212
|
+
return;
|
|
213
|
+
material.envMap = e;
|
|
214
|
+
material.needsUpdate = true;
|
|
215
|
+
for (const d in material.defines) {
|
|
216
|
+
if (d.startsWith('ENVMAP_TYPE_'))
|
|
217
|
+
delete material.defines[d];
|
|
218
|
+
}
|
|
219
|
+
if (material.defines)
|
|
220
|
+
material.defines['ENVMAP_TYPE_' + this._envMapType.toUpperCase()] = '';
|
|
221
|
+
this.assignEnvironmentMapRotation(this._renderingEngine.environmentMapRotation);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
assignEnvironmentMapForUnlitMaterials(toggle) {
|
|
226
|
+
for (const cacheKey in this._materialCache) {
|
|
227
|
+
if (this._materialCache[cacheKey].material instanceof THREE.MeshBasicMaterial) {
|
|
228
|
+
const material = this._materialCache[cacheKey].material;
|
|
229
|
+
if (this._materialCache[cacheKey].materialData &&
|
|
230
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData &&
|
|
231
|
+
this._materialCache[cacheKey].materialData.envMap !== undefined)
|
|
232
|
+
continue;
|
|
233
|
+
if (toggle) {
|
|
234
|
+
material.envMap = this._envMap;
|
|
235
|
+
material.needsUpdate = true;
|
|
236
|
+
for (const d in material.defines) {
|
|
237
|
+
if (d.startsWith('ENVMAP_TYPE_'))
|
|
238
|
+
delete material.defines[d];
|
|
239
|
+
}
|
|
240
|
+
if (material.defines)
|
|
241
|
+
material.defines['ENVMAP_TYPE_' + this._envMapType.toUpperCase()] = '';
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
material.envMap = null;
|
|
245
|
+
material.needsUpdate = true;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
assignEnvironmentMapIntensity(value) {
|
|
251
|
+
this._envMapIntensity = value;
|
|
252
|
+
for (const cacheKey in this._materialCache) {
|
|
253
|
+
if ((this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshStandardMaterial)) {
|
|
254
|
+
const material = this._materialCache[cacheKey].material;
|
|
255
|
+
if (this._materialCache[cacheKey].materialData &&
|
|
256
|
+
(this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialStandardData ||
|
|
257
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialGemData ||
|
|
258
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData ||
|
|
259
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData) &&
|
|
260
|
+
this._materialCache[cacheKey].materialData.envMap !== undefined)
|
|
261
|
+
continue;
|
|
262
|
+
material.envMapIntensity = value;
|
|
263
|
+
material.needsUpdate = true;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
assignEnvironmentMapRotation(value) {
|
|
268
|
+
// we switch the y and z axis to match the three.js coordinate system
|
|
269
|
+
const rotationMatrix = new THREE.Matrix4().fromArray(gl_matrix_1.mat4.fromQuat(gl_matrix_1.mat4.create(), gl_matrix_1.quat.fromValues(value[0], value[2], -value[1], value[3]))).transpose();
|
|
270
|
+
this._environmentMapRotationEuler = new THREE.Euler().setFromRotationMatrix(rotationMatrix);
|
|
271
|
+
this._renderingEngine.scene.backgroundRotation = this._environmentMapRotationEuler;
|
|
272
|
+
for (const cacheKey in this._materialCache) {
|
|
273
|
+
if ((this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshStandardMaterial)) {
|
|
274
|
+
const material = this._materialCache[cacheKey].material;
|
|
275
|
+
if (this._materialCache[cacheKey].materialData &&
|
|
276
|
+
(this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialStandardData ||
|
|
277
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialGemData ||
|
|
278
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData ||
|
|
279
|
+
this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData) &&
|
|
280
|
+
this._materialCache[cacheKey].materialData.envMap !== undefined)
|
|
281
|
+
continue;
|
|
282
|
+
material.envMapRotation = this._environmentMapRotationEuler;
|
|
283
|
+
material.needsUpdate = true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
assignPointSize(p) {
|
|
288
|
+
const height = this._renderingEngine.renderer ? this._renderingEngine.renderer.getSize(new THREE.Vector2()).y : 1080;
|
|
289
|
+
if (height === this._height && p * (this._height / 1080) === this._pointSize)
|
|
290
|
+
return;
|
|
291
|
+
this._height = height;
|
|
292
|
+
this._pointSize = p * (this._height / 1080);
|
|
293
|
+
for (const cacheKey in this._materialCache) {
|
|
294
|
+
if (this._materialCache[cacheKey].material instanceof MultiPointsMaterial_1.MultiPointsMaterial) {
|
|
295
|
+
const material = this._materialCache[cacheKey].material;
|
|
296
|
+
if (this._materialCache[cacheKey].material.userData.customPointSize_0Enabled && this._materialCache[cacheKey].material.userData.customPointSize_0Enabled === true) {
|
|
297
|
+
material.size_0 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_0;
|
|
298
|
+
material.needsUpdate = true;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
material.size_0 = this._pointSize;
|
|
302
|
+
material.needsUpdate = true;
|
|
303
|
+
}
|
|
304
|
+
if (this._materialCache[cacheKey].material.userData.customPointSize_1Enabled && this._materialCache[cacheKey].material.userData.customPointSize_1Enabled === true) {
|
|
305
|
+
material.size_1 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_1;
|
|
306
|
+
material.needsUpdate = true;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
material.size_1 = this._pointSize;
|
|
310
|
+
material.needsUpdate = true;
|
|
311
|
+
}
|
|
312
|
+
if (this._materialCache[cacheKey].material.userData.customPointSize_2Enabled && this._materialCache[cacheKey].material.userData.customPointSize_2Enabled === true) {
|
|
313
|
+
material.size_2 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_2;
|
|
314
|
+
material.needsUpdate = true;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
material.size_2 = this._pointSize;
|
|
318
|
+
material.needsUpdate = true;
|
|
319
|
+
}
|
|
320
|
+
if (this._materialCache[cacheKey].material.userData.customPointSize_3Enabled && this._materialCache[cacheKey].material.userData.customPointSize_3Enabled === true) {
|
|
321
|
+
material.size_3 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_3;
|
|
322
|
+
material.needsUpdate = true;
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
material.size_3 = this._pointSize;
|
|
326
|
+
material.needsUpdate = true;
|
|
327
|
+
}
|
|
328
|
+
if (this._materialCache[cacheKey].material.userData.customPointSize_4Enabled && this._materialCache[cacheKey].material.userData.customPointSize_4Enabled === true) {
|
|
329
|
+
material.size_4 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_4;
|
|
330
|
+
material.needsUpdate = true;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
material.size_4 = this._pointSize;
|
|
334
|
+
material.needsUpdate = true;
|
|
335
|
+
}
|
|
336
|
+
if (this._materialCache[cacheKey].material.userData.customPointSize_5Enabled && this._materialCache[cacheKey].material.userData.customPointSize_5Enabled === true) {
|
|
337
|
+
material.size_5 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_5;
|
|
338
|
+
material.needsUpdate = true;
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
material.size_5 = this._pointSize;
|
|
342
|
+
material.needsUpdate = true;
|
|
343
|
+
}
|
|
344
|
+
if (this._materialCache[cacheKey].material.userData.customPointSize_6Enabled && this._materialCache[cacheKey].material.userData.customPointSize_6Enabled === true) {
|
|
345
|
+
material.size_6 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_6;
|
|
346
|
+
material.needsUpdate = true;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
material.size_6 = this._pointSize;
|
|
350
|
+
material.needsUpdate = true;
|
|
351
|
+
}
|
|
352
|
+
if (this._materialCache[cacheKey].material.userData.customPointSize_7Enabled && this._materialCache[cacheKey].material.userData.customPointSize_7Enabled === true) {
|
|
353
|
+
material.size_7 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_7;
|
|
354
|
+
material.needsUpdate = true;
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
material.size_7 = this._pointSize;
|
|
358
|
+
material.needsUpdate = true;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
else if (this._materialCache[cacheKey].material instanceof THREE.PointsMaterial) {
|
|
362
|
+
const material = this._materialCache[cacheKey].material;
|
|
363
|
+
if (this._materialCache[cacheKey].material.userData.customPointSizeEnabled && this._materialCache[cacheKey].material.userData.customPointSizeEnabled === true) {
|
|
364
|
+
material.size = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize;
|
|
365
|
+
material.needsUpdate = true;
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
material.size = this._pointSize;
|
|
369
|
+
material.needsUpdate = true;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
cacheSize() {
|
|
375
|
+
return Object.entries(this._materialCache).length;
|
|
376
|
+
}
|
|
377
|
+
createMaterial(type, incomingData, materialData, materialSettings) {
|
|
378
|
+
const { properties, mapCount } = this.getMaterialProperties(materialData, type, materialSettings);
|
|
379
|
+
this.maxMapCount = Math.max(this.maxMapCount, mapCount);
|
|
380
|
+
let material;
|
|
381
|
+
if (type === MATERIAL_TYPE.POINT) {
|
|
382
|
+
if (materialData instanceof viewer_shared_types_1.MaterialMultiPointData) {
|
|
383
|
+
material = new MultiPointsMaterial_1.MultiPointsMaterial(properties);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
material = new THREE.PointsMaterial(properties);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
else if (type === MATERIAL_TYPE.LINE) {
|
|
390
|
+
material = new THREE.LineBasicMaterial(properties);
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
if (materialData instanceof viewer_shared_types_1.MaterialUnlitData) {
|
|
394
|
+
material = new THREE.MeshBasicMaterial(properties);
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
if (materialData instanceof viewer_shared_types_1.MaterialShadowData) {
|
|
398
|
+
material = new THREE.ShadowMaterial({ opacity: properties.opacity, color: properties.color });
|
|
399
|
+
}
|
|
400
|
+
else if (materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData) {
|
|
401
|
+
material = new SpecularGlossinessMaterial_1.SpecularGlossinessMaterial(properties);
|
|
402
|
+
}
|
|
403
|
+
else if (materialData instanceof viewer_shared_types_1.MaterialGemData) {
|
|
404
|
+
material = new GemMaterial_1.GemMaterial(properties);
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
material = new THREE.MeshPhysicalMaterial(properties);
|
|
408
|
+
}
|
|
409
|
+
const before = material.onBeforeCompile;
|
|
410
|
+
material.onBeforeCompile = (shader, renderer) => {
|
|
411
|
+
before(shader, renderer);
|
|
412
|
+
shader.uniforms.lightSizeUV = { value: this._lightSizeUV };
|
|
413
|
+
shader.uniforms.blending = { value: this._blending };
|
|
414
|
+
material.userData.shader = shader;
|
|
415
|
+
};
|
|
416
|
+
if (material instanceof SpecularGlossinessMaterial_1.SpecularGlossinessMaterial || material instanceof THREE.MeshPhysicalMaterial) {
|
|
417
|
+
material.defines['ENVMAP_TYPE_' + this._envMapType.toUpperCase()] = '';
|
|
418
|
+
if (materialSettings && materialSettings.useVertexTangents)
|
|
419
|
+
material.normalScale.y *= -1;
|
|
420
|
+
if (materialSettings && materialSettings.useVertexTangents && material instanceof THREE.MeshPhysicalMaterial)
|
|
421
|
+
material.clearcoatNormalScale.y *= -1;
|
|
422
|
+
if (materialSettings && materialSettings.useFlatShading)
|
|
423
|
+
material.flatShading = true;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
if (materialSettings && materialSettings.useVertexColors)
|
|
428
|
+
material.vertexColors = true;
|
|
429
|
+
if (materialData instanceof viewer_shared_types_1.MaterialStandardData || materialData instanceof viewer_shared_types_1.MaterialGemData || materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData || materialData instanceof viewer_shared_types_1.MaterialUnlitData) {
|
|
430
|
+
if (materialData.envMap !== undefined) {
|
|
431
|
+
const envMapInput = materialData.envMap;
|
|
432
|
+
if (envMapInput !== undefined) {
|
|
433
|
+
const envMapResult = this._renderingEngine.environmentMapLoader.loadEnvMap(envMapInput);
|
|
434
|
+
envMapResult.map.then(envMap => {
|
|
435
|
+
if (material instanceof THREE.MeshBasicMaterial && this._renderingEngine.environmentMapForUnlitMaterials === false)
|
|
436
|
+
return;
|
|
437
|
+
material.envMap = envMap;
|
|
438
|
+
const envMapType = material.envMap instanceof THREE.CubeTexture ? EnvironmentMapLoader_1.ENVIRONMENT_MAP_TYPE.LDR : EnvironmentMapLoader_1.ENVIRONMENT_MAP_TYPE.HDR;
|
|
439
|
+
for (const d in material.defines) {
|
|
440
|
+
if (d.startsWith('ENVMAP_TYPE_'))
|
|
441
|
+
delete material.defines[d];
|
|
442
|
+
}
|
|
443
|
+
if (material.defines)
|
|
444
|
+
material.defines['ENVMAP_TYPE_' + envMapType.toUpperCase()] = '';
|
|
445
|
+
material.needsUpdate = true;
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
if (materialData)
|
|
451
|
+
materialData.convertedObject[this._renderingEngine.id] = material;
|
|
452
|
+
material.needsUpdate = true;
|
|
453
|
+
if (material.userData) {
|
|
454
|
+
material.userData.SDid = incomingData.id;
|
|
455
|
+
material.userData.SDversion = incomingData.version;
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
material.userData = {
|
|
459
|
+
SDid: incomingData.id,
|
|
460
|
+
SDversion: incomingData.version
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
return material;
|
|
464
|
+
}
|
|
465
|
+
emptyMaterialCache() {
|
|
466
|
+
this._materialCache = {};
|
|
467
|
+
}
|
|
468
|
+
getMaterialProperties(materialData, type, materialSettings) {
|
|
469
|
+
const generalProperties = {};
|
|
470
|
+
let mapCount = 0;
|
|
471
|
+
// if no MaterialStandardData is provided, we return our default
|
|
472
|
+
if (!materialData) {
|
|
473
|
+
if (type === MATERIAL_TYPE.POINT) {
|
|
474
|
+
return this.getMaterialProperties(this._defaultPointMaterialData, type, materialSettings);
|
|
475
|
+
}
|
|
476
|
+
else if (type === MATERIAL_TYPE.LINE) {
|
|
477
|
+
return this.getMaterialProperties(this._defaultLineMaterialData, type, materialSettings);
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
if (materialSettings !== undefined && materialSettings.useVertexColors) {
|
|
481
|
+
const currentDefaultMaterialColor = this._defaultMaterialData.color;
|
|
482
|
+
this._defaultMaterialData.color = '#d3d3d3';
|
|
483
|
+
const properties = this.getMaterialProperties(this._defaultMaterialData, type, materialSettings);
|
|
484
|
+
this._defaultMaterialData.color = currentDefaultMaterialColor;
|
|
485
|
+
return properties;
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
return this.getMaterialProperties(this._defaultMaterialData, type, materialSettings);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* We know evaluate properties that can be applied to all materials
|
|
494
|
+
*/
|
|
495
|
+
generalProperties.alphaTest = materialData.alphaCutoff;
|
|
496
|
+
if (materialData.opacity !== undefined) {
|
|
497
|
+
generalProperties.opacity = materialData.opacity;
|
|
498
|
+
generalProperties.transparent = generalProperties.opacity < 1;
|
|
499
|
+
}
|
|
500
|
+
if (materialData.alphaMode === viewer_shared_types_1.MATERIAL_ALPHA.BLEND) {
|
|
501
|
+
generalProperties.transparent = true;
|
|
502
|
+
generalProperties.depthWrite = false;
|
|
503
|
+
}
|
|
504
|
+
else if (!generalProperties.transparent) {
|
|
505
|
+
generalProperties.transparent = false;
|
|
506
|
+
}
|
|
507
|
+
if (materialData.depthTest !== undefined) {
|
|
508
|
+
generalProperties.depthTest = materialData.depthTest;
|
|
509
|
+
}
|
|
510
|
+
if (materialData.depthWrite !== undefined) {
|
|
511
|
+
generalProperties.depthWrite = materialData.depthWrite;
|
|
512
|
+
}
|
|
513
|
+
if (materialData.transparent !== undefined) {
|
|
514
|
+
generalProperties.transparent = materialData.transparent;
|
|
515
|
+
}
|
|
516
|
+
if (materialData.color !== undefined)
|
|
517
|
+
generalProperties.color = this._renderingEngine.createThreeJsColor(materialData.color);
|
|
518
|
+
if (materialData.color === undefined && materialData.map !== undefined && materialData.map.color !== undefined)
|
|
519
|
+
generalProperties.color = this._renderingEngine.createThreeJsColor(materialData.map.color);
|
|
520
|
+
if (materialData.color === undefined && materialData.map !== undefined && materialData.map.color === undefined && !(materialSettings !== undefined && materialSettings.useVertexColors))
|
|
521
|
+
generalProperties.color = this._renderingEngine.createThreeJsColor(this._renderingEngine.defaultMaterialColor);
|
|
522
|
+
if ((materialSettings !== undefined && materialSettings.useVertexColors) && (materialData.color === this._converter.toHexColor(this._renderingEngine.defaultMaterialColor) || materialData.color + 'ff' === this._converter.toHexColor(this._renderingEngine.defaultMaterialColor) || materialData.color === this._renderingEngine.defaultMaterialColor || materialData.color === this._renderingEngine.defaultMaterialColor + 'ff' || materialData.color === undefined))
|
|
523
|
+
generalProperties.color = this._renderingEngine.createThreeJsColor('#d3d3d3');
|
|
524
|
+
if (materialData.side !== undefined)
|
|
525
|
+
generalProperties.side = materialData.side === viewer_shared_types_1.MATERIAL_SIDE.BACK ? THREE.BackSide : materialData.side === viewer_shared_types_1.MATERIAL_SIDE.FRONT ? THREE.FrontSide : THREE.DoubleSide;
|
|
526
|
+
/**
|
|
527
|
+
*
|
|
528
|
+
* First exit, lines ans points
|
|
529
|
+
*
|
|
530
|
+
*/
|
|
531
|
+
if (type === MATERIAL_TYPE.POINT) {
|
|
532
|
+
if (materialData instanceof viewer_shared_types_1.MaterialPointData) {
|
|
533
|
+
const pointMaterialProperties = generalProperties;
|
|
534
|
+
pointMaterialProperties.size = materialData.size !== undefined ? materialData.size : this._pointSize;
|
|
535
|
+
pointMaterialProperties.userData = {
|
|
536
|
+
customPointSizeEnabled: materialData.size !== undefined,
|
|
537
|
+
customPointSize: materialData.size
|
|
538
|
+
};
|
|
539
|
+
pointMaterialProperties.sizeAttenuation = materialData.sizeAttenuation !== undefined ? materialData.sizeAttenuation : true;
|
|
540
|
+
if (materialData.map !== undefined) {
|
|
541
|
+
pointMaterialProperties.map = this.createTexture(materialData.map);
|
|
542
|
+
mapCount++;
|
|
543
|
+
}
|
|
544
|
+
if (materialData.alphaMap !== undefined) {
|
|
545
|
+
pointMaterialProperties.alphaMap = this.createTexture(materialData.alphaMap);
|
|
546
|
+
pointMaterialProperties.transparent = true;
|
|
547
|
+
pointMaterialProperties.depthWrite = false;
|
|
548
|
+
mapCount++;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
else if (materialData instanceof viewer_shared_types_1.MaterialMultiPointData) {
|
|
552
|
+
const multiPointMaterialProperties = generalProperties;
|
|
553
|
+
if (materialData.materialIndexDataMap) {
|
|
554
|
+
multiPointMaterialProperties.materialIndexDataTexture = this.createTexture(materialData.materialIndexDataMap);
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
multiPointMaterialProperties.materialIndexDataTexture =
|
|
558
|
+
new THREE.DataTexture(new Uint8Array(multiPointMaterialProperties.materialIndexDataTextureSize || 1024), multiPointMaterialProperties.materialIndexDataTextureSize || 1024, 1, THREE.RedIntegerFormat, THREE.UnsignedIntType);
|
|
559
|
+
multiPointMaterialProperties.materialIndexDataTexture.internalFormat = 'R32UI';
|
|
560
|
+
}
|
|
561
|
+
multiPointMaterialProperties.size_0 = materialData.size_0 !== undefined ? materialData.size_0 : this._pointSize;
|
|
562
|
+
multiPointMaterialProperties.size_1 = materialData.size_1 !== undefined ? materialData.size_1 : this._pointSize;
|
|
563
|
+
multiPointMaterialProperties.size_2 = materialData.size_2 !== undefined ? materialData.size_2 : this._pointSize;
|
|
564
|
+
multiPointMaterialProperties.size_3 = materialData.size_3 !== undefined ? materialData.size_3 : this._pointSize;
|
|
565
|
+
multiPointMaterialProperties.size_4 = materialData.size_4 !== undefined ? materialData.size_4 : this._pointSize;
|
|
566
|
+
multiPointMaterialProperties.size_5 = materialData.size_5 !== undefined ? materialData.size_5 : this._pointSize;
|
|
567
|
+
multiPointMaterialProperties.size_6 = materialData.size_6 !== undefined ? materialData.size_6 : this._pointSize;
|
|
568
|
+
multiPointMaterialProperties.size_7 = materialData.size_7 !== undefined ? materialData.size_7 : this._pointSize;
|
|
569
|
+
multiPointMaterialProperties.userData = {
|
|
570
|
+
customPointSize_0Enabled: materialData.size_0 !== undefined,
|
|
571
|
+
customPointSize_1Enabled: materialData.size_1 !== undefined,
|
|
572
|
+
customPointSize_2Enabled: materialData.size_2 !== undefined,
|
|
573
|
+
customPointSize_3Enabled: materialData.size_3 !== undefined,
|
|
574
|
+
customPointSize_4Enabled: materialData.size_4 !== undefined,
|
|
575
|
+
customPointSize_5Enabled: materialData.size_5 !== undefined,
|
|
576
|
+
customPointSize_6Enabled: materialData.size_6 !== undefined,
|
|
577
|
+
customPointSize_7Enabled: materialData.size_7 !== undefined,
|
|
578
|
+
customPointSize_0: materialData.size_0,
|
|
579
|
+
customPointSize_1: materialData.size_1,
|
|
580
|
+
customPointSize_2: materialData.size_2,
|
|
581
|
+
customPointSize_3: materialData.size_3,
|
|
582
|
+
customPointSize_4: materialData.size_4,
|
|
583
|
+
customPointSize_5: materialData.size_5,
|
|
584
|
+
customPointSize_6: materialData.size_6,
|
|
585
|
+
customPointSize_7: materialData.size_7
|
|
586
|
+
};
|
|
587
|
+
multiPointMaterialProperties.sizeAttenuation_0 = materialData.sizeAttenuation_0 !== undefined ? materialData.sizeAttenuation_0 : false;
|
|
588
|
+
multiPointMaterialProperties.sizeAttenuation_1 = materialData.sizeAttenuation_1 !== undefined ? materialData.sizeAttenuation_1 : false;
|
|
589
|
+
multiPointMaterialProperties.sizeAttenuation_2 = materialData.sizeAttenuation_2 !== undefined ? materialData.sizeAttenuation_2 : false;
|
|
590
|
+
multiPointMaterialProperties.sizeAttenuation_3 = materialData.sizeAttenuation_3 !== undefined ? materialData.sizeAttenuation_3 : false;
|
|
591
|
+
multiPointMaterialProperties.sizeAttenuation_4 = materialData.sizeAttenuation_4 !== undefined ? materialData.sizeAttenuation_4 : false;
|
|
592
|
+
multiPointMaterialProperties.sizeAttenuation_5 = materialData.sizeAttenuation_5 !== undefined ? materialData.sizeAttenuation_5 : false;
|
|
593
|
+
multiPointMaterialProperties.sizeAttenuation_6 = materialData.sizeAttenuation_6 !== undefined ? materialData.sizeAttenuation_6 : false;
|
|
594
|
+
multiPointMaterialProperties.sizeAttenuation_7 = materialData.sizeAttenuation_7 !== undefined ? materialData.sizeAttenuation_7 : false;
|
|
595
|
+
if (materialData.map_0 !== undefined) {
|
|
596
|
+
multiPointMaterialProperties.map_0 = this.createTexture(materialData.map_0);
|
|
597
|
+
multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
|
|
598
|
+
mapCount++;
|
|
599
|
+
}
|
|
600
|
+
if (materialData.map_1 !== undefined) {
|
|
601
|
+
multiPointMaterialProperties.map_1 = this.createTexture(materialData.map_1);
|
|
602
|
+
multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
|
|
603
|
+
mapCount++;
|
|
604
|
+
}
|
|
605
|
+
if (materialData.map_2 !== undefined) {
|
|
606
|
+
multiPointMaterialProperties.map_2 = this.createTexture(materialData.map_2);
|
|
607
|
+
multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
|
|
608
|
+
mapCount++;
|
|
609
|
+
}
|
|
610
|
+
if (materialData.map_3 !== undefined) {
|
|
611
|
+
multiPointMaterialProperties.map_3 = this.createTexture(materialData.map_3);
|
|
612
|
+
multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
|
|
613
|
+
mapCount++;
|
|
614
|
+
}
|
|
615
|
+
if (materialData.map_4 !== undefined) {
|
|
616
|
+
multiPointMaterialProperties.map_4 = this.createTexture(materialData.map_4);
|
|
617
|
+
multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
|
|
618
|
+
mapCount++;
|
|
619
|
+
}
|
|
620
|
+
if (materialData.map_5 !== undefined) {
|
|
621
|
+
multiPointMaterialProperties.map_5 = this.createTexture(materialData.map_5);
|
|
622
|
+
multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
|
|
623
|
+
mapCount++;
|
|
624
|
+
}
|
|
625
|
+
if (materialData.map_6 !== undefined) {
|
|
626
|
+
multiPointMaterialProperties.map_6 = this.createTexture(materialData.map_6);
|
|
627
|
+
multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
|
|
628
|
+
mapCount++;
|
|
629
|
+
}
|
|
630
|
+
if (materialData.map_7 !== undefined) {
|
|
631
|
+
multiPointMaterialProperties.map_7 = this.createTexture(materialData.map_7);
|
|
632
|
+
multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
|
|
633
|
+
mapCount++;
|
|
634
|
+
}
|
|
635
|
+
if (materialData.alphaMap_0 !== undefined) {
|
|
636
|
+
multiPointMaterialProperties.alphaMap_0 = this.createTexture(materialData.alphaMap_0);
|
|
637
|
+
multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
|
|
638
|
+
multiPointMaterialProperties.transparent = true;
|
|
639
|
+
multiPointMaterialProperties.depthWrite = false;
|
|
640
|
+
mapCount++;
|
|
641
|
+
}
|
|
642
|
+
if (materialData.alphaMap_1 !== undefined) {
|
|
643
|
+
multiPointMaterialProperties.alphaMap_1 = this.createTexture(materialData.alphaMap_1);
|
|
644
|
+
multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
|
|
645
|
+
multiPointMaterialProperties.transparent = true;
|
|
646
|
+
multiPointMaterialProperties.depthWrite = false;
|
|
647
|
+
mapCount++;
|
|
648
|
+
}
|
|
649
|
+
if (materialData.alphaMap_2 !== undefined) {
|
|
650
|
+
multiPointMaterialProperties.alphaMap_2 = this.createTexture(materialData.alphaMap_2);
|
|
651
|
+
multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
|
|
652
|
+
multiPointMaterialProperties.transparent = true;
|
|
653
|
+
multiPointMaterialProperties.depthWrite = false;
|
|
654
|
+
mapCount++;
|
|
655
|
+
}
|
|
656
|
+
if (materialData.alphaMap_3 !== undefined) {
|
|
657
|
+
multiPointMaterialProperties.alphaMap_3 = this.createTexture(materialData.alphaMap_3);
|
|
658
|
+
multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
|
|
659
|
+
multiPointMaterialProperties.transparent = true;
|
|
660
|
+
multiPointMaterialProperties.depthWrite = false;
|
|
661
|
+
mapCount++;
|
|
662
|
+
}
|
|
663
|
+
if (materialData.alphaMap_4 !== undefined) {
|
|
664
|
+
multiPointMaterialProperties.alphaMap_4 = this.createTexture(materialData.alphaMap_4);
|
|
665
|
+
multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
|
|
666
|
+
multiPointMaterialProperties.transparent = true;
|
|
667
|
+
multiPointMaterialProperties.depthWrite = false;
|
|
668
|
+
mapCount++;
|
|
669
|
+
}
|
|
670
|
+
if (materialData.alphaMap_5 !== undefined) {
|
|
671
|
+
multiPointMaterialProperties.alphaMap_5 = this.createTexture(materialData.alphaMap_5);
|
|
672
|
+
multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
|
|
673
|
+
multiPointMaterialProperties.transparent = true;
|
|
674
|
+
multiPointMaterialProperties.depthWrite = false;
|
|
675
|
+
mapCount++;
|
|
676
|
+
}
|
|
677
|
+
if (materialData.alphaMap_6 !== undefined) {
|
|
678
|
+
multiPointMaterialProperties.alphaMap_6 = this.createTexture(materialData.alphaMap_6);
|
|
679
|
+
multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
|
|
680
|
+
multiPointMaterialProperties.transparent = true;
|
|
681
|
+
multiPointMaterialProperties.depthWrite = false;
|
|
682
|
+
mapCount++;
|
|
683
|
+
}
|
|
684
|
+
if (materialData.alphaMap_7 !== undefined) {
|
|
685
|
+
multiPointMaterialProperties.alphaMap_7 = this.createTexture(materialData.alphaMap_7);
|
|
686
|
+
multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
|
|
687
|
+
multiPointMaterialProperties.transparent = true;
|
|
688
|
+
multiPointMaterialProperties.depthWrite = false;
|
|
689
|
+
mapCount++;
|
|
690
|
+
}
|
|
691
|
+
if (materialData.color_0 !== undefined) {
|
|
692
|
+
multiPointMaterialProperties.color_0 = this._renderingEngine.createThreeJsColor(materialData.color_0);
|
|
693
|
+
}
|
|
694
|
+
if (materialData.color_1 !== undefined) {
|
|
695
|
+
multiPointMaterialProperties.color_1 = this._renderingEngine.createThreeJsColor(materialData.color_1);
|
|
696
|
+
}
|
|
697
|
+
if (materialData.color_2 !== undefined) {
|
|
698
|
+
multiPointMaterialProperties.color_2 = this._renderingEngine.createThreeJsColor(materialData.color_2);
|
|
699
|
+
}
|
|
700
|
+
if (materialData.color_3 !== undefined) {
|
|
701
|
+
multiPointMaterialProperties.color_3 = this._renderingEngine.createThreeJsColor(materialData.color_3);
|
|
702
|
+
}
|
|
703
|
+
if (materialData.color_4 !== undefined) {
|
|
704
|
+
multiPointMaterialProperties.color_4 = this._renderingEngine.createThreeJsColor(materialData.color_4);
|
|
705
|
+
}
|
|
706
|
+
if (materialData.color_5 !== undefined) {
|
|
707
|
+
multiPointMaterialProperties.color_5 = this._renderingEngine.createThreeJsColor(materialData.color_5);
|
|
708
|
+
}
|
|
709
|
+
if (materialData.color_6 !== undefined) {
|
|
710
|
+
multiPointMaterialProperties.color_6 = this._renderingEngine.createThreeJsColor(materialData.color_6);
|
|
711
|
+
}
|
|
712
|
+
if (materialData.color_7 !== undefined) {
|
|
713
|
+
multiPointMaterialProperties.color_7 = this._renderingEngine.createThreeJsColor(materialData.color_7);
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
else {
|
|
717
|
+
const pointMaterialProperties = generalProperties;
|
|
718
|
+
pointMaterialProperties.size = this._pointSize;
|
|
719
|
+
}
|
|
720
|
+
return { properties: generalProperties, mapCount };
|
|
721
|
+
}
|
|
722
|
+
else if (type === MATERIAL_TYPE.LINE) {
|
|
723
|
+
return { properties: generalProperties, mapCount };
|
|
724
|
+
}
|
|
725
|
+
/**
|
|
726
|
+
*
|
|
727
|
+
* Second exit, the shadow material
|
|
728
|
+
*
|
|
729
|
+
*/
|
|
730
|
+
if (materialData instanceof viewer_shared_types_1.MaterialShadowData)
|
|
731
|
+
return { properties: generalProperties, mapCount };
|
|
732
|
+
/**
|
|
733
|
+
* We know evaluate properties that can be applied to basic mesh materials (and the ones extending from them)
|
|
734
|
+
*/
|
|
735
|
+
const basicProperties = generalProperties;
|
|
736
|
+
if (materialData.alphaMap !== undefined) {
|
|
737
|
+
basicProperties.alphaMap = this.createTexture(materialData.alphaMap);
|
|
738
|
+
basicProperties.transparent = true;
|
|
739
|
+
basicProperties.depthWrite = false;
|
|
740
|
+
mapCount++;
|
|
741
|
+
}
|
|
742
|
+
if (materialData.aoMap !== undefined) {
|
|
743
|
+
basicProperties.aoMap = this.createTexture(materialData.aoMap);
|
|
744
|
+
mapCount++;
|
|
745
|
+
}
|
|
746
|
+
if (materialData.aoMapIntensity !== undefined) {
|
|
747
|
+
basicProperties.aoMapIntensity = materialData.aoMapIntensity;
|
|
748
|
+
}
|
|
749
|
+
if (materialData.map !== undefined) {
|
|
750
|
+
basicProperties.map = this.createTexture(materialData.map);
|
|
751
|
+
basicProperties.map.colorSpace = this._textureEncoding;
|
|
752
|
+
mapCount++;
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
*
|
|
756
|
+
* Third exit, the unlit material
|
|
757
|
+
*
|
|
758
|
+
*/
|
|
759
|
+
if (materialData instanceof viewer_shared_types_1.MaterialUnlitData)
|
|
760
|
+
return { properties: basicProperties, mapCount };
|
|
761
|
+
/**
|
|
762
|
+
* We know evaluate properties that can be applied to MeshPhysicalMaterials, SpecularGlossinessMaterials and GemMaterialParameters
|
|
763
|
+
*/
|
|
764
|
+
const standardProperties = basicProperties;
|
|
765
|
+
if (materialData.shading !== undefined)
|
|
766
|
+
standardProperties.flatShading = materialData.shading !== 'smooth';
|
|
767
|
+
if (materialData.bumpMap !== undefined) {
|
|
768
|
+
standardProperties.bumpMap = this.createTexture(materialData.bumpMap);
|
|
769
|
+
mapCount++;
|
|
770
|
+
}
|
|
771
|
+
standardProperties.bumpScale = materialData.bumpScale;
|
|
772
|
+
if (materialData.emissiveness !== undefined)
|
|
773
|
+
standardProperties.emissive = this._renderingEngine.createThreeJsColor(materialData.emissiveness);
|
|
774
|
+
if (materialData.emissiveMap !== undefined) {
|
|
775
|
+
standardProperties.emissiveMap = this.createTexture(materialData.emissiveMap);
|
|
776
|
+
standardProperties.emissiveMap.colorSpace = this._textureEncoding;
|
|
777
|
+
mapCount++;
|
|
778
|
+
}
|
|
779
|
+
standardProperties.envMap = this._envMap;
|
|
780
|
+
standardProperties.envMapIntensity = this._envMapIntensity;
|
|
781
|
+
standardProperties.envMapRotation = this._environmentMapRotationEuler;
|
|
782
|
+
if (materialData.normalMap !== undefined) {
|
|
783
|
+
standardProperties.normalMap = this.createTexture(materialData.normalMap);
|
|
784
|
+
mapCount++;
|
|
785
|
+
}
|
|
786
|
+
if (materialData.normalScale !== undefined)
|
|
787
|
+
standardProperties.normalScale = new THREE.Vector2(materialData.normalScale, -materialData.normalScale);
|
|
788
|
+
/**
|
|
789
|
+
*
|
|
790
|
+
* Fourth exit, the specular-glossiness material
|
|
791
|
+
*
|
|
792
|
+
*/
|
|
793
|
+
if (materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData) {
|
|
794
|
+
const specularGlossinessProperties = standardProperties;
|
|
795
|
+
specularGlossinessProperties.specular = this._renderingEngine.createThreeJsColor(materialData.specular);
|
|
796
|
+
specularGlossinessProperties.glossiness = materialData.glossiness;
|
|
797
|
+
if (materialData.specularGlossinessMap !== undefined) {
|
|
798
|
+
specularGlossinessProperties.specularMap2 = this.createTexture(materialData.specularGlossinessMap);
|
|
799
|
+
specularGlossinessProperties.specularMap2.colorSpace = THREE.SRGBColorSpace;
|
|
800
|
+
specularGlossinessProperties.glossinessMap = specularGlossinessProperties.specularMap2;
|
|
801
|
+
mapCount++;
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
if (materialData.specularMap !== undefined) {
|
|
805
|
+
specularGlossinessProperties.specularMap2 = this.createTexture(materialData.specularMap);
|
|
806
|
+
specularGlossinessProperties.specularMap2.colorSpace = THREE.SRGBColorSpace;
|
|
807
|
+
mapCount++;
|
|
808
|
+
}
|
|
809
|
+
if (materialData.glossinessMap !== undefined) {
|
|
810
|
+
specularGlossinessProperties.glossinessMap = this.createTexture(materialData.glossinessMap);
|
|
811
|
+
mapCount++;
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
return { properties: specularGlossinessProperties, mapCount };
|
|
815
|
+
}
|
|
816
|
+
/**
|
|
817
|
+
*
|
|
818
|
+
* Fourth exit, the gem material
|
|
819
|
+
*
|
|
820
|
+
*/
|
|
821
|
+
if (materialData instanceof viewer_shared_types_1.MaterialGemData) {
|
|
822
|
+
const gemProperties = standardProperties;
|
|
823
|
+
gemProperties.refractionIndex = materialData.refractionIndex;
|
|
824
|
+
if (materialData.impurityMap !== undefined) {
|
|
825
|
+
gemProperties.impurityMap = this.createTexture(materialData.impurityMap);
|
|
826
|
+
mapCount++;
|
|
827
|
+
}
|
|
828
|
+
gemProperties.impurityScale = materialData.impurityScale;
|
|
829
|
+
if (materialData.colorTransferBegin !== undefined) {
|
|
830
|
+
gemProperties.colorTransferBegin = this._renderingEngine.createThreeJsColor(materialData.colorTransferBegin);
|
|
831
|
+
}
|
|
832
|
+
if (materialData.colorTransferEnd !== undefined) {
|
|
833
|
+
gemProperties.colorTransferEnd = this._renderingEngine.createThreeJsColor(materialData.colorTransferEnd);
|
|
834
|
+
}
|
|
835
|
+
gemProperties.center = new THREE.Vector3(materialData.center[0], materialData.center[1], materialData.center[2]);
|
|
836
|
+
gemProperties.tracingDepth = materialData.tracingDepth;
|
|
837
|
+
gemProperties.radius = materialData.radius;
|
|
838
|
+
gemProperties.sphericalNormalMap = materialData.sphericalNormalMap;
|
|
839
|
+
gemProperties.gamma = materialData.gamma;
|
|
840
|
+
gemProperties.contrast = materialData.contrast;
|
|
841
|
+
gemProperties.brightness = materialData.brightness;
|
|
842
|
+
gemProperties.dispersion = materialData.dispersion;
|
|
843
|
+
gemProperties.tracingOpacity = materialData.tracingOpacity;
|
|
844
|
+
gemProperties.roughness = 0;
|
|
845
|
+
gemProperties.metalness = 1;
|
|
846
|
+
gemProperties.transparent = true;
|
|
847
|
+
gemProperties.opacity = 1.0;
|
|
848
|
+
gemProperties.side = THREE.FrontSide;
|
|
849
|
+
return { properties: gemProperties, mapCount };
|
|
850
|
+
}
|
|
851
|
+
/**
|
|
852
|
+
*
|
|
853
|
+
* the final exit, the MeshPhysicalMaterial
|
|
854
|
+
*
|
|
855
|
+
*/
|
|
856
|
+
if (materialData instanceof viewer_shared_types_1.MaterialStandardData) {
|
|
857
|
+
const meshPhysicalProperties = standardProperties;
|
|
858
|
+
meshPhysicalProperties.clearcoat = materialData.clearcoat;
|
|
859
|
+
if (materialData.clearcoatMap !== undefined) {
|
|
860
|
+
meshPhysicalProperties.clearcoatMap = this.createTexture(materialData.clearcoatMap);
|
|
861
|
+
mapCount++;
|
|
862
|
+
}
|
|
863
|
+
if (materialData.clearcoatNormalMap !== undefined) {
|
|
864
|
+
meshPhysicalProperties.clearcoatNormalMap = this.createTexture(materialData.clearcoatNormalMap);
|
|
865
|
+
mapCount++;
|
|
866
|
+
}
|
|
867
|
+
meshPhysicalProperties.clearcoatRoughness = materialData.clearcoatRoughness;
|
|
868
|
+
if (materialData.clearcoatRoughnessMap !== undefined) {
|
|
869
|
+
meshPhysicalProperties.clearcoatRoughnessMap = this.createTexture(materialData.clearcoatRoughnessMap);
|
|
870
|
+
mapCount++;
|
|
871
|
+
}
|
|
872
|
+
if (materialData.displacementMap !== undefined) {
|
|
873
|
+
meshPhysicalProperties.displacementMap = this.createTexture(materialData.displacementMap);
|
|
874
|
+
mapCount++;
|
|
875
|
+
}
|
|
876
|
+
meshPhysicalProperties.displacementScale = materialData.displacementScale;
|
|
877
|
+
meshPhysicalProperties.displacementBias = materialData.displacementBias;
|
|
878
|
+
meshPhysicalProperties.ior = materialData.ior;
|
|
879
|
+
meshPhysicalProperties.transmission = materialData.transmission;
|
|
880
|
+
if (materialData.transmissionMap !== undefined) {
|
|
881
|
+
meshPhysicalProperties.transmissionMap = this.createTexture(materialData.transmissionMap);
|
|
882
|
+
mapCount++;
|
|
883
|
+
}
|
|
884
|
+
meshPhysicalProperties.thickness = materialData.thickness;
|
|
885
|
+
if (materialData.thicknessMap !== undefined) {
|
|
886
|
+
meshPhysicalProperties.thicknessMap = this.createTexture(materialData.thicknessMap);
|
|
887
|
+
mapCount++;
|
|
888
|
+
}
|
|
889
|
+
meshPhysicalProperties.attenuationDistance = materialData.attenuationDistance;
|
|
890
|
+
meshPhysicalProperties.attenuationColor = this._renderingEngine.createThreeJsColor(materialData.attenuationColor);
|
|
891
|
+
meshPhysicalProperties.sheen = materialData.sheen;
|
|
892
|
+
meshPhysicalProperties.sheenColor = this._renderingEngine.createThreeJsColor(materialData.sheenColor);
|
|
893
|
+
meshPhysicalProperties.sheenRoughness = materialData.sheenRoughness;
|
|
894
|
+
if (materialData.sheenColorMap !== undefined) {
|
|
895
|
+
meshPhysicalProperties.sheenColorMap = this.createTexture(materialData.sheenColorMap);
|
|
896
|
+
mapCount++;
|
|
897
|
+
}
|
|
898
|
+
if (materialData.sheenRoughnessMap !== undefined) {
|
|
899
|
+
meshPhysicalProperties.sheenRoughnessMap = this.createTexture(materialData.sheenRoughnessMap);
|
|
900
|
+
mapCount++;
|
|
901
|
+
}
|
|
902
|
+
meshPhysicalProperties.specularIntensity = materialData.specularIntensity;
|
|
903
|
+
if (materialData.specularIntensityMap !== undefined) {
|
|
904
|
+
meshPhysicalProperties.specularIntensityMap = this.createTexture(materialData.specularIntensityMap);
|
|
905
|
+
mapCount++;
|
|
906
|
+
}
|
|
907
|
+
meshPhysicalProperties.specularColor = this._renderingEngine.createThreeJsColor(materialData.specularColor);
|
|
908
|
+
if (materialData.specularColorMap !== undefined) {
|
|
909
|
+
meshPhysicalProperties.specularColorMap = this.createTexture(materialData.specularColorMap);
|
|
910
|
+
mapCount++;
|
|
911
|
+
}
|
|
912
|
+
meshPhysicalProperties.metalness = materialData.metalness;
|
|
913
|
+
meshPhysicalProperties.roughness = materialData.roughness;
|
|
914
|
+
if (materialData.metalnessRoughnessMap !== undefined) {
|
|
915
|
+
meshPhysicalProperties.metalnessMap = this.createTexture(materialData.metalnessRoughnessMap);
|
|
916
|
+
meshPhysicalProperties.roughnessMap = meshPhysicalProperties.metalnessMap;
|
|
917
|
+
mapCount++;
|
|
918
|
+
}
|
|
919
|
+
else {
|
|
920
|
+
if (materialData.metalnessMap !== undefined) {
|
|
921
|
+
meshPhysicalProperties.metalnessMap = this.createTexture(materialData.metalnessMap);
|
|
922
|
+
mapCount++;
|
|
923
|
+
}
|
|
924
|
+
if (materialData.roughnessMap !== undefined) {
|
|
925
|
+
meshPhysicalProperties.roughnessMap = this.createTexture(materialData.roughnessMap);
|
|
926
|
+
mapCount++;
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
return { properties: meshPhysicalProperties, mapCount };
|
|
930
|
+
}
|
|
931
|
+
// we should never get here
|
|
932
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialLoader.getMaterialProperties: No proper material properties were found.');
|
|
933
|
+
}
|
|
934
|
+
init() { }
|
|
935
|
+
/**
|
|
936
|
+
* Create a material object with the provided material data.
|
|
937
|
+
*
|
|
938
|
+
* @param material the material data
|
|
939
|
+
* @returns the material object
|
|
940
|
+
*/
|
|
941
|
+
load(incomingData, materialSettings) {
|
|
942
|
+
let materialData = null;
|
|
943
|
+
if (!(incomingData instanceof viewer_shared_types_1.GeometryData))
|
|
944
|
+
materialData = incomingData;
|
|
945
|
+
// evaluate which type of material properties we are constructing
|
|
946
|
+
let type;
|
|
947
|
+
if (materialSettings && materialSettings.mode === 0) {
|
|
948
|
+
type = MATERIAL_TYPE.POINT;
|
|
949
|
+
}
|
|
950
|
+
else if (materialSettings && (materialSettings.mode === 1 || materialSettings.mode === 2 || materialSettings.mode === 3)) {
|
|
951
|
+
type = MATERIAL_TYPE.LINE;
|
|
952
|
+
}
|
|
953
|
+
else {
|
|
954
|
+
type = MATERIAL_TYPE.MESH;
|
|
955
|
+
}
|
|
956
|
+
const material = this.createMaterial(type, incomingData, materialData, materialSettings);
|
|
957
|
+
const cacheKey = this.createDataKeyFromMaterial(incomingData, type, materialSettings);
|
|
958
|
+
if (this._materialCache[cacheKey]) {
|
|
959
|
+
this._materialCache[cacheKey].material.copy(material);
|
|
960
|
+
return this._materialCache[cacheKey].material;
|
|
961
|
+
}
|
|
962
|
+
this._materialCache[cacheKey] = {
|
|
963
|
+
material,
|
|
964
|
+
materialData,
|
|
965
|
+
materialSettings
|
|
966
|
+
};
|
|
967
|
+
return material;
|
|
968
|
+
}
|
|
969
|
+
removeFromMaterialCache(id) {
|
|
970
|
+
for (const cacheKey in this._materialCache) {
|
|
971
|
+
const decodedCacheKey = (0, viewer_shared_services_1.atobCustom)(cacheKey);
|
|
972
|
+
if (decodedCacheKey.startsWith(id)) {
|
|
973
|
+
delete this._materialCache[cacheKey];
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
updateMaterials() {
|
|
978
|
+
for (const cacheKey in this._materialCache)
|
|
979
|
+
this._materialCache[cacheKey].material.needsUpdate = true;
|
|
980
|
+
}
|
|
981
|
+
updateSoftShadow(lightSizeUV, blending) {
|
|
982
|
+
this._lightSizeUV = lightSizeUV;
|
|
983
|
+
this._blending = blending;
|
|
984
|
+
for (const cacheKey in this._materialCache) {
|
|
985
|
+
if (this._materialCache[cacheKey].material.userData.shader) {
|
|
986
|
+
this._materialCache[cacheKey].material.userData.shader.uniforms.lightSizeUV.value = lightSizeUV;
|
|
987
|
+
this._materialCache[cacheKey].material.userData.shader.uniforms.blending.value = blending;
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
// #endregion Public Methods (18)
|
|
992
|
+
// #region Private Methods (4)
|
|
993
|
+
assignTextureEncoding() {
|
|
994
|
+
for (const cacheKey in this._materialCache) {
|
|
995
|
+
if (this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshStandardMaterial) {
|
|
996
|
+
const material = this._materialCache[cacheKey].material;
|
|
997
|
+
if (material.emissiveMap) {
|
|
998
|
+
material.emissiveMap.colorSpace = this._textureEncoding;
|
|
999
|
+
material.emissiveMap.needsUpdate = true;
|
|
1000
|
+
}
|
|
1001
|
+
if (material.map) {
|
|
1002
|
+
material.map.colorSpace = this._textureEncoding;
|
|
1003
|
+
material.map.needsUpdate = true;
|
|
1004
|
+
}
|
|
1005
|
+
material.needsUpdate = true;
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
createDataKeyFromMap(map) {
|
|
1010
|
+
return (0, viewer_shared_services_1.btoaCustom)(`${map.image.src}_${map.center}_${map.color}_${map.flipY}_${map.magFilter}_${map.minFilter}_${map.offset}_${map.repeat}_${map.rotation}_${map.texCoord}_${map.wrapS}_${map.wrapT}`);
|
|
1011
|
+
}
|
|
1012
|
+
createDataKeyFromMaterial(data, type, materialSettings) {
|
|
1013
|
+
return data ? (0, viewer_shared_services_1.btoaCustom)(data.id + '_' + data.version + '_' + type + '_' + JSON.stringify(materialSettings)) : (0, viewer_shared_services_1.btoaCustom)(type + '_' + JSON.stringify(materialSettings));
|
|
1014
|
+
}
|
|
1015
|
+
createTexture(map) {
|
|
1016
|
+
if (map.image instanceof ArrayBuffer)
|
|
1017
|
+
return new THREE.Texture();
|
|
1018
|
+
const key = this.createDataKeyFromMap(map);
|
|
1019
|
+
// texture in this structure are only stored until the next scene tree update call
|
|
1020
|
+
// therefore no cache management is needed, as these textures need to be created either way
|
|
1021
|
+
// the cache is cleared in updateSceneTree
|
|
1022
|
+
if (this._threeJsTextureCache[key]) {
|
|
1023
|
+
this._threeJsTextureCache[key].usage++;
|
|
1024
|
+
return this._threeJsTextureCache[key].texture;
|
|
1025
|
+
}
|
|
1026
|
+
let texture;
|
|
1027
|
+
if (map.asData === true) {
|
|
1028
|
+
texture = new THREE.DataTexture(new Uint32Array(map.data), map.data.length, 1, THREE.RedIntegerFormat, THREE.UnsignedIntType);
|
|
1029
|
+
texture.internalFormat = 'R32UI';
|
|
1030
|
+
}
|
|
1031
|
+
else {
|
|
1032
|
+
texture = new THREE.Texture(map.image);
|
|
1033
|
+
texture.format = THREE.RGBAFormat;
|
|
1034
|
+
texture.minFilter = (() => {
|
|
1035
|
+
switch (map.minFilter) {
|
|
1036
|
+
case viewer_shared_types_1.TEXTURE_FILTERING.NEAREST:
|
|
1037
|
+
return THREE.NearestFilter;
|
|
1038
|
+
case viewer_shared_types_1.TEXTURE_FILTERING.NEAREST_MIPMAP_NEAREST:
|
|
1039
|
+
return THREE.NearestMipMapNearestFilter;
|
|
1040
|
+
case viewer_shared_types_1.TEXTURE_FILTERING.LINEAR_MIPMAP_NEAREST:
|
|
1041
|
+
return THREE.LinearMipMapNearestFilter;
|
|
1042
|
+
case viewer_shared_types_1.TEXTURE_FILTERING.NEAREST_MIPMAP_LINEAR:
|
|
1043
|
+
return THREE.NearestMipMapLinearFilter;
|
|
1044
|
+
case viewer_shared_types_1.TEXTURE_FILTERING.LINEAR:
|
|
1045
|
+
return THREE.LinearFilter;
|
|
1046
|
+
case viewer_shared_types_1.TEXTURE_FILTERING.LINEAR_MIPMAP_LINEAR:
|
|
1047
|
+
default:
|
|
1048
|
+
return THREE.LinearMipMapLinearFilter;
|
|
1049
|
+
}
|
|
1050
|
+
})();
|
|
1051
|
+
texture.magFilter = (() => {
|
|
1052
|
+
switch (map.magFilter) {
|
|
1053
|
+
case viewer_shared_types_1.TEXTURE_FILTERING.NEAREST:
|
|
1054
|
+
return THREE.NearestFilter;
|
|
1055
|
+
case viewer_shared_types_1.TEXTURE_FILTERING.LINEAR:
|
|
1056
|
+
default:
|
|
1057
|
+
return THREE.LinearFilter;
|
|
1058
|
+
}
|
|
1059
|
+
})();
|
|
1060
|
+
texture.wrapS = (() => {
|
|
1061
|
+
switch (map.wrapS) {
|
|
1062
|
+
case viewer_shared_types_1.TEXTURE_WRAPPING.CLAMP_TO_EDGE:
|
|
1063
|
+
return THREE.ClampToEdgeWrapping;
|
|
1064
|
+
case viewer_shared_types_1.TEXTURE_WRAPPING.MIRRORED_REPEAT:
|
|
1065
|
+
return THREE.MirroredRepeatWrapping;
|
|
1066
|
+
case viewer_shared_types_1.TEXTURE_WRAPPING.REPEAT:
|
|
1067
|
+
default:
|
|
1068
|
+
return THREE.RepeatWrapping;
|
|
1069
|
+
}
|
|
1070
|
+
})();
|
|
1071
|
+
texture.wrapT = (() => {
|
|
1072
|
+
switch (map.wrapT) {
|
|
1073
|
+
case viewer_shared_types_1.TEXTURE_WRAPPING.CLAMP_TO_EDGE:
|
|
1074
|
+
return THREE.ClampToEdgeWrapping;
|
|
1075
|
+
case viewer_shared_types_1.TEXTURE_WRAPPING.MIRRORED_REPEAT:
|
|
1076
|
+
return THREE.MirroredRepeatWrapping;
|
|
1077
|
+
case viewer_shared_types_1.TEXTURE_WRAPPING.REPEAT:
|
|
1078
|
+
default:
|
|
1079
|
+
return THREE.RepeatWrapping;
|
|
1080
|
+
}
|
|
1081
|
+
})();
|
|
1082
|
+
texture.center = new THREE.Vector2(map.center[0], map.center[1]);
|
|
1083
|
+
texture.offset = new THREE.Vector2(map.offset[0], map.offset[1]);
|
|
1084
|
+
texture.repeat = new THREE.Vector2(map.repeat[0], map.repeat[1]);
|
|
1085
|
+
texture.rotation = map.rotation;
|
|
1086
|
+
if (map.texCoord !== undefined)
|
|
1087
|
+
texture.channel = map.texCoord;
|
|
1088
|
+
texture.flipY = map.flipY;
|
|
1089
|
+
}
|
|
1090
|
+
texture.needsUpdate = true;
|
|
1091
|
+
texture.userData.cacheKey = key;
|
|
1092
|
+
this._threeJsTextureCache[key] = {
|
|
1093
|
+
texture,
|
|
1094
|
+
usage: 1,
|
|
1095
|
+
initialized: false
|
|
1096
|
+
};
|
|
1097
|
+
return this._threeJsTextureCache[key].texture;
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
exports.MaterialLoader = MaterialLoader;
|
|
1101
|
+
// #endregion Classes (1)
|
|
1102
|
+
// #region Enums (1)
|
|
1103
|
+
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
1104
|
+
var MATERIAL_TYPE;
|
|
1105
|
+
(function (MATERIAL_TYPE) {
|
|
1106
|
+
MATERIAL_TYPE["POINT"] = "point";
|
|
1107
|
+
MATERIAL_TYPE["LINE"] = "line";
|
|
1108
|
+
MATERIAL_TYPE["MESH"] = "mesh";
|
|
1109
|
+
})(MATERIAL_TYPE = exports.MATERIAL_TYPE || (exports.MATERIAL_TYPE = {}));
|
|
1110
|
+
// #endregion Enums (1)
|
|
1111
|
+
// #region Variables (1)
|
|
1112
|
+
const adaptShaders = () => {
|
|
1113
|
+
let shader = THREE.ShaderChunk.shadowmap_pars_fragment;
|
|
1114
|
+
if (!shader.includes('PCSS implementation')) {
|
|
1115
|
+
shader = shader.replace('#ifdef USE_SHADOWMAP', '#ifdef USE_SHADOWMAP' + PCSS_1.main);
|
|
1116
|
+
shader = shader.replace(shader.substr(shader.indexOf('#if defined( SHADOWMAP_TYPE_PCF )'), shader.indexOf('#elif defined( SHADOWMAP_TYPE_PCF_SOFT )') - shader.indexOf('#if defined( SHADOWMAP_TYPE_PCF )')), '#if defined( SHADOWMAP_TYPE_PCF )\n' + PCSS_1.entry);
|
|
1117
|
+
}
|
|
1118
|
+
THREE.ShaderChunk.shadowmap_pars_fragment = shader;
|
|
1119
|
+
// here we replace in the background cube fragment shader the y component of the reflection vector with the negative y component and inverse the rotation in the case of a LDR environment map
|
|
1120
|
+
// console.log(THREE.ShaderChunk.backgroundCube_frag.includes('vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );'))
|
|
1121
|
+
THREE.ShaderChunk.backgroundCube_frag = THREE.ShaderChunk.backgroundCube_frag.replace('vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );', 'vec4 texColor = textureCube( envMap, inverse(backgroundRotation) * vec3( flipEnvMap * vWorldDirection.x, -vWorldDirection.y, vWorldDirection.z ) );');
|
|
1122
|
+
THREE.ShaderLib.backgroundCube.fragmentShader = THREE.ShaderChunk.backgroundCube_frag;
|
|
1123
|
+
// here we replace in the envmap_physical_pars_fragment the z component of the reflection vector with the negative z component in the case of a LDR environment map
|
|
1124
|
+
// console.log(THREE.ShaderChunk.envmap_physical_pars_fragment, THREE.ShaderChunk.envmap_physical_pars_fragment.includes('vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );'));
|
|
1125
|
+
THREE.ShaderChunk.envmap_physical_pars_fragment = THREE.ShaderChunk.envmap_physical_pars_fragment.replace('vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );', `
|
|
1126
|
+
#ifdef ENVMAP_TYPE_LDR
|
|
1127
|
+
vec3 rotatedReflectVec = vec3(envMapRotation * worldNormal).xzy;
|
|
1128
|
+
vec4 envMapColor = textureCubeUV( envMap, vec3(rotatedReflectVec.xy, -rotatedReflectVec.z), 1.0 );
|
|
1129
|
+
#else
|
|
1130
|
+
vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );
|
|
1131
|
+
#endif
|
|
1132
|
+
`);
|
|
1133
|
+
// here we replace in the envmap_fragment the z component of the reflection vector with the negative z component in the case of a LDR environment map
|
|
1134
|
+
// console.log(THREE.ShaderChunk.envmap_physical_pars_fragment, THREE.ShaderChunk.envmap_physical_pars_fragment.includes('vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );'));
|
|
1135
|
+
THREE.ShaderChunk.envmap_physical_pars_fragment = THREE.ShaderChunk.envmap_physical_pars_fragment.replace('vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );', `
|
|
1136
|
+
#ifdef ENVMAP_TYPE_LDR
|
|
1137
|
+
vec3 rotatedReflectVec = vec3(envMapRotation * reflectVec).xzy;
|
|
1138
|
+
vec4 envMapColor = textureCubeUV( envMap, vec3(rotatedReflectVec.xy, -rotatedReflectVec.z), roughness );
|
|
1139
|
+
#else
|
|
1140
|
+
vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );
|
|
1141
|
+
#endif
|
|
1142
|
+
`);
|
|
1143
|
+
// here we replace in the envmap_fragment the z component of the reflection vector with the negative z component in the case of a LDR environment map
|
|
1144
|
+
// console.log(THREE.ShaderChunk.envmap_fragment, THREE.ShaderChunk.envmap_fragment.includes('vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );'));
|
|
1145
|
+
THREE.ShaderChunk.envmap_fragment = THREE.ShaderChunk.envmap_fragment.replace('vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );', `
|
|
1146
|
+
#ifdef ENVMAP_TYPE_LDR
|
|
1147
|
+
vec4 envColor = textureCube( envMap, envMapRotation * vec3(flipEnvMap * reflectVec.x, reflectVec.y, -reflectVec.z ) );
|
|
1148
|
+
#else
|
|
1149
|
+
vec4 envColor = textureCube( envMap, envMapRotation * vec3( -flipEnvMap * reflectVec.x, reflectVec.zy ) );
|
|
1150
|
+
#endif
|
|
1151
|
+
`);
|
|
1152
|
+
// here we replace the z and y component of the sampleDir in the cube_uv_reflection_fragment
|
|
1153
|
+
// console.log(THREE.ShaderChunk.cube_uv_reflection_fragment.includes('vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );'))
|
|
1154
|
+
THREE.ShaderChunk.cube_uv_reflection_fragment = THREE.ShaderChunk.cube_uv_reflection_fragment.replace('vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );', 'vec3 color0 = bilinearCubeUV( envMap, sampleDir.xzy, mipInt );');
|
|
1155
|
+
// here we replace the z and y component of the sampleDir in the cube_uv_reflection_fragment
|
|
1156
|
+
// console.log(THREE.ShaderChunk.cube_uv_reflection_fragment)
|
|
1157
|
+
THREE.ShaderChunk.cube_uv_reflection_fragment = THREE.ShaderChunk.cube_uv_reflection_fragment.replace('vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );', 'vec3 color1 = bilinearCubeUV( envMap, sampleDir.xzy, mipInt + 1.0 );');
|
|
1158
|
+
// here we create a new case in the lights_fragment_maps for the case of ENVMAP_TYPE_NONE
|
|
1159
|
+
if (!THREE.ShaderChunk.lights_fragment_maps.includes('vec3 reflectVec')) {
|
|
1160
|
+
const index = THREE.ShaderChunk.lights_fragment_maps.lastIndexOf('#endif');
|
|
1161
|
+
THREE.ShaderChunk.lights_fragment_maps = THREE.ShaderChunk.lights_fragment_maps.substring(0, index) +
|
|
1162
|
+
`#else
|
|
1163
|
+
#ifdef ENVMAP_TYPE_NONE
|
|
1164
|
+
vec3 reflectVec = reflect( -geometryViewDir, geometryNormal );
|
|
1165
|
+
reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
|
|
1166
|
+
vec4 adjustedEnvReflectVector = vec4(reflectVec, 1.0);
|
|
1167
|
+
radiance += (vec3((adjustedEnvReflectVector.z + 1.0) / 2.0) + 0.5) / 1.5;
|
|
1168
|
+
#endif
|
|
1169
|
+
#endif
|
|
1170
|
+
` + THREE.ShaderChunk.lights_fragment_maps.substring(index + '#endif'.length);
|
|
1171
|
+
}
|
|
1172
|
+
};
|
|
1173
|
+
exports.adaptShaders = adaptShaders;
|
|
1174
|
+
// #endregion Variables (1)
|
|
1175
|
+
//# sourceMappingURL=MaterialLoader.js.map
|