@needle-tools/three 0.162.2 → 0.162.3
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 +21 -21
- package/README.md +86 -86
- package/build/three.cjs +53266 -53266
- package/build/three.module.js +53266 -53266
- package/examples/fonts/LICENSE +13 -13
- package/examples/fonts/README.md +11 -11
- package/examples/fonts/droid/NOTICE +190 -190
- package/examples/fonts/droid/README.txt +18 -18
- package/examples/fonts/ttf/README.md +9 -9
- package/examples/jsm/Addons.js +295 -295
- package/examples/jsm/animation/AnimationClipCreator.js +116 -116
- package/examples/jsm/animation/CCDIKSolver.js +482 -482
- package/examples/jsm/animation/MMDAnimationHelper.js +1207 -1207
- package/examples/jsm/animation/MMDPhysics.js +1406 -1406
- package/examples/jsm/cameras/CinematicCamera.js +208 -208
- package/examples/jsm/capabilities/WebGL.js +108 -108
- package/examples/jsm/capabilities/WebGPU.js +57 -57
- package/examples/jsm/controls/ArcballControls.js +3224 -3224
- package/examples/jsm/controls/DragControls.js +282 -282
- package/examples/jsm/controls/FirstPersonControls.js +325 -325
- package/examples/jsm/controls/FlyControls.js +326 -326
- package/examples/jsm/controls/MapControls.js +28 -28
- package/examples/jsm/controls/OrbitControls.js +1548 -1548
- package/examples/jsm/controls/PointerLockControls.js +162 -162
- package/examples/jsm/controls/TrackballControls.js +828 -828
- package/examples/jsm/controls/TransformControls.js +1573 -1573
- package/examples/jsm/csm/CSM.js +384 -384
- package/examples/jsm/csm/CSMFrustum.js +152 -152
- package/examples/jsm/csm/CSMHelper.js +193 -193
- package/examples/jsm/csm/CSMShader.js +295 -295
- package/examples/jsm/curves/CurveExtras.js +422 -422
- package/examples/jsm/curves/NURBSCurve.js +80 -80
- package/examples/jsm/curves/NURBSSurface.js +52 -52
- package/examples/jsm/curves/NURBSUtils.js +542 -542
- package/examples/jsm/curves/NURBSVolume.js +62 -62
- package/examples/jsm/effects/AnaglyphEffect.js +154 -154
- package/examples/jsm/effects/AsciiEffect.js +263 -263
- package/examples/jsm/effects/OutlineEffect.js +539 -539
- package/examples/jsm/effects/ParallaxBarrierEffect.js +119 -119
- package/examples/jsm/effects/PeppersGhostEffect.js +153 -153
- package/examples/jsm/effects/StereoEffect.js +55 -55
- package/examples/jsm/environments/DebugEnvironment.js +52 -52
- package/examples/jsm/environments/RoomEnvironment.js +148 -148
- package/examples/jsm/exporters/DRACOExporter.js +267 -267
- package/examples/jsm/exporters/EXRExporter.js +579 -579
- package/examples/jsm/exporters/GLTFExporter.js +3322 -3321
- package/examples/jsm/exporters/KTX2Exporter.js +292 -292
- package/examples/jsm/exporters/MMDExporter.js +217 -217
- package/examples/jsm/exporters/OBJExporter.js +284 -284
- package/examples/jsm/exporters/PLYExporter.js +528 -528
- package/examples/jsm/exporters/STLExporter.js +199 -199
- package/examples/jsm/exporters/USDZExporter.js +720 -720
- package/examples/jsm/geometries/BoxLineGeometry.js +69 -69
- package/examples/jsm/geometries/ConvexGeometry.js +53 -53
- package/examples/jsm/geometries/DecalGeometry.js +356 -356
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -174
- package/examples/jsm/geometries/ParametricGeometries.js +254 -254
- package/examples/jsm/geometries/ParametricGeometry.js +139 -139
- package/examples/jsm/geometries/RoundedBoxGeometry.js +155 -155
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -144
- package/examples/jsm/geometries/TeapotGeometry.js +704 -704
- package/examples/jsm/geometries/TextGeometry.js +57 -57
- package/examples/jsm/helpers/LightProbeHelper.js +130 -130
- package/examples/jsm/helpers/OctreeHelper.js +73 -73
- package/examples/jsm/helpers/PositionalAudioHelper.js +109 -109
- package/examples/jsm/helpers/RectAreaLightHelper.js +85 -85
- package/examples/jsm/helpers/TextureHelper.js +237 -237
- package/examples/jsm/helpers/VertexNormalsHelper.js +96 -96
- package/examples/jsm/helpers/VertexTangentsHelper.js +88 -88
- package/examples/jsm/helpers/ViewHelper.js +333 -333
- package/examples/jsm/interactive/HTMLMesh.js +572 -572
- package/examples/jsm/interactive/InteractiveGroup.js +106 -106
- package/examples/jsm/interactive/SelectionBox.js +227 -227
- package/examples/jsm/interactive/SelectionHelper.js +104 -104
- package/examples/jsm/libs/ammo.wasm.js +822 -822
- package/examples/jsm/libs/basis/README.md +46 -46
- package/examples/jsm/libs/basis/basis_transcoder.js +21 -21
- package/examples/jsm/libs/chevrotain.module.min.js +141 -141
- package/examples/jsm/libs/draco/README.md +32 -32
- package/examples/jsm/libs/draco/draco_decoder.js +34 -34
- package/examples/jsm/libs/draco/draco_encoder.js +33 -33
- package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -117
- package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +33 -33
- package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -116
- package/examples/jsm/libs/ecsy.module.js +1792 -1792
- package/examples/jsm/libs/fflate.module.js +2474 -2474
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/lil-gui.module.min.js +8 -8
- package/examples/jsm/libs/lottie_canvas.module.js +14849 -14849
- package/examples/jsm/libs/meshopt_decoder.module.js +178 -178
- package/examples/jsm/libs/mikktspace.module.js +128 -128
- package/examples/jsm/libs/mmdparser.module.js +11530 -11530
- package/examples/jsm/libs/motion-controllers.module.js +397 -397
- package/examples/jsm/libs/opentype.module.js +14506 -14506
- package/examples/jsm/libs/potpack.module.js +124 -124
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +21 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +15 -15
- package/examples/jsm/libs/stats.module.js +167 -167
- package/examples/jsm/libs/surfaceNet.js +200 -200
- package/examples/jsm/libs/tween.module.js +876 -876
- package/examples/jsm/libs/utif.module.js +1664 -1664
- package/examples/jsm/libs/zstddec.module.js +1 -1
- package/examples/jsm/lights/IESSpotLight.js +25 -25
- package/examples/jsm/lights/LightProbeGenerator.js +286 -286
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +79 -79
- package/examples/jsm/lines/Line2.js +19 -19
- package/examples/jsm/lines/LineGeometry.js +79 -79
- package/examples/jsm/lines/LineMaterial.js +619 -619
- package/examples/jsm/lines/LineSegments2.js +361 -361
- package/examples/jsm/lines/LineSegmentsGeometry.js +241 -241
- package/examples/jsm/lines/Wireframe.js +56 -56
- package/examples/jsm/lines/WireframeGeometry2.js +24 -24
- package/examples/jsm/loaders/3DMLoader.js +1764 -1764
- package/examples/jsm/loaders/3MFLoader.js +1478 -1478
- package/examples/jsm/loaders/AMFLoader.js +521 -521
- package/examples/jsm/loaders/BVHLoader.js +437 -437
- package/examples/jsm/loaders/ColladaLoader.js +4116 -4116
- package/examples/jsm/loaders/DDSLoader.js +318 -318
- package/examples/jsm/loaders/DRACOLoader.js +613 -613
- package/examples/jsm/loaders/EXRLoader.js +2309 -2309
- package/examples/jsm/loaders/FBXLoader.js +4314 -4314
- package/examples/jsm/loaders/FontLoader.js +183 -183
- package/examples/jsm/loaders/GCodeLoader.js +261 -261
- package/examples/jsm/loaders/GLTFLoader.js +4666 -4666
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +729 -729
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +115 -115
- package/examples/jsm/loaders/IESLoader.js +337 -337
- package/examples/jsm/loaders/KMZLoader.js +130 -130
- package/examples/jsm/loaders/KTX2Loader.js +932 -932
- package/examples/jsm/loaders/KTXLoader.js +176 -176
- package/examples/jsm/loaders/LDrawLoader.js +2470 -2470
- package/examples/jsm/loaders/LUT3dlLoader.js +183 -183
- package/examples/jsm/loaders/LUTCubeLoader.js +167 -167
- package/examples/jsm/loaders/LUTImageLoader.js +163 -163
- package/examples/jsm/loaders/LWOLoader.js +1052 -1052
- package/examples/jsm/loaders/LogLuvLoader.js +606 -606
- package/examples/jsm/loaders/LottieLoader.js +77 -77
- package/examples/jsm/loaders/MD2Loader.js +399 -399
- package/examples/jsm/loaders/MDDLoader.js +102 -102
- package/examples/jsm/loaders/MMDLoader.js +2276 -2276
- package/examples/jsm/loaders/MTLLoader.js +567 -567
- package/examples/jsm/loaders/MaterialXLoader.js +852 -852
- package/examples/jsm/loaders/NRRDLoader.js +686 -686
- package/examples/jsm/loaders/OBJLoader.js +905 -905
- package/examples/jsm/loaders/PCDLoader.js +467 -467
- package/examples/jsm/loaders/PDBLoader.js +232 -232
- package/examples/jsm/loaders/PLYLoader.js +771 -771
- package/examples/jsm/loaders/PVRLoader.js +251 -251
- package/examples/jsm/loaders/RGBELoader.js +450 -450
- package/examples/jsm/loaders/RGBMLoader.js +1065 -1065
- package/examples/jsm/loaders/STLLoader.js +410 -410
- package/examples/jsm/loaders/SVGLoader.js +3173 -3173
- package/examples/jsm/loaders/TDSLoader.js +1124 -1124
- package/examples/jsm/loaders/TGALoader.js +517 -517
- package/examples/jsm/loaders/TIFFLoader.js +36 -36
- package/examples/jsm/loaders/TTFLoader.js +214 -214
- package/examples/jsm/loaders/TiltLoader.js +520 -520
- package/examples/jsm/loaders/USDZLoader.js +822 -822
- package/examples/jsm/loaders/VOXLoader.js +318 -318
- package/examples/jsm/loaders/VRMLLoader.js +3537 -3537
- package/examples/jsm/loaders/VTKLoader.js +1163 -1163
- package/examples/jsm/loaders/XYZLoader.js +106 -106
- package/examples/jsm/loaders/lwo/IFFParser.js +1214 -1214
- package/examples/jsm/loaders/lwo/LWO2Parser.js +414 -414
- package/examples/jsm/loaders/lwo/LWO3Parser.js +373 -373
- package/examples/jsm/materials/MeshGouraudMaterial.js +426 -426
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +144 -144
- package/examples/jsm/math/Capsule.js +82 -82
- package/examples/jsm/math/ColorConverter.js +36 -36
- package/examples/jsm/math/ConvexHull.js +1271 -1271
- package/examples/jsm/math/ImprovedNoise.js +71 -71
- package/examples/jsm/math/Lut.js +204 -204
- package/examples/jsm/math/MeshSurfaceSampler.js +250 -250
- package/examples/jsm/math/OBB.js +423 -423
- package/examples/jsm/math/Octree.js +540 -540
- package/examples/jsm/math/SimplexNoise.js +444 -444
- package/examples/jsm/misc/ConvexObjectBreaker.js +519 -519
- package/examples/jsm/misc/GPUComputationRenderer.js +446 -446
- package/examples/jsm/misc/Gyroscope.js +66 -66
- package/examples/jsm/misc/MD2Character.js +276 -276
- package/examples/jsm/misc/MD2CharacterComplex.js +576 -576
- package/examples/jsm/misc/MorphAnimMesh.js +75 -75
- package/examples/jsm/misc/MorphBlendMesh.js +322 -322
- package/examples/jsm/misc/ProgressiveLightMap.js +324 -324
- package/examples/jsm/misc/RollerCoaster.js +566 -566
- package/examples/jsm/misc/Timer.js +128 -128
- package/examples/jsm/misc/TubePainter.js +202 -202
- package/examples/jsm/misc/Volume.js +473 -473
- package/examples/jsm/misc/VolumeSlice.js +229 -229
- package/examples/jsm/modifiers/CurveModifier.js +344 -344
- package/examples/jsm/modifiers/EdgeSplitModifier.js +279 -279
- package/examples/jsm/modifiers/SimplifyModifier.js +617 -617
- package/examples/jsm/modifiers/TessellateModifier.js +307 -307
- package/examples/jsm/nodes/Nodes.js +195 -195
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -10
- package/examples/jsm/nodes/accessors/BitangentNode.js +89 -89
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +127 -127
- package/examples/jsm/nodes/accessors/BufferNode.js +30 -30
- package/examples/jsm/nodes/accessors/CameraNode.js +119 -119
- package/examples/jsm/nodes/accessors/ClippingNode.js +144 -144
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +61 -61
- package/examples/jsm/nodes/accessors/InstanceNode.js +71 -71
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -21
- package/examples/jsm/nodes/accessors/MaterialNode.js +314 -314
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +41 -41
- package/examples/jsm/nodes/accessors/ModelNode.js +33 -33
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +39 -39
- package/examples/jsm/nodes/accessors/MorphNode.js +245 -245
- package/examples/jsm/nodes/accessors/NormalNode.js +96 -96
- package/examples/jsm/nodes/accessors/Object3DNode.js +150 -150
- package/examples/jsm/nodes/accessors/PointUVNode.js +26 -26
- package/examples/jsm/nodes/accessors/PositionNode.js +104 -104
- package/examples/jsm/nodes/accessors/ReferenceNode.js +160 -160
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +35 -35
- package/examples/jsm/nodes/accessors/SceneNode.js +52 -52
- package/examples/jsm/nodes/accessors/SkinningNode.js +124 -124
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +72 -72
- package/examples/jsm/nodes/accessors/TangentNode.js +109 -109
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -94
- package/examples/jsm/nodes/accessors/TextureNode.js +367 -367
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -35
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +82 -82
- package/examples/jsm/nodes/accessors/UVNode.js +47 -47
- package/examples/jsm/nodes/accessors/UniformsNode.js +140 -140
- package/examples/jsm/nodes/accessors/UserDataNode.js +29 -29
- package/examples/jsm/nodes/accessors/VertexColorNode.js +70 -70
- package/examples/jsm/nodes/code/CodeNode.js +84 -84
- package/examples/jsm/nodes/code/ExpressionNode.js +37 -37
- package/examples/jsm/nodes/code/FunctionCallNode.js +96 -96
- package/examples/jsm/nodes/code/FunctionNode.js +138 -138
- package/examples/jsm/nodes/code/ScriptableNode.js +488 -488
- package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -167
- package/examples/jsm/nodes/core/AssignNode.js +128 -128
- package/examples/jsm/nodes/core/AttributeNode.js +108 -108
- package/examples/jsm/nodes/core/BypassNode.js +45 -45
- package/examples/jsm/nodes/core/CacheNode.js +49 -49
- package/examples/jsm/nodes/core/ConstNode.js +32 -32
- package/examples/jsm/nodes/core/ContextNode.js +61 -61
- package/examples/jsm/nodes/core/IndexNode.js +66 -66
- package/examples/jsm/nodes/core/InputNode.js +83 -83
- package/examples/jsm/nodes/core/LightingModel.js +17 -17
- package/examples/jsm/nodes/core/Node.js +493 -493
- package/examples/jsm/nodes/core/NodeAttribute.js +15 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +1250 -1250
- package/examples/jsm/nodes/core/NodeCache.js +26 -26
- package/examples/jsm/nodes/core/NodeCode.js +15 -15
- package/examples/jsm/nodes/core/NodeFrame.js +143 -143
- package/examples/jsm/nodes/core/NodeFunction.js +22 -22
- package/examples/jsm/nodes/core/NodeFunctionInput.js +17 -17
- package/examples/jsm/nodes/core/NodeKeywords.js +80 -80
- package/examples/jsm/nodes/core/NodeParser.js +11 -11
- package/examples/jsm/nodes/core/NodeUniform.js +40 -40
- package/examples/jsm/nodes/core/NodeUtils.js +210 -210
- package/examples/jsm/nodes/core/NodeVar.js +14 -14
- package/examples/jsm/nodes/core/NodeVarying.js +17 -17
- package/examples/jsm/nodes/core/OutputStructNode.js +62 -62
- package/examples/jsm/nodes/core/ParameterNode.js +33 -33
- package/examples/jsm/nodes/core/PropertyNode.js +72 -72
- package/examples/jsm/nodes/core/StackNode.js +89 -89
- package/examples/jsm/nodes/core/StructTypeNode.js +24 -24
- package/examples/jsm/nodes/core/TempNode.js +58 -58
- package/examples/jsm/nodes/core/UniformGroup.js +13 -13
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -36
- package/examples/jsm/nodes/core/UniformNode.js +80 -80
- package/examples/jsm/nodes/core/VarNode.js +60 -60
- package/examples/jsm/nodes/core/VaryingNode.js +65 -65
- package/examples/jsm/nodes/core/constants.js +28 -28
- package/examples/jsm/nodes/display/AfterImageNode.js +148 -148
- package/examples/jsm/nodes/display/AnamorphicNode.js +148 -148
- package/examples/jsm/nodes/display/BlendModeNode.js +128 -128
- package/examples/jsm/nodes/display/BumpMapNode.js +99 -99
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +99 -99
- package/examples/jsm/nodes/display/ColorSpaceNode.js +108 -108
- package/examples/jsm/nodes/display/FrontFacingNode.js +27 -27
- package/examples/jsm/nodes/display/GaussianBlurNode.js +190 -190
- package/examples/jsm/nodes/display/NormalMapNode.js +106 -106
- package/examples/jsm/nodes/display/PassNode.js +183 -183
- package/examples/jsm/nodes/display/PosterizeNode.js +32 -32
- package/examples/jsm/nodes/display/ToneMappingNode.js +184 -184
- package/examples/jsm/nodes/display/ViewportDepthNode.js +97 -97
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +31 -31
- package/examples/jsm/nodes/display/ViewportNode.js +134 -134
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +31 -31
- package/examples/jsm/nodes/display/ViewportTextureNode.js +75 -75
- package/examples/jsm/nodes/fog/FogExp2Node.js +35 -35
- package/examples/jsm/nodes/fog/FogNode.js +38 -38
- package/examples/jsm/nodes/fog/FogRangeNode.js +34 -34
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +40 -40
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -9
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +57 -57
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +30 -30
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +23 -23
- package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -13
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +16 -16
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +21 -21
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +28 -28
- package/examples/jsm/nodes/functions/PhongLightingModel.js +67 -67
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +393 -393
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +13 -13
- package/examples/jsm/nodes/functions/material/getRoughness.js +18 -18
- package/examples/jsm/nodes/geometry/RangeNode.js +104 -104
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +85 -85
- package/examples/jsm/nodes/lighting/AONode.js +27 -27
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -27
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +241 -241
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +40 -40
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +181 -181
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +55 -55
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -39
- package/examples/jsm/nodes/lighting/LightNode.js +57 -57
- package/examples/jsm/nodes/lighting/LightUtils.js +17 -17
- package/examples/jsm/nodes/lighting/LightingContextNode.js +66 -66
- package/examples/jsm/nodes/lighting/LightingNode.js +21 -21
- package/examples/jsm/nodes/lighting/LightsNode.js +188 -188
- package/examples/jsm/nodes/lighting/PointLightNode.js +68 -68
- package/examples/jsm/nodes/lighting/SpotLightNode.js +89 -89
- package/examples/jsm/nodes/loaders/NodeLoader.js +108 -108
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +59 -59
- package/examples/jsm/nodes/loaders/NodeObjectLoader.js +70 -70
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -162
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +436 -436
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +28 -28
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -54
- package/examples/jsm/nodes/materials/Materials.js +16 -16
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +28 -28
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +34 -34
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +40 -40
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +65 -65
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +155 -155
- package/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +84 -84
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +80 -80
- package/examples/jsm/nodes/materials/NodeMaterial.js +601 -601
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +39 -39
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +90 -90
- package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -199
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +68 -68
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +130 -130
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -1430
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +29 -29
- package/examples/jsm/nodes/math/CondNode.js +121 -121
- package/examples/jsm/nodes/math/HashNode.js +34 -34
- package/examples/jsm/nodes/math/MathNode.js +391 -391
- package/examples/jsm/nodes/math/MathUtils.js +15 -15
- package/examples/jsm/nodes/math/OperatorNode.js +274 -274
- package/examples/jsm/nodes/math/TriNoise3D.js +71 -71
- package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +152 -152
- package/examples/jsm/nodes/parsers/GLSLNodeParser.js +14 -14
- package/examples/jsm/nodes/procedural/CheckerNode.js +42 -42
- package/examples/jsm/nodes/shadernode/ShaderNode.js +634 -634
- package/examples/jsm/nodes/utils/ArrayElementNode.js +35 -35
- package/examples/jsm/nodes/utils/ConvertNode.js +65 -65
- package/examples/jsm/nodes/utils/DiscardNode.js +27 -27
- package/examples/jsm/nodes/utils/EquirectUVNode.js +33 -33
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -95
- package/examples/jsm/nodes/utils/JoinNode.js +61 -61
- package/examples/jsm/nodes/utils/LoopNode.js +200 -200
- package/examples/jsm/nodes/utils/MatcapUVNode.js +30 -30
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +46 -46
- package/examples/jsm/nodes/utils/OscNode.js +81 -81
- package/examples/jsm/nodes/utils/PackingNode.js +55 -55
- package/examples/jsm/nodes/utils/ReflectorNode.js +227 -227
- package/examples/jsm/nodes/utils/RemapNode.js +42 -42
- package/examples/jsm/nodes/utils/RotateNode.js +68 -68
- package/examples/jsm/nodes/utils/RotateUVNode.js +35 -35
- package/examples/jsm/nodes/utils/SetNode.js +62 -62
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -37
- package/examples/jsm/nodes/utils/SplitNode.js +112 -112
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +41 -41
- package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -91
- package/examples/jsm/nodes/utils/TimerNode.js +94 -94
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +62 -62
- package/examples/jsm/objects/GroundedSkybox.js +50 -50
- package/examples/jsm/objects/InstancedPoints.js +21 -21
- package/examples/jsm/objects/Lensflare.js +397 -397
- package/examples/jsm/objects/MarchingCubes.js +1176 -1176
- package/examples/jsm/objects/QuadMesh.js +66 -66
- package/examples/jsm/objects/Reflector.js +264 -264
- package/examples/jsm/objects/ReflectorForSSRPass.js +352 -352
- package/examples/jsm/objects/Refractor.js +327 -327
- package/examples/jsm/objects/ShadowMesh.js +80 -80
- package/examples/jsm/objects/Sky.js +219 -219
- package/examples/jsm/objects/Water.js +333 -333
- package/examples/jsm/objects/Water2.js +361 -361
- package/examples/jsm/offscreen/jank.js +45 -45
- package/examples/jsm/offscreen/offscreen.js +8 -8
- package/examples/jsm/offscreen/scene.js +86 -86
- package/examples/jsm/physics/AmmoPhysics.js +306 -306
- package/examples/jsm/physics/RapierPhysics.js +220 -220
- package/examples/jsm/postprocessing/AfterimagePass.js +104 -104
- package/examples/jsm/postprocessing/BloomPass.js +172 -172
- package/examples/jsm/postprocessing/BokehPass.js +141 -141
- package/examples/jsm/postprocessing/ClearPass.js +46 -46
- package/examples/jsm/postprocessing/CubeTexturePass.js +85 -85
- package/examples/jsm/postprocessing/DotScreenPass.js +65 -65
- package/examples/jsm/postprocessing/EffectComposer.js +231 -231
- package/examples/jsm/postprocessing/FilmPass.js +64 -64
- package/examples/jsm/postprocessing/GTAOPass.js +582 -582
- package/examples/jsm/postprocessing/GlitchPass.js +128 -128
- package/examples/jsm/postprocessing/HalftonePass.js +79 -79
- package/examples/jsm/postprocessing/LUTPass.js +174 -174
- package/examples/jsm/postprocessing/MaskPass.js +104 -104
- package/examples/jsm/postprocessing/OutlinePass.js +654 -654
- package/examples/jsm/postprocessing/OutputPass.js +97 -97
- package/examples/jsm/postprocessing/Pass.js +95 -95
- package/examples/jsm/postprocessing/RenderPass.js +99 -99
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +235 -235
- package/examples/jsm/postprocessing/SAOPass.js +335 -335
- package/examples/jsm/postprocessing/SMAAPass.js +199 -199
- package/examples/jsm/postprocessing/SSAARenderPass.js +228 -228
- package/examples/jsm/postprocessing/SSAOPass.js +420 -420
- package/examples/jsm/postprocessing/SSRPass.js +641 -641
- package/examples/jsm/postprocessing/SavePass.js +79 -79
- package/examples/jsm/postprocessing/ShaderPass.js +77 -77
- package/examples/jsm/postprocessing/TAARenderPass.js +188 -188
- package/examples/jsm/postprocessing/TexturePass.js +67 -67
- package/examples/jsm/postprocessing/UnrealBloomPass.js +415 -415
- package/examples/jsm/renderers/CSS2DRenderer.js +215 -215
- package/examples/jsm/renderers/CSS3DRenderer.js +329 -329
- package/examples/jsm/renderers/Projector.js +918 -918
- package/examples/jsm/renderers/SVGRenderer.js +556 -556
- package/examples/jsm/renderers/common/Animation.js +47 -47
- package/examples/jsm/renderers/common/Attributes.js +75 -75
- package/examples/jsm/renderers/common/Backend.js +195 -195
- package/examples/jsm/renderers/common/Background.js +134 -134
- package/examples/jsm/renderers/common/Binding.js +25 -25
- package/examples/jsm/renderers/common/Bindings.js +173 -173
- package/examples/jsm/renderers/common/Buffer.js +38 -38
- package/examples/jsm/renderers/common/BufferUtils.js +33 -33
- package/examples/jsm/renderers/common/ChainMap.js +89 -89
- package/examples/jsm/renderers/common/ClippingContext.js +165 -165
- package/examples/jsm/renderers/common/Color4.js +37 -37
- package/examples/jsm/renderers/common/ComputePipeline.js +17 -17
- package/examples/jsm/renderers/common/Constants.js +14 -14
- package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -65
- package/examples/jsm/renderers/common/DataMap.js +54 -54
- package/examples/jsm/renderers/common/Geometries.js +215 -215
- package/examples/jsm/renderers/common/Info.js +107 -107
- package/examples/jsm/renderers/common/Pipeline.js +13 -13
- package/examples/jsm/renderers/common/Pipelines.js +322 -322
- package/examples/jsm/renderers/common/PostProcessing.js +25 -25
- package/examples/jsm/renderers/common/ProgrammableStage.js +20 -20
- package/examples/jsm/renderers/common/RenderContext.js +43 -43
- package/examples/jsm/renderers/common/RenderContexts.js +63 -63
- package/examples/jsm/renderers/common/RenderList.js +186 -186
- package/examples/jsm/renderers/common/RenderLists.js +38 -38
- package/examples/jsm/renderers/common/RenderObject.js +221 -221
- package/examples/jsm/renderers/common/RenderObjects.js +93 -93
- package/examples/jsm/renderers/common/RenderPipeline.js +16 -16
- package/examples/jsm/renderers/common/Renderer.js +1304 -1304
- package/examples/jsm/renderers/common/SampledTexture.js +83 -83
- package/examples/jsm/renderers/common/Sampler.js +18 -18
- package/examples/jsm/renderers/common/StorageBuffer.js +17 -17
- package/examples/jsm/renderers/common/StorageBufferAttribute.js +17 -17
- package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -17
- package/examples/jsm/renderers/common/StorageTexture.js +20 -20
- package/examples/jsm/renderers/common/Textures.js +344 -344
- package/examples/jsm/renderers/common/Uniform.js +140 -140
- package/examples/jsm/renderers/common/UniformBuffer.js +15 -15
- package/examples/jsm/renderers/common/UniformsGroup.js +301 -301
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +44 -44
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +49 -49
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +15 -15
- package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -23
- package/examples/jsm/renderers/common/nodes/NodeUniform.js +135 -135
- package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -23
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -44
- package/examples/jsm/renderers/common/nodes/Nodes.js +496 -496
- package/examples/jsm/renderers/webgl/WebGLBackend.js +1382 -1382
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +804 -804
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +258 -258
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -36
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +11 -11
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +36 -36
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +738 -738
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +694 -694
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +285 -285
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +320 -320
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +26 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +794 -794
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +51 -51
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +1322 -1322
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +53 -53
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +1078 -1078
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +104 -104
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeParser.js +14 -14
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +293 -293
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +244 -244
- package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +324 -324
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +591 -591
- package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -285
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +1040 -1040
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +93 -93
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +89 -89
- package/examples/jsm/shaders/AfterimageShader.js +58 -58
- package/examples/jsm/shaders/BasicShader.js +29 -29
- package/examples/jsm/shaders/BleachBypassShader.js +62 -62
- package/examples/jsm/shaders/BlendShader.js +49 -49
- package/examples/jsm/shaders/BokehShader.js +145 -145
- package/examples/jsm/shaders/BokehShader2.js +397 -397
- package/examples/jsm/shaders/BrightnessContrastShader.js +56 -56
- package/examples/jsm/shaders/ColorCorrectionShader.js +52 -52
- package/examples/jsm/shaders/ColorifyShader.js +51 -51
- package/examples/jsm/shaders/ConvolutionShader.js +103 -103
- package/examples/jsm/shaders/CopyShader.js +45 -45
- package/examples/jsm/shaders/DOFMipMapShader.js +56 -56
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +171 -171
- package/examples/jsm/shaders/DigitalGlitch.js +101 -101
- package/examples/jsm/shaders/DotScreenShader.js +70 -70
- package/examples/jsm/shaders/ExposureShader.js +44 -44
- package/examples/jsm/shaders/FXAAShader.js +288 -288
- package/examples/jsm/shaders/FilmShader.js +59 -59
- package/examples/jsm/shaders/FocusShader.js +89 -89
- package/examples/jsm/shaders/FreiChenShader.js +96 -96
- package/examples/jsm/shaders/GTAOShader.js +424 -424
- package/examples/jsm/shaders/GammaCorrectionShader.js +43 -43
- package/examples/jsm/shaders/GodRaysShader.js +321 -321
- package/examples/jsm/shaders/HalftoneShader.js +312 -312
- package/examples/jsm/shaders/HorizontalBlurShader.js +59 -59
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +63 -63
- package/examples/jsm/shaders/HueSaturationShader.js +67 -67
- package/examples/jsm/shaders/KaleidoShader.js +58 -58
- package/examples/jsm/shaders/LuminosityHighPassShader.js +66 -66
- package/examples/jsm/shaders/LuminosityShader.js +48 -48
- package/examples/jsm/shaders/MMDToonShader.js +134 -134
- package/examples/jsm/shaders/MirrorShader.js +56 -56
- package/examples/jsm/shaders/NormalMapShader.js +55 -55
- package/examples/jsm/shaders/OutputShader.js +85 -85
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -226
- package/examples/jsm/shaders/RGBShiftShader.js +54 -54
- package/examples/jsm/shaders/SAOShader.js +179 -179
- package/examples/jsm/shaders/SMAAShader.js +466 -466
- package/examples/jsm/shaders/SSAOShader.js +300 -300
- package/examples/jsm/shaders/SSRShader.js +370 -370
- package/examples/jsm/shaders/SepiaShader.js +52 -52
- package/examples/jsm/shaders/SobelOperatorShader.js +92 -92
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +90 -90
- package/examples/jsm/shaders/TechnicolorShader.js +45 -45
- package/examples/jsm/shaders/ToonShader.js +326 -326
- package/examples/jsm/shaders/TriangleBlurShader.js +74 -74
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +47 -47
- package/examples/jsm/shaders/VelocityShader.js +130 -130
- package/examples/jsm/shaders/VerticalBlurShader.js +59 -59
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +63 -63
- package/examples/jsm/shaders/VignetteShader.js +51 -51
- package/examples/jsm/shaders/VolumeShader.js +289 -289
- package/examples/jsm/shaders/WaterRefractionShader.js +95 -95
- package/examples/jsm/textures/FlakesTexture.js +40 -40
- package/examples/jsm/transpiler/AST.js +270 -270
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -941
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -49
- package/examples/jsm/transpiler/TSLEncoder.js +715 -715
- package/examples/jsm/transpiler/Transpiler.js +18 -18
- package/examples/jsm/utils/BufferGeometryUtils.js +1371 -1371
- package/examples/jsm/utils/CameraUtils.js +73 -73
- package/examples/jsm/utils/GPUStatsPanel.js +128 -128
- package/examples/jsm/utils/GeometryCompressionUtils.js +639 -639
- package/examples/jsm/utils/GeometryUtils.js +221 -221
- package/examples/jsm/utils/LDrawUtils.js +202 -202
- package/examples/jsm/utils/PackedPhongMaterial.js +178 -178
- package/examples/jsm/utils/SceneUtils.js +254 -254
- package/examples/jsm/utils/ShadowMapViewer.js +210 -210
- package/examples/jsm/utils/SkeletonUtils.js +424 -424
- package/examples/jsm/utils/SortUtils.js +160 -160
- package/examples/jsm/utils/TextureUtils.js +98 -98
- package/examples/jsm/utils/UVsDebug.js +165 -165
- package/examples/jsm/utils/WorkerPool.js +102 -102
- package/examples/jsm/webxr/ARButton.js +232 -232
- package/examples/jsm/webxr/OculusHandModel.js +109 -109
- package/examples/jsm/webxr/OculusHandPointerModel.js +416 -416
- package/examples/jsm/webxr/Text2D.js +38 -38
- package/examples/jsm/webxr/VRButton.js +233 -233
- package/examples/jsm/webxr/XRButton.js +223 -223
- package/examples/jsm/webxr/XRControllerModelFactory.js +323 -323
- package/examples/jsm/webxr/XREstimatedLight.js +223 -223
- package/examples/jsm/webxr/XRHandMeshModel.js +116 -116
- package/examples/jsm/webxr/XRHandModelFactory.js +105 -105
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +105 -105
- package/examples/jsm/webxr/XRPlanes.js +100 -100
- package/package.json +129 -129
- package/src/Three.Legacy.js +21 -21
- package/src/Three.js +183 -183
- package/src/animation/AnimationAction.js +700 -700
- package/src/animation/AnimationClip.js +473 -473
- package/src/animation/AnimationMixer.js +770 -770
- package/src/animation/AnimationObjectGroup.js +387 -387
- package/src/animation/AnimationUtils.js +356 -356
- package/src/animation/KeyframeTrack.js +462 -462
- package/src/animation/PropertyBinding.js +719 -719
- package/src/animation/PropertyMixer.js +318 -318
- package/src/animation/tracks/BooleanKeyframeTrack.js +19 -19
- package/src/animation/tracks/ColorKeyframeTrack.js +15 -15
- package/src/animation/tracks/NumberKeyframeTrack.js +12 -12
- package/src/animation/tracks/QuaternionKeyframeTrack.js +23 -23
- package/src/animation/tracks/StringKeyframeTrack.js +15 -15
- package/src/animation/tracks/VectorKeyframeTrack.js +12 -12
- package/src/audio/Audio.js +400 -400
- package/src/audio/AudioAnalyser.js +40 -40
- package/src/audio/AudioContext.js +25 -25
- package/src/audio/AudioListener.js +140 -140
- package/src/audio/PositionalAudio.js +146 -146
- package/src/cameras/ArrayCamera.js +17 -17
- package/src/cameras/Camera.js +69 -69
- package/src/cameras/CubeCamera.js +173 -173
- package/src/cameras/OrthographicCamera.js +136 -136
- package/src/cameras/PerspectiveCamera.js +268 -268
- package/src/cameras/StereoCamera.js +100 -100
- package/src/constants.js +217 -217
- package/src/core/BufferAttribute.js +639 -639
- package/src/core/BufferGeometry.js +1073 -1073
- package/src/core/Clock.js +74 -74
- package/src/core/EventDispatcher.js +87 -87
- package/src/core/GLBufferAttribute.js +60 -60
- package/src/core/InstancedBufferAttribute.js +39 -39
- package/src/core/InstancedBufferGeometry.js +40 -40
- package/src/core/InstancedInterleavedBuffer.js +48 -48
- package/src/core/InterleavedBuffer.js +166 -166
- package/src/core/InterleavedBufferAttribute.js +351 -351
- package/src/core/Layers.js +60 -60
- package/src/core/Object3D.js +1019 -1019
- package/src/core/Raycaster.js +124 -124
- package/src/core/RenderTarget.js +154 -154
- package/src/core/Uniform.js +17 -17
- package/src/core/UniformsGroup.js +98 -98
- package/src/extras/DataUtils.js +176 -176
- package/src/extras/Earcut.js +789 -789
- package/src/extras/ImageUtils.js +129 -129
- package/src/extras/PMREMGenerator.js +912 -912
- package/src/extras/ShapeUtils.js +92 -92
- package/src/extras/core/Curve.js +416 -416
- package/src/extras/core/CurvePath.js +255 -255
- package/src/extras/core/Interpolations.js +79 -79
- package/src/extras/core/Path.js +196 -196
- package/src/extras/core/Shape.js +102 -102
- package/src/extras/core/ShapePath.js +291 -291
- package/src/extras/curves/ArcCurve.js +17 -17
- package/src/extras/curves/CatmullRomCurve3.js +255 -255
- package/src/extras/curves/CubicBezierCurve.js +78 -78
- package/src/extras/curves/CubicBezierCurve3.js +79 -79
- package/src/extras/curves/Curves.js +10 -10
- package/src/extras/curves/EllipseCurve.js +156 -156
- package/src/extras/curves/LineCurve.js +92 -92
- package/src/extras/curves/LineCurve3.js +92 -92
- package/src/extras/curves/QuadraticBezierCurve.js +74 -74
- package/src/extras/curves/QuadraticBezierCurve3.js +75 -75
- package/src/extras/curves/SplineCurve.js +97 -97
- package/src/geometries/BoxGeometry.js +180 -180
- package/src/geometries/CapsuleGeometry.js +33 -33
- package/src/geometries/CircleGeometry.js +101 -101
- package/src/geometries/ConeGeometry.js +31 -31
- package/src/geometries/CylinderGeometry.js +286 -286
- package/src/geometries/DodecahedronGeometry.js +66 -66
- package/src/geometries/EdgesGeometry.js +152 -152
- package/src/geometries/ExtrudeGeometry.js +814 -814
- package/src/geometries/Geometries.js +21 -21
- package/src/geometries/IcosahedronGeometry.js +42 -42
- package/src/geometries/LatheGeometry.js +189 -189
- package/src/geometries/OctahedronGeometry.js +37 -37
- package/src/geometries/PlaneGeometry.js +98 -98
- package/src/geometries/PolyhedronGeometry.js +319 -319
- package/src/geometries/RingGeometry.js +128 -128
- package/src/geometries/ShapeGeometry.js +195 -195
- package/src/geometries/SphereGeometry.js +137 -137
- package/src/geometries/TetrahedronGeometry.js +34 -34
- package/src/geometries/TorusGeometry.js +120 -120
- package/src/geometries/TorusKnotGeometry.js +167 -167
- package/src/geometries/TubeGeometry.js +203 -203
- package/src/geometries/WireframeGeometry.js +147 -147
- package/src/helpers/ArrowHelper.js +114 -114
- package/src/helpers/AxesHelper.js +68 -68
- package/src/helpers/Box3Helper.js +55 -55
- package/src/helpers/BoxHelper.js +113 -113
- package/src/helpers/CameraHelper.js +269 -269
- package/src/helpers/DirectionalLightHelper.js +93 -93
- package/src/helpers/GridHelper.js +56 -56
- package/src/helpers/HemisphereLightHelper.js +88 -88
- package/src/helpers/PlaneHelper.js +63 -63
- package/src/helpers/PointLightHelper.js +92 -92
- package/src/helpers/PolarGridHelper.js +96 -96
- package/src/helpers/SkeletonHelper.js +128 -128
- package/src/helpers/SpotLightHelper.js +111 -111
- package/src/lights/AmbientLight.js +17 -17
- package/src/lights/DirectionalLight.js +43 -43
- package/src/lights/DirectionalLightShadow.js +16 -16
- package/src/lights/HemisphereLight.js +34 -34
- package/src/lights/Light.js +58 -58
- package/src/lights/LightProbe.js +47 -47
- package/src/lights/LightShadow.js +147 -147
- package/src/lights/PointLight.js +57 -57
- package/src/lights/PointLightShadow.js +96 -96
- package/src/lights/RectAreaLight.js +56 -56
- package/src/lights/SpotLight.js +71 -71
- package/src/lights/SpotLightShadow.js +50 -50
- package/src/loaders/AnimationLoader.js +66 -66
- package/src/loaders/AudioLoader.js +66 -66
- package/src/loaders/BufferGeometryLoader.js +217 -217
- package/src/loaders/Cache.js +42 -42
- package/src/loaders/CompressedTextureLoader.js +134 -134
- package/src/loaders/CubeTextureLoader.js +58 -58
- package/src/loaders/DataTextureLoader.js +131 -131
- package/src/loaders/FileLoader.js +284 -284
- package/src/loaders/ImageBitmapLoader.js +123 -123
- package/src/loaders/ImageLoader.js +91 -91
- package/src/loaders/Loader.js +72 -72
- package/src/loaders/LoaderUtils.js +75 -75
- package/src/loaders/LoadingManager.js +142 -142
- package/src/loaders/MaterialLoader.js +373 -373
- package/src/loaders/ObjectLoader.js +1149 -1149
- package/src/loaders/TextureLoader.js +41 -41
- package/src/materials/LineBasicMaterial.js +49 -49
- package/src/materials/LineDashedMaterial.js +35 -35
- package/src/materials/Material.js +523 -523
- package/src/materials/Materials.js +39 -39
- package/src/materials/MeshBasicMaterial.js +84 -84
- package/src/materials/MeshDepthMaterial.js +54 -54
- package/src/materials/MeshDistanceMaterial.js +43 -43
- package/src/materials/MeshLambertMaterial.js +119 -119
- package/src/materials/MeshMatcapMaterial.js +81 -81
- package/src/materials/MeshNormalMaterial.js +61 -61
- package/src/materials/MeshPhongMaterial.js +123 -123
- package/src/materials/MeshPhysicalMaterial.js +224 -224
- package/src/materials/MeshStandardMaterial.js +127 -127
- package/src/materials/MeshToonMaterial.js +102 -102
- package/src/materials/PointsMaterial.js +50 -50
- package/src/materials/RawShaderMaterial.js +17 -17
- package/src/materials/ShaderMaterial.js +189 -189
- package/src/materials/ShadowMaterial.js +37 -37
- package/src/materials/SpriteMaterial.js +54 -54
- package/src/math/Box2.js +204 -204
- package/src/math/Box3.js +534 -534
- package/src/math/Color.js +623 -623
- package/src/math/ColorManagement.js +139 -139
- package/src/math/Cylindrical.js +61 -61
- package/src/math/Euler.js +315 -315
- package/src/math/Frustum.js +186 -186
- package/src/math/Interpolant.js +241 -241
- package/src/math/Line3.js +115 -115
- package/src/math/MathUtils.js +363 -363
- package/src/math/Matrix3.js +388 -388
- package/src/math/Matrix4.js +915 -915
- package/src/math/Plane.js +205 -205
- package/src/math/Quaternion.js +686 -686
- package/src/math/Ray.js +493 -493
- package/src/math/Sphere.js +245 -245
- package/src/math/Spherical.js +86 -86
- package/src/math/SphericalHarmonics3.js +243 -243
- package/src/math/Triangle.js +311 -311
- package/src/math/Vector2.js +480 -480
- package/src/math/Vector3.js +724 -724
- package/src/math/Vector4.js +644 -644
- package/src/math/interpolants/CubicInterpolant.js +150 -150
- package/src/math/interpolants/DiscreteInterpolant.js +26 -26
- package/src/math/interpolants/LinearInterpolant.js +38 -38
- package/src/math/interpolants/QuaternionLinearInterpolant.js +39 -39
- package/src/objects/BatchedMesh.js +1020 -1020
- package/src/objects/Bone.js +17 -17
- package/src/objects/Group.js +17 -17
- package/src/objects/InstancedMesh.js +267 -267
- package/src/objects/LOD.js +214 -214
- package/src/objects/Line.js +222 -222
- package/src/objects/LineLoop.js +17 -17
- package/src/objects/LineSegments.js +55 -55
- package/src/objects/Mesh.js +428 -428
- package/src/objects/Points.js +166 -166
- package/src/objects/Skeleton.js +277 -277
- package/src/objects/SkinnedMesh.js +257 -257
- package/src/objects/Sprite.js +181 -181
- package/src/renderers/WebGL1Renderer.js +7 -7
- package/src/renderers/WebGL3DRenderTarget.js +22 -22
- package/src/renderers/WebGLArrayRenderTarget.js +22 -22
- package/src/renderers/WebGLCubeRenderTarget.js +146 -146
- package/src/renderers/WebGLRenderTarget.js +15 -15
- package/src/renderers/WebGLRenderer.js +2615 -2615
- package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -68
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +26 -26
- package/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -19
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +33 -33
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +43 -43
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +10 -10
- package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +21 -21
- package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +78 -78
- package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +23 -23
- package/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +44 -44
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +147 -147
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +186 -186
- package/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +63 -63
- package/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +20 -20
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +15 -15
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +62 -62
- package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +21 -21
- package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +22 -22
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +69 -69
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +37 -37
- package/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js +17 -17
- package/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js +19 -19
- package/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +27 -27
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +120 -120
- package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +10 -10
- package/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +202 -202
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +13 -13
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +40 -40
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -28
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +228 -228
- package/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +32 -32
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +151 -151
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +562 -562
- package/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +26 -26
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +22 -22
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +21 -21
- package/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +27 -27
- package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +27 -27
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -24
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +27 -27
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +47 -47
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +36 -36
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +76 -76
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +33 -33
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +43 -43
- package/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +68 -68
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +19 -19
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +314 -314
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +68 -68
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +68 -68
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +66 -66
- package/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js +10 -10
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +25 -25
- package/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js +15 -15
- package/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js +20 -20
- package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +192 -192
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +36 -36
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +201 -201
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +119 -119
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +145 -145
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +122 -122
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +21 -21
- package/src/renderers/shaders/ShaderChunk.js +272 -272
- package/src/renderers/shaders/ShaderLib/background.glsl.js +40 -40
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +63 -63
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +36 -36
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +97 -97
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +78 -78
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +35 -35
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +76 -76
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +116 -116
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +125 -125
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +112 -112
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +87 -87
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +127 -127
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +225 -225
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +119 -119
- package/src/renderers/shaders/ShaderLib/points.glsl.js +87 -87
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +58 -58
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +81 -81
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +53 -53
- package/src/renderers/shaders/ShaderLib.js +360 -360
- package/src/renderers/shaders/UniformsLib.js +231 -231
- package/src/renderers/shaders/UniformsUtils.js +104 -104
- package/src/renderers/webgl/WebGLAnimation.js +53 -53
- package/src/renderers/webgl/WebGLAttributes.js +229 -229
- package/src/renderers/webgl/WebGLBackground.js +257 -257
- package/src/renderers/webgl/WebGLBindingStates.js +631 -631
- package/src/renderers/webgl/WebGLBufferRenderer.js +92 -92
- package/src/renderers/webgl/WebGLCapabilities.js +120 -120
- package/src/renderers/webgl/WebGLClipping.js +171 -171
- package/src/renderers/webgl/WebGLCubeMaps.js +99 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +132 -132
- package/src/renderers/webgl/WebGLExtensions.js +97 -97
- package/src/renderers/webgl/WebGLGeometries.js +211 -211
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +102 -102
- package/src/renderers/webgl/WebGLInfo.js +71 -71
- package/src/renderers/webgl/WebGLLights.js +590 -590
- package/src/renderers/webgl/WebGLMaterials.js +590 -590
- package/src/renderers/webgl/WebGLMorphtargets.js +307 -307
- package/src/renderers/webgl/WebGLObjects.js +92 -92
- package/src/renderers/webgl/WebGLProgram.js +1120 -1120
- package/src/renderers/webgl/WebGLPrograms.js +664 -664
- package/src/renderers/webgl/WebGLProperties.js +48 -48
- package/src/renderers/webgl/WebGLRenderLists.js +238 -238
- package/src/renderers/webgl/WebGLRenderStates.js +107 -107
- package/src/renderers/webgl/WebGLShader.js +12 -12
- package/src/renderers/webgl/WebGLShaderCache.js +124 -124
- package/src/renderers/webgl/WebGLShadowMap.js +424 -424
- package/src/renderers/webgl/WebGLState.js +1318 -1318
- package/src/renderers/webgl/WebGLTextures.js +2213 -2213
- package/src/renderers/webgl/WebGLUniforms.js +1156 -1156
- package/src/renderers/webgl/WebGLUniformsGroups.js +392 -392
- package/src/renderers/webgl/WebGLUtils.js +283 -283
- package/src/renderers/webxr/WebXRController.js +343 -343
- package/src/renderers/webxr/WebXRDepthSensing.js +105 -105
- package/src/renderers/webxr/WebXRManager.js +824 -824
- package/src/scenes/Fog.js +38 -38
- package/src/scenes/FogExp2.js +35 -35
- package/src/scenes/Scene.js +71 -71
- package/src/textures/CanvasTexture.js +17 -17
- package/src/textures/CompressedArrayTexture.js +18 -18
- package/src/textures/CompressedCubeTexture.js +19 -19
- package/src/textures/CompressedTexture.js +28 -28
- package/src/textures/CubeTexture.js +33 -33
- package/src/textures/Data3DTexture.js +35 -35
- package/src/textures/DataArrayTexture.js +27 -27
- package/src/textures/DataTexture.js +22 -22
- package/src/textures/DepthTexture.js +58 -58
- package/src/textures/FramebufferTexture.js +23 -23
- package/src/textures/Source.js +128 -128
- package/src/textures/Texture.js +310 -310
- package/src/textures/VideoTexture.js +55 -55
- package/src/utils.js +91 -91
|
@@ -1,912 +1,912 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CubeReflectionMapping,
|
|
3
|
-
CubeRefractionMapping,
|
|
4
|
-
CubeUVReflectionMapping,
|
|
5
|
-
LinearFilter,
|
|
6
|
-
NoToneMapping,
|
|
7
|
-
NoBlending,
|
|
8
|
-
RGBAFormat,
|
|
9
|
-
HalfFloatType,
|
|
10
|
-
BackSide,
|
|
11
|
-
LinearSRGBColorSpace
|
|
12
|
-
} from '../constants.js';
|
|
13
|
-
|
|
14
|
-
import { BufferAttribute } from '../core/BufferAttribute.js';
|
|
15
|
-
import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
16
|
-
import { Mesh } from '../objects/Mesh.js';
|
|
17
|
-
import { OrthographicCamera } from '../cameras/OrthographicCamera.js';
|
|
18
|
-
import { PerspectiveCamera } from '../cameras/PerspectiveCamera.js';
|
|
19
|
-
import { ShaderMaterial } from '../materials/ShaderMaterial.js';
|
|
20
|
-
import { Vector3 } from '../math/Vector3.js';
|
|
21
|
-
import { Color } from '../math/Color.js';
|
|
22
|
-
import { WebGLRenderTarget } from '../renderers/WebGLRenderTarget.js';
|
|
23
|
-
import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';
|
|
24
|
-
import { BoxGeometry } from '../geometries/BoxGeometry.js';
|
|
25
|
-
|
|
26
|
-
const LOD_MIN = 4;
|
|
27
|
-
|
|
28
|
-
// The standard deviations (radians) associated with the extra mips. These are
|
|
29
|
-
// chosen to approximate a Trowbridge-Reitz distribution function times the
|
|
30
|
-
// geometric shadowing function. These sigma values squared must match the
|
|
31
|
-
// variance #defines in cube_uv_reflection_fragment.glsl.js.
|
|
32
|
-
const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
|
|
33
|
-
|
|
34
|
-
// The maximum length of the blur for loop. Smaller sigmas will use fewer
|
|
35
|
-
// samples and exit early, but not recompile the shader.
|
|
36
|
-
const MAX_SAMPLES = 20;
|
|
37
|
-
|
|
38
|
-
const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
|
|
39
|
-
const _clearColor = /*@__PURE__*/ new Color();
|
|
40
|
-
let _oldTarget = null;
|
|
41
|
-
let _oldActiveCubeFace = 0;
|
|
42
|
-
let _oldActiveMipmapLevel = 0;
|
|
43
|
-
|
|
44
|
-
// Golden Ratio
|
|
45
|
-
const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
|
|
46
|
-
const INV_PHI = 1 / PHI;
|
|
47
|
-
|
|
48
|
-
// Vertices of a dodecahedron (except the opposites, which represent the
|
|
49
|
-
// same axis), used as axis directions evenly spread on a sphere.
|
|
50
|
-
const _axisDirections = [
|
|
51
|
-
/*@__PURE__*/ new Vector3( 1, 1, 1 ),
|
|
52
|
-
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
53
|
-
/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
|
|
54
|
-
/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
|
|
55
|
-
/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
|
|
56
|
-
/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
|
|
57
|
-
/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
|
|
58
|
-
/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
|
|
59
|
-
/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
|
|
60
|
-
/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
64
|
-
* (PMREM) from a cubeMap environment texture. This allows different levels of
|
|
65
|
-
* blur to be quickly accessed based on material roughness. It is packed into a
|
|
66
|
-
* special CubeUV format that allows us to perform custom interpolation so that
|
|
67
|
-
* we can support nonlinear formats such as RGBE. Unlike a traditional mipmap
|
|
68
|
-
* chain, it only goes down to the LOD_MIN level (above), and then creates extra
|
|
69
|
-
* even more filtered 'mips' at the same LOD_MIN resolution, associated with
|
|
70
|
-
* higher roughness levels. In this way we maintain resolution to smoothly
|
|
71
|
-
* interpolate diffuse lighting while limiting sampling computation.
|
|
72
|
-
*
|
|
73
|
-
* Paper: Fast, Accurate Image-Based Lighting
|
|
74
|
-
* https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view
|
|
75
|
-
*/
|
|
76
|
-
|
|
77
|
-
class PMREMGenerator {
|
|
78
|
-
|
|
79
|
-
constructor( renderer ) {
|
|
80
|
-
|
|
81
|
-
this._renderer = renderer;
|
|
82
|
-
this._pingPongRenderTarget = null;
|
|
83
|
-
|
|
84
|
-
this._lodMax = 0;
|
|
85
|
-
this._cubeSize = 0;
|
|
86
|
-
this._lodPlanes = [];
|
|
87
|
-
this._sizeLods = [];
|
|
88
|
-
this._sigmas = [];
|
|
89
|
-
|
|
90
|
-
this._blurMaterial = null;
|
|
91
|
-
this._cubemapMaterial = null;
|
|
92
|
-
this._equirectMaterial = null;
|
|
93
|
-
|
|
94
|
-
this._compileMaterial( this._blurMaterial );
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
100
|
-
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
101
|
-
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
102
|
-
* and far planes ensure the scene is rendered in its entirety (the cubeCamera
|
|
103
|
-
* is placed at the origin).
|
|
104
|
-
*/
|
|
105
|
-
fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
|
|
106
|
-
|
|
107
|
-
_oldTarget = this._renderer.getRenderTarget();
|
|
108
|
-
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
109
|
-
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
110
|
-
|
|
111
|
-
this._setSize( 256 );
|
|
112
|
-
|
|
113
|
-
const cubeUVRenderTarget = this._allocateTargets();
|
|
114
|
-
cubeUVRenderTarget.depthBuffer = true;
|
|
115
|
-
|
|
116
|
-
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );
|
|
117
|
-
|
|
118
|
-
if ( sigma > 0 ) {
|
|
119
|
-
|
|
120
|
-
this._blur( cubeUVRenderTarget, 0, 0, sigma );
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
this._applyPMREM( cubeUVRenderTarget );
|
|
125
|
-
this._cleanup( cubeUVRenderTarget );
|
|
126
|
-
|
|
127
|
-
return cubeUVRenderTarget;
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
133
|
-
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
134
|
-
* as this matches best with the 256 x 256 cubemap output.
|
|
135
|
-
* The smallest supported equirectangular image size is 64 x 32.
|
|
136
|
-
*/
|
|
137
|
-
fromEquirectangular( equirectangular, renderTarget = null ) {
|
|
138
|
-
|
|
139
|
-
return this._fromTexture( equirectangular, renderTarget );
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
145
|
-
* or HDR. The ideal input cube size is 256 x 256,
|
|
146
|
-
* as this matches best with the 256 x 256 cubemap output.
|
|
147
|
-
* The smallest supported cube size is 16 x 16.
|
|
148
|
-
*/
|
|
149
|
-
fromCubemap( cubemap, renderTarget = null ) {
|
|
150
|
-
|
|
151
|
-
return this._fromTexture( cubemap, renderTarget );
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
|
|
157
|
-
* your texture's network fetch for increased concurrency.
|
|
158
|
-
*/
|
|
159
|
-
compileCubemapShader() {
|
|
160
|
-
|
|
161
|
-
if ( this._cubemapMaterial === null ) {
|
|
162
|
-
|
|
163
|
-
this._cubemapMaterial = _getCubemapMaterial();
|
|
164
|
-
this._compileMaterial( this._cubemapMaterial );
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
|
|
172
|
-
* your texture's network fetch for increased concurrency.
|
|
173
|
-
*/
|
|
174
|
-
compileEquirectangularShader() {
|
|
175
|
-
|
|
176
|
-
if ( this._equirectMaterial === null ) {
|
|
177
|
-
|
|
178
|
-
this._equirectMaterial = _getEquirectMaterial();
|
|
179
|
-
this._compileMaterial( this._equirectMaterial );
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,
|
|
187
|
-
* so you should not need more than one PMREMGenerator object. If you do, calling dispose() on
|
|
188
|
-
* one of them will cause any others to also become unusable.
|
|
189
|
-
*/
|
|
190
|
-
dispose() {
|
|
191
|
-
|
|
192
|
-
this._dispose();
|
|
193
|
-
|
|
194
|
-
if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();
|
|
195
|
-
if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// private interface
|
|
200
|
-
|
|
201
|
-
_setSize( cubeSize ) {
|
|
202
|
-
|
|
203
|
-
this._lodMax = Math.floor( Math.log2( cubeSize ) );
|
|
204
|
-
this._cubeSize = Math.pow( 2, this._lodMax );
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
_dispose() {
|
|
209
|
-
|
|
210
|
-
if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
|
|
211
|
-
|
|
212
|
-
if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
|
|
213
|
-
|
|
214
|
-
for ( let i = 0; i < this._lodPlanes.length; i ++ ) {
|
|
215
|
-
|
|
216
|
-
this._lodPlanes[ i ].dispose();
|
|
217
|
-
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
_cleanup( outputTarget ) {
|
|
223
|
-
|
|
224
|
-
this._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );
|
|
225
|
-
outputTarget.scissorTest = false;
|
|
226
|
-
_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
_fromTexture( texture, renderTarget ) {
|
|
231
|
-
|
|
232
|
-
if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
|
|
233
|
-
|
|
234
|
-
this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
|
|
235
|
-
|
|
236
|
-
} else { // Equirectangular
|
|
237
|
-
|
|
238
|
-
this._setSize( texture.image.width / 4 );
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
_oldTarget = this._renderer.getRenderTarget();
|
|
243
|
-
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
244
|
-
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
245
|
-
|
|
246
|
-
const cubeUVRenderTarget = renderTarget || this._allocateTargets();
|
|
247
|
-
this._textureToCubeUV( texture, cubeUVRenderTarget );
|
|
248
|
-
this._applyPMREM( cubeUVRenderTarget );
|
|
249
|
-
this._cleanup( cubeUVRenderTarget );
|
|
250
|
-
|
|
251
|
-
return cubeUVRenderTarget;
|
|
252
|
-
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
_allocateTargets() {
|
|
256
|
-
|
|
257
|
-
const width = 3 * Math.max( this._cubeSize, 16 * 7 );
|
|
258
|
-
const height = 4 * this._cubeSize;
|
|
259
|
-
|
|
260
|
-
const params = {
|
|
261
|
-
magFilter: LinearFilter,
|
|
262
|
-
minFilter: LinearFilter,
|
|
263
|
-
generateMipmaps: false,
|
|
264
|
-
type: HalfFloatType,
|
|
265
|
-
format: RGBAFormat,
|
|
266
|
-
colorSpace: LinearSRGBColorSpace,
|
|
267
|
-
depthBuffer: false
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
const cubeUVRenderTarget = _createRenderTarget( width, height, params );
|
|
271
|
-
|
|
272
|
-
// NEEDLE: This was added to work around a caching bug in PMREMGenerator that lead to incorrect results.
|
|
273
|
-
const { _lodMax } = this;
|
|
274
|
-
( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
275
|
-
|
|
276
|
-
if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {
|
|
277
|
-
|
|
278
|
-
if ( this._pingPongRenderTarget !== null ) {
|
|
279
|
-
|
|
280
|
-
this._dispose();
|
|
281
|
-
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
this._pingPongRenderTarget = _createRenderTarget( width, height, params );
|
|
285
|
-
|
|
286
|
-
const { _lodMax } = this;
|
|
287
|
-
( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
288
|
-
|
|
289
|
-
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return cubeUVRenderTarget;
|
|
294
|
-
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
_compileMaterial( material ) {
|
|
298
|
-
|
|
299
|
-
const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
300
|
-
this._renderer.compile( tmpMesh, _flatCamera );
|
|
301
|
-
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
|
|
305
|
-
|
|
306
|
-
const fov = 90;
|
|
307
|
-
const aspect = 1;
|
|
308
|
-
const cubeCamera = new PerspectiveCamera( fov, aspect, near, far );
|
|
309
|
-
const upSign = [ 1, - 1, 1, 1, 1, 1 ];
|
|
310
|
-
const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];
|
|
311
|
-
const renderer = this._renderer;
|
|
312
|
-
|
|
313
|
-
const originalAutoClear = renderer.autoClear;
|
|
314
|
-
const toneMapping = renderer.toneMapping;
|
|
315
|
-
renderer.getClearColor( _clearColor );
|
|
316
|
-
|
|
317
|
-
renderer.toneMapping = NoToneMapping;
|
|
318
|
-
renderer.autoClear = false;
|
|
319
|
-
|
|
320
|
-
const backgroundMaterial = new MeshBasicMaterial( {
|
|
321
|
-
name: 'PMREM.Background',
|
|
322
|
-
side: BackSide,
|
|
323
|
-
depthWrite: false,
|
|
324
|
-
depthTest: false,
|
|
325
|
-
} );
|
|
326
|
-
|
|
327
|
-
const backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );
|
|
328
|
-
|
|
329
|
-
let useSolidColor = false;
|
|
330
|
-
const background = scene.background;
|
|
331
|
-
|
|
332
|
-
if ( background ) {
|
|
333
|
-
|
|
334
|
-
if ( background.isColor ) {
|
|
335
|
-
|
|
336
|
-
backgroundMaterial.color.copy( background );
|
|
337
|
-
scene.background = null;
|
|
338
|
-
useSolidColor = true;
|
|
339
|
-
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
} else {
|
|
343
|
-
|
|
344
|
-
backgroundMaterial.color.copy( _clearColor );
|
|
345
|
-
useSolidColor = true;
|
|
346
|
-
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
for ( let i = 0; i < 6; i ++ ) {
|
|
350
|
-
|
|
351
|
-
const col = i % 3;
|
|
352
|
-
|
|
353
|
-
if ( col === 0 ) {
|
|
354
|
-
|
|
355
|
-
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
356
|
-
cubeCamera.lookAt( forwardSign[ i ], 0, 0 );
|
|
357
|
-
|
|
358
|
-
} else if ( col === 1 ) {
|
|
359
|
-
|
|
360
|
-
cubeCamera.up.set( 0, 0, upSign[ i ] );
|
|
361
|
-
cubeCamera.lookAt( 0, forwardSign[ i ], 0 );
|
|
362
|
-
|
|
363
|
-
} else {
|
|
364
|
-
|
|
365
|
-
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
366
|
-
cubeCamera.lookAt( 0, 0, forwardSign[ i ] );
|
|
367
|
-
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
const size = this._cubeSize;
|
|
371
|
-
|
|
372
|
-
_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );
|
|
373
|
-
|
|
374
|
-
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
375
|
-
|
|
376
|
-
if ( useSolidColor ) {
|
|
377
|
-
|
|
378
|
-
renderer.render( backgroundBox, cubeCamera );
|
|
379
|
-
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
renderer.render( scene, cubeCamera );
|
|
383
|
-
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
backgroundBox.geometry.dispose();
|
|
387
|
-
backgroundBox.material.dispose();
|
|
388
|
-
|
|
389
|
-
renderer.toneMapping = toneMapping;
|
|
390
|
-
renderer.autoClear = originalAutoClear;
|
|
391
|
-
scene.background = background;
|
|
392
|
-
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
_textureToCubeUV( texture, cubeUVRenderTarget ) {
|
|
396
|
-
|
|
397
|
-
const renderer = this._renderer;
|
|
398
|
-
|
|
399
|
-
const isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );
|
|
400
|
-
|
|
401
|
-
if ( isCubeTexture ) {
|
|
402
|
-
|
|
403
|
-
if ( this._cubemapMaterial === null ) {
|
|
404
|
-
|
|
405
|
-
this._cubemapMaterial = _getCubemapMaterial();
|
|
406
|
-
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
this._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
410
|
-
|
|
411
|
-
} else {
|
|
412
|
-
|
|
413
|
-
if ( this._equirectMaterial === null ) {
|
|
414
|
-
|
|
415
|
-
this._equirectMaterial = _getEquirectMaterial();
|
|
416
|
-
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;
|
|
422
|
-
const mesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
423
|
-
|
|
424
|
-
const uniforms = material.uniforms;
|
|
425
|
-
|
|
426
|
-
uniforms[ 'envMap' ].value = texture;
|
|
427
|
-
|
|
428
|
-
const size = this._cubeSize;
|
|
429
|
-
|
|
430
|
-
_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );
|
|
431
|
-
|
|
432
|
-
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
433
|
-
renderer.render( mesh, _flatCamera );
|
|
434
|
-
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
_applyPMREM( cubeUVRenderTarget ) {
|
|
438
|
-
|
|
439
|
-
const renderer = this._renderer;
|
|
440
|
-
const autoClear = renderer.autoClear;
|
|
441
|
-
renderer.autoClear = false;
|
|
442
|
-
|
|
443
|
-
for ( let i = 1; i < this._lodPlanes.length; i ++ ) {
|
|
444
|
-
|
|
445
|
-
const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );
|
|
446
|
-
|
|
447
|
-
const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];
|
|
448
|
-
|
|
449
|
-
this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );
|
|
450
|
-
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
renderer.autoClear = autoClear;
|
|
454
|
-
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
/**
|
|
458
|
-
* This is a two-pass Gaussian blur for a cubemap. Normally this is done
|
|
459
|
-
* vertically and horizontally, but this breaks down on a cube. Here we apply
|
|
460
|
-
* the blur latitudinally (around the poles), and then longitudinally (towards
|
|
461
|
-
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
462
|
-
* accurate at the poles, but still does a decent job.
|
|
463
|
-
*/
|
|
464
|
-
_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
|
|
465
|
-
|
|
466
|
-
const pingPongRenderTarget = this._pingPongRenderTarget;
|
|
467
|
-
|
|
468
|
-
this._halfBlur(
|
|
469
|
-
cubeUVRenderTarget,
|
|
470
|
-
pingPongRenderTarget,
|
|
471
|
-
lodIn,
|
|
472
|
-
lodOut,
|
|
473
|
-
sigma,
|
|
474
|
-
'latitudinal',
|
|
475
|
-
poleAxis );
|
|
476
|
-
|
|
477
|
-
this._halfBlur(
|
|
478
|
-
pingPongRenderTarget,
|
|
479
|
-
cubeUVRenderTarget,
|
|
480
|
-
lodOut,
|
|
481
|
-
lodOut,
|
|
482
|
-
sigma,
|
|
483
|
-
'longitudinal',
|
|
484
|
-
poleAxis );
|
|
485
|
-
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {
|
|
489
|
-
|
|
490
|
-
const renderer = this._renderer;
|
|
491
|
-
const blurMaterial = this._blurMaterial;
|
|
492
|
-
|
|
493
|
-
if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
|
|
494
|
-
|
|
495
|
-
console.error(
|
|
496
|
-
'blur direction must be either latitudinal or longitudinal!' );
|
|
497
|
-
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// Number of standard deviations at which to cut off the discrete approximation.
|
|
501
|
-
const STANDARD_DEVIATIONS = 3;
|
|
502
|
-
|
|
503
|
-
const blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );
|
|
504
|
-
const blurUniforms = blurMaterial.uniforms;
|
|
505
|
-
|
|
506
|
-
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
507
|
-
const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
|
|
508
|
-
const sigmaPixels = sigmaRadians / radiansPerPixel;
|
|
509
|
-
const samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;
|
|
510
|
-
|
|
511
|
-
if ( samples > MAX_SAMPLES ) {
|
|
512
|
-
|
|
513
|
-
console.warn( `sigmaRadians, ${
|
|
514
|
-
sigmaRadians}, is too large and will clip, as it requested ${
|
|
515
|
-
samples} samples when the maximum is set to ${MAX_SAMPLES}` );
|
|
516
|
-
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
const weights = [];
|
|
520
|
-
let sum = 0;
|
|
521
|
-
|
|
522
|
-
for ( let i = 0; i < MAX_SAMPLES; ++ i ) {
|
|
523
|
-
|
|
524
|
-
const x = i / sigmaPixels;
|
|
525
|
-
const weight = Math.exp( - x * x / 2 );
|
|
526
|
-
weights.push( weight );
|
|
527
|
-
|
|
528
|
-
if ( i === 0 ) {
|
|
529
|
-
|
|
530
|
-
sum += weight;
|
|
531
|
-
|
|
532
|
-
} else if ( i < samples ) {
|
|
533
|
-
|
|
534
|
-
sum += 2 * weight;
|
|
535
|
-
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
for ( let i = 0; i < weights.length; i ++ ) {
|
|
541
|
-
|
|
542
|
-
weights[ i ] = weights[ i ] / sum;
|
|
543
|
-
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
blurUniforms[ 'envMap' ].value = targetIn.texture;
|
|
547
|
-
blurUniforms[ 'samples' ].value = samples;
|
|
548
|
-
blurUniforms[ 'weights' ].value = weights;
|
|
549
|
-
blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';
|
|
550
|
-
|
|
551
|
-
if ( poleAxis ) {
|
|
552
|
-
|
|
553
|
-
blurUniforms[ 'poleAxis' ].value = poleAxis;
|
|
554
|
-
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
const { _lodMax } = this;
|
|
558
|
-
blurUniforms[ 'dTheta' ].value = radiansPerPixel;
|
|
559
|
-
blurUniforms[ 'mipInt' ].value = _lodMax - lodIn;
|
|
560
|
-
|
|
561
|
-
const outputSize = this._sizeLods[ lodOut ];
|
|
562
|
-
const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
|
|
563
|
-
const y = 4 * ( this._cubeSize - outputSize );
|
|
564
|
-
|
|
565
|
-
_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );
|
|
566
|
-
renderer.setRenderTarget( targetOut );
|
|
567
|
-
renderer.render( blurMesh, _flatCamera );
|
|
568
|
-
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
function _createPlanes( lodMax ) {
|
|
576
|
-
|
|
577
|
-
const lodPlanes = [];
|
|
578
|
-
const sizeLods = [];
|
|
579
|
-
const sigmas = [];
|
|
580
|
-
|
|
581
|
-
let lod = lodMax;
|
|
582
|
-
|
|
583
|
-
const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;
|
|
584
|
-
|
|
585
|
-
for ( let i = 0; i < totalLods; i ++ ) {
|
|
586
|
-
|
|
587
|
-
const sizeLod = Math.pow( 2, lod );
|
|
588
|
-
sizeLods.push( sizeLod );
|
|
589
|
-
let sigma = 1.0 / sizeLod;
|
|
590
|
-
|
|
591
|
-
if ( i > lodMax - LOD_MIN ) {
|
|
592
|
-
|
|
593
|
-
sigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];
|
|
594
|
-
|
|
595
|
-
} else if ( i === 0 ) {
|
|
596
|
-
|
|
597
|
-
sigma = 0;
|
|
598
|
-
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
sigmas.push( sigma );
|
|
602
|
-
|
|
603
|
-
const texelSize = 1.0 / ( sizeLod - 2 );
|
|
604
|
-
const min = - texelSize;
|
|
605
|
-
const max = 1 + texelSize;
|
|
606
|
-
const uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];
|
|
607
|
-
|
|
608
|
-
const cubeFaces = 6;
|
|
609
|
-
const vertices = 6;
|
|
610
|
-
const positionSize = 3;
|
|
611
|
-
const uvSize = 2;
|
|
612
|
-
const faceIndexSize = 1;
|
|
613
|
-
|
|
614
|
-
const position = new Float32Array( positionSize * vertices * cubeFaces );
|
|
615
|
-
const uv = new Float32Array( uvSize * vertices * cubeFaces );
|
|
616
|
-
const faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );
|
|
617
|
-
|
|
618
|
-
for ( let face = 0; face < cubeFaces; face ++ ) {
|
|
619
|
-
|
|
620
|
-
const x = ( face % 3 ) * 2 / 3 - 1;
|
|
621
|
-
const y = face > 2 ? 0 : - 1;
|
|
622
|
-
const coordinates = [
|
|
623
|
-
x, y, 0,
|
|
624
|
-
x + 2 / 3, y, 0,
|
|
625
|
-
x + 2 / 3, y + 1, 0,
|
|
626
|
-
x, y, 0,
|
|
627
|
-
x + 2 / 3, y + 1, 0,
|
|
628
|
-
x, y + 1, 0
|
|
629
|
-
];
|
|
630
|
-
position.set( coordinates, positionSize * vertices * face );
|
|
631
|
-
uv.set( uv1, uvSize * vertices * face );
|
|
632
|
-
const fill = [ face, face, face, face, face, face ];
|
|
633
|
-
faceIndex.set( fill, faceIndexSize * vertices * face );
|
|
634
|
-
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
const planes = new BufferGeometry();
|
|
638
|
-
planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
|
|
639
|
-
planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
|
|
640
|
-
planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
|
|
641
|
-
lodPlanes.push( planes );
|
|
642
|
-
|
|
643
|
-
if ( lod > LOD_MIN ) {
|
|
644
|
-
|
|
645
|
-
lod --;
|
|
646
|
-
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
return { lodPlanes, sizeLods, sigmas };
|
|
652
|
-
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
function _createRenderTarget( width, height, params ) {
|
|
656
|
-
|
|
657
|
-
const cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );
|
|
658
|
-
cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;
|
|
659
|
-
cubeUVRenderTarget.texture.name = 'PMREM.cubeUv';
|
|
660
|
-
cubeUVRenderTarget.scissorTest = true;
|
|
661
|
-
return cubeUVRenderTarget;
|
|
662
|
-
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
function _setViewport( target, x, y, width, height ) {
|
|
666
|
-
|
|
667
|
-
target.viewport.set( x, y, width, height );
|
|
668
|
-
target.scissor.set( x, y, width, height );
|
|
669
|
-
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
function _getBlurShader( lodMax, width, height ) {
|
|
673
|
-
|
|
674
|
-
const weights = new Float32Array( MAX_SAMPLES );
|
|
675
|
-
const poleAxis = new Vector3( 0, 1, 0 );
|
|
676
|
-
const shaderMaterial = new ShaderMaterial( {
|
|
677
|
-
|
|
678
|
-
name: 'SphericalGaussianBlur',
|
|
679
|
-
|
|
680
|
-
defines: {
|
|
681
|
-
'n': MAX_SAMPLES,
|
|
682
|
-
'CUBEUV_TEXEL_WIDTH': 1.0 / width,
|
|
683
|
-
'CUBEUV_TEXEL_HEIGHT': 1.0 / height,
|
|
684
|
-
'CUBEUV_MAX_MIP': `${lodMax}.0`,
|
|
685
|
-
},
|
|
686
|
-
|
|
687
|
-
uniforms: {
|
|
688
|
-
'envMap': { value: null },
|
|
689
|
-
'samples': { value: 1 },
|
|
690
|
-
'weights': { value: weights },
|
|
691
|
-
'latitudinal': { value: false },
|
|
692
|
-
'dTheta': { value: 0 },
|
|
693
|
-
'mipInt': { value: 0 },
|
|
694
|
-
'poleAxis': { value: poleAxis }
|
|
695
|
-
},
|
|
696
|
-
|
|
697
|
-
vertexShader: _getCommonVertexShader(),
|
|
698
|
-
|
|
699
|
-
fragmentShader: /* glsl */`
|
|
700
|
-
|
|
701
|
-
precision mediump float;
|
|
702
|
-
precision mediump int;
|
|
703
|
-
|
|
704
|
-
varying vec3 vOutputDirection;
|
|
705
|
-
|
|
706
|
-
uniform sampler2D envMap;
|
|
707
|
-
uniform int samples;
|
|
708
|
-
uniform float weights[ n ];
|
|
709
|
-
uniform bool latitudinal;
|
|
710
|
-
uniform float dTheta;
|
|
711
|
-
uniform float mipInt;
|
|
712
|
-
uniform vec3 poleAxis;
|
|
713
|
-
|
|
714
|
-
#define ENVMAP_TYPE_CUBE_UV
|
|
715
|
-
#include <cube_uv_reflection_fragment>
|
|
716
|
-
|
|
717
|
-
vec3 getSample( float theta, vec3 axis ) {
|
|
718
|
-
|
|
719
|
-
float cosTheta = cos( theta );
|
|
720
|
-
// Rodrigues' axis-angle rotation
|
|
721
|
-
vec3 sampleDirection = vOutputDirection * cosTheta
|
|
722
|
-
+ cross( axis, vOutputDirection ) * sin( theta )
|
|
723
|
-
+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );
|
|
724
|
-
|
|
725
|
-
return bilinearCubeUV( envMap, sampleDirection, mipInt );
|
|
726
|
-
|
|
727
|
-
}
|
|
728
|
-
|
|
729
|
-
void main() {
|
|
730
|
-
|
|
731
|
-
vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );
|
|
732
|
-
|
|
733
|
-
if ( all( equal( axis, vec3( 0.0 ) ) ) ) {
|
|
734
|
-
|
|
735
|
-
axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );
|
|
736
|
-
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
axis = normalize( axis );
|
|
740
|
-
|
|
741
|
-
gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );
|
|
742
|
-
gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );
|
|
743
|
-
|
|
744
|
-
for ( int i = 1; i < n; i++ ) {
|
|
745
|
-
|
|
746
|
-
if ( i >= samples ) {
|
|
747
|
-
|
|
748
|
-
break;
|
|
749
|
-
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
float theta = dTheta * float( i );
|
|
753
|
-
gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );
|
|
754
|
-
gl_FragColor.rgb += weights[ i ] * getSample( theta, axis );
|
|
755
|
-
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
}
|
|
759
|
-
`,
|
|
760
|
-
|
|
761
|
-
blending: NoBlending,
|
|
762
|
-
depthTest: false,
|
|
763
|
-
depthWrite: false
|
|
764
|
-
|
|
765
|
-
} );
|
|
766
|
-
|
|
767
|
-
return shaderMaterial;
|
|
768
|
-
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
function _getEquirectMaterial() {
|
|
772
|
-
|
|
773
|
-
return new ShaderMaterial( {
|
|
774
|
-
|
|
775
|
-
name: 'EquirectangularToCubeUV',
|
|
776
|
-
|
|
777
|
-
uniforms: {
|
|
778
|
-
'envMap': { value: null }
|
|
779
|
-
},
|
|
780
|
-
|
|
781
|
-
vertexShader: _getCommonVertexShader(),
|
|
782
|
-
|
|
783
|
-
fragmentShader: /* glsl */`
|
|
784
|
-
|
|
785
|
-
precision mediump float;
|
|
786
|
-
precision mediump int;
|
|
787
|
-
|
|
788
|
-
varying vec3 vOutputDirection;
|
|
789
|
-
|
|
790
|
-
uniform sampler2D envMap;
|
|
791
|
-
|
|
792
|
-
#include <common>
|
|
793
|
-
|
|
794
|
-
void main() {
|
|
795
|
-
|
|
796
|
-
vec3 outputDirection = normalize( vOutputDirection );
|
|
797
|
-
vec2 uv = equirectUv( outputDirection );
|
|
798
|
-
|
|
799
|
-
gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
|
|
800
|
-
|
|
801
|
-
}
|
|
802
|
-
`,
|
|
803
|
-
|
|
804
|
-
blending: NoBlending,
|
|
805
|
-
depthTest: false,
|
|
806
|
-
depthWrite: false
|
|
807
|
-
|
|
808
|
-
} );
|
|
809
|
-
|
|
810
|
-
}
|
|
811
|
-
|
|
812
|
-
function _getCubemapMaterial() {
|
|
813
|
-
|
|
814
|
-
return new ShaderMaterial( {
|
|
815
|
-
|
|
816
|
-
name: 'CubemapToCubeUV',
|
|
817
|
-
|
|
818
|
-
uniforms: {
|
|
819
|
-
'envMap': { value: null },
|
|
820
|
-
'flipEnvMap': { value: - 1 }
|
|
821
|
-
},
|
|
822
|
-
|
|
823
|
-
vertexShader: _getCommonVertexShader(),
|
|
824
|
-
|
|
825
|
-
fragmentShader: /* glsl */`
|
|
826
|
-
|
|
827
|
-
precision mediump float;
|
|
828
|
-
precision mediump int;
|
|
829
|
-
|
|
830
|
-
uniform float flipEnvMap;
|
|
831
|
-
|
|
832
|
-
varying vec3 vOutputDirection;
|
|
833
|
-
|
|
834
|
-
uniform samplerCube envMap;
|
|
835
|
-
|
|
836
|
-
void main() {
|
|
837
|
-
|
|
838
|
-
gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );
|
|
839
|
-
|
|
840
|
-
}
|
|
841
|
-
`,
|
|
842
|
-
|
|
843
|
-
blending: NoBlending,
|
|
844
|
-
depthTest: false,
|
|
845
|
-
depthWrite: false
|
|
846
|
-
|
|
847
|
-
} );
|
|
848
|
-
|
|
849
|
-
}
|
|
850
|
-
|
|
851
|
-
function _getCommonVertexShader() {
|
|
852
|
-
|
|
853
|
-
return /* glsl */`
|
|
854
|
-
|
|
855
|
-
precision mediump float;
|
|
856
|
-
precision mediump int;
|
|
857
|
-
|
|
858
|
-
attribute float faceIndex;
|
|
859
|
-
|
|
860
|
-
varying vec3 vOutputDirection;
|
|
861
|
-
|
|
862
|
-
// RH coordinate system; PMREM face-indexing convention
|
|
863
|
-
vec3 getDirection( vec2 uv, float face ) {
|
|
864
|
-
|
|
865
|
-
uv = 2.0 * uv - 1.0;
|
|
866
|
-
|
|
867
|
-
vec3 direction = vec3( uv, 1.0 );
|
|
868
|
-
|
|
869
|
-
if ( face == 0.0 ) {
|
|
870
|
-
|
|
871
|
-
direction = direction.zyx; // ( 1, v, u ) pos x
|
|
872
|
-
|
|
873
|
-
} else if ( face == 1.0 ) {
|
|
874
|
-
|
|
875
|
-
direction = direction.xzy;
|
|
876
|
-
direction.xz *= -1.0; // ( -u, 1, -v ) pos y
|
|
877
|
-
|
|
878
|
-
} else if ( face == 2.0 ) {
|
|
879
|
-
|
|
880
|
-
direction.x *= -1.0; // ( -u, v, 1 ) pos z
|
|
881
|
-
|
|
882
|
-
} else if ( face == 3.0 ) {
|
|
883
|
-
|
|
884
|
-
direction = direction.zyx;
|
|
885
|
-
direction.xz *= -1.0; // ( -1, v, -u ) neg x
|
|
886
|
-
|
|
887
|
-
} else if ( face == 4.0 ) {
|
|
888
|
-
|
|
889
|
-
direction = direction.xzy;
|
|
890
|
-
direction.xy *= -1.0; // ( -u, -1, v ) neg y
|
|
891
|
-
|
|
892
|
-
} else if ( face == 5.0 ) {
|
|
893
|
-
|
|
894
|
-
direction.z *= -1.0; // ( u, v, -1 ) neg z
|
|
895
|
-
|
|
896
|
-
}
|
|
897
|
-
|
|
898
|
-
return direction;
|
|
899
|
-
|
|
900
|
-
}
|
|
901
|
-
|
|
902
|
-
void main() {
|
|
903
|
-
|
|
904
|
-
vOutputDirection = getDirection( uv, faceIndex );
|
|
905
|
-
gl_Position = vec4( position, 1.0 );
|
|
906
|
-
|
|
907
|
-
}
|
|
908
|
-
`;
|
|
909
|
-
|
|
910
|
-
}
|
|
911
|
-
|
|
912
|
-
export { PMREMGenerator };
|
|
1
|
+
import {
|
|
2
|
+
CubeReflectionMapping,
|
|
3
|
+
CubeRefractionMapping,
|
|
4
|
+
CubeUVReflectionMapping,
|
|
5
|
+
LinearFilter,
|
|
6
|
+
NoToneMapping,
|
|
7
|
+
NoBlending,
|
|
8
|
+
RGBAFormat,
|
|
9
|
+
HalfFloatType,
|
|
10
|
+
BackSide,
|
|
11
|
+
LinearSRGBColorSpace
|
|
12
|
+
} from '../constants.js';
|
|
13
|
+
|
|
14
|
+
import { BufferAttribute } from '../core/BufferAttribute.js';
|
|
15
|
+
import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
16
|
+
import { Mesh } from '../objects/Mesh.js';
|
|
17
|
+
import { OrthographicCamera } from '../cameras/OrthographicCamera.js';
|
|
18
|
+
import { PerspectiveCamera } from '../cameras/PerspectiveCamera.js';
|
|
19
|
+
import { ShaderMaterial } from '../materials/ShaderMaterial.js';
|
|
20
|
+
import { Vector3 } from '../math/Vector3.js';
|
|
21
|
+
import { Color } from '../math/Color.js';
|
|
22
|
+
import { WebGLRenderTarget } from '../renderers/WebGLRenderTarget.js';
|
|
23
|
+
import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';
|
|
24
|
+
import { BoxGeometry } from '../geometries/BoxGeometry.js';
|
|
25
|
+
|
|
26
|
+
const LOD_MIN = 4;
|
|
27
|
+
|
|
28
|
+
// The standard deviations (radians) associated with the extra mips. These are
|
|
29
|
+
// chosen to approximate a Trowbridge-Reitz distribution function times the
|
|
30
|
+
// geometric shadowing function. These sigma values squared must match the
|
|
31
|
+
// variance #defines in cube_uv_reflection_fragment.glsl.js.
|
|
32
|
+
const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
|
|
33
|
+
|
|
34
|
+
// The maximum length of the blur for loop. Smaller sigmas will use fewer
|
|
35
|
+
// samples and exit early, but not recompile the shader.
|
|
36
|
+
const MAX_SAMPLES = 20;
|
|
37
|
+
|
|
38
|
+
const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
|
|
39
|
+
const _clearColor = /*@__PURE__*/ new Color();
|
|
40
|
+
let _oldTarget = null;
|
|
41
|
+
let _oldActiveCubeFace = 0;
|
|
42
|
+
let _oldActiveMipmapLevel = 0;
|
|
43
|
+
|
|
44
|
+
// Golden Ratio
|
|
45
|
+
const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
|
|
46
|
+
const INV_PHI = 1 / PHI;
|
|
47
|
+
|
|
48
|
+
// Vertices of a dodecahedron (except the opposites, which represent the
|
|
49
|
+
// same axis), used as axis directions evenly spread on a sphere.
|
|
50
|
+
const _axisDirections = [
|
|
51
|
+
/*@__PURE__*/ new Vector3( 1, 1, 1 ),
|
|
52
|
+
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
53
|
+
/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
|
|
54
|
+
/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
|
|
55
|
+
/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
|
|
56
|
+
/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
|
|
57
|
+
/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
|
|
58
|
+
/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
|
|
59
|
+
/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
|
|
60
|
+
/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
64
|
+
* (PMREM) from a cubeMap environment texture. This allows different levels of
|
|
65
|
+
* blur to be quickly accessed based on material roughness. It is packed into a
|
|
66
|
+
* special CubeUV format that allows us to perform custom interpolation so that
|
|
67
|
+
* we can support nonlinear formats such as RGBE. Unlike a traditional mipmap
|
|
68
|
+
* chain, it only goes down to the LOD_MIN level (above), and then creates extra
|
|
69
|
+
* even more filtered 'mips' at the same LOD_MIN resolution, associated with
|
|
70
|
+
* higher roughness levels. In this way we maintain resolution to smoothly
|
|
71
|
+
* interpolate diffuse lighting while limiting sampling computation.
|
|
72
|
+
*
|
|
73
|
+
* Paper: Fast, Accurate Image-Based Lighting
|
|
74
|
+
* https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
class PMREMGenerator {
|
|
78
|
+
|
|
79
|
+
constructor( renderer ) {
|
|
80
|
+
|
|
81
|
+
this._renderer = renderer;
|
|
82
|
+
this._pingPongRenderTarget = null;
|
|
83
|
+
|
|
84
|
+
this._lodMax = 0;
|
|
85
|
+
this._cubeSize = 0;
|
|
86
|
+
this._lodPlanes = [];
|
|
87
|
+
this._sizeLods = [];
|
|
88
|
+
this._sigmas = [];
|
|
89
|
+
|
|
90
|
+
this._blurMaterial = null;
|
|
91
|
+
this._cubemapMaterial = null;
|
|
92
|
+
this._equirectMaterial = null;
|
|
93
|
+
|
|
94
|
+
this._compileMaterial( this._blurMaterial );
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
100
|
+
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
101
|
+
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
102
|
+
* and far planes ensure the scene is rendered in its entirety (the cubeCamera
|
|
103
|
+
* is placed at the origin).
|
|
104
|
+
*/
|
|
105
|
+
fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
|
|
106
|
+
|
|
107
|
+
_oldTarget = this._renderer.getRenderTarget();
|
|
108
|
+
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
109
|
+
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
110
|
+
|
|
111
|
+
this._setSize( 256 );
|
|
112
|
+
|
|
113
|
+
const cubeUVRenderTarget = this._allocateTargets();
|
|
114
|
+
cubeUVRenderTarget.depthBuffer = true;
|
|
115
|
+
|
|
116
|
+
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );
|
|
117
|
+
|
|
118
|
+
if ( sigma > 0 ) {
|
|
119
|
+
|
|
120
|
+
this._blur( cubeUVRenderTarget, 0, 0, sigma );
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
this._applyPMREM( cubeUVRenderTarget );
|
|
125
|
+
this._cleanup( cubeUVRenderTarget );
|
|
126
|
+
|
|
127
|
+
return cubeUVRenderTarget;
|
|
128
|
+
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
133
|
+
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
134
|
+
* as this matches best with the 256 x 256 cubemap output.
|
|
135
|
+
* The smallest supported equirectangular image size is 64 x 32.
|
|
136
|
+
*/
|
|
137
|
+
fromEquirectangular( equirectangular, renderTarget = null ) {
|
|
138
|
+
|
|
139
|
+
return this._fromTexture( equirectangular, renderTarget );
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
145
|
+
* or HDR. The ideal input cube size is 256 x 256,
|
|
146
|
+
* as this matches best with the 256 x 256 cubemap output.
|
|
147
|
+
* The smallest supported cube size is 16 x 16.
|
|
148
|
+
*/
|
|
149
|
+
fromCubemap( cubemap, renderTarget = null ) {
|
|
150
|
+
|
|
151
|
+
return this._fromTexture( cubemap, renderTarget );
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
|
|
157
|
+
* your texture's network fetch for increased concurrency.
|
|
158
|
+
*/
|
|
159
|
+
compileCubemapShader() {
|
|
160
|
+
|
|
161
|
+
if ( this._cubemapMaterial === null ) {
|
|
162
|
+
|
|
163
|
+
this._cubemapMaterial = _getCubemapMaterial();
|
|
164
|
+
this._compileMaterial( this._cubemapMaterial );
|
|
165
|
+
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
|
|
172
|
+
* your texture's network fetch for increased concurrency.
|
|
173
|
+
*/
|
|
174
|
+
compileEquirectangularShader() {
|
|
175
|
+
|
|
176
|
+
if ( this._equirectMaterial === null ) {
|
|
177
|
+
|
|
178
|
+
this._equirectMaterial = _getEquirectMaterial();
|
|
179
|
+
this._compileMaterial( this._equirectMaterial );
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,
|
|
187
|
+
* so you should not need more than one PMREMGenerator object. If you do, calling dispose() on
|
|
188
|
+
* one of them will cause any others to also become unusable.
|
|
189
|
+
*/
|
|
190
|
+
dispose() {
|
|
191
|
+
|
|
192
|
+
this._dispose();
|
|
193
|
+
|
|
194
|
+
if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();
|
|
195
|
+
if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// private interface
|
|
200
|
+
|
|
201
|
+
_setSize( cubeSize ) {
|
|
202
|
+
|
|
203
|
+
this._lodMax = Math.floor( Math.log2( cubeSize ) );
|
|
204
|
+
this._cubeSize = Math.pow( 2, this._lodMax );
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
_dispose() {
|
|
209
|
+
|
|
210
|
+
if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
|
|
211
|
+
|
|
212
|
+
if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
|
|
213
|
+
|
|
214
|
+
for ( let i = 0; i < this._lodPlanes.length; i ++ ) {
|
|
215
|
+
|
|
216
|
+
this._lodPlanes[ i ].dispose();
|
|
217
|
+
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
_cleanup( outputTarget ) {
|
|
223
|
+
|
|
224
|
+
this._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );
|
|
225
|
+
outputTarget.scissorTest = false;
|
|
226
|
+
_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
|
|
227
|
+
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
_fromTexture( texture, renderTarget ) {
|
|
231
|
+
|
|
232
|
+
if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
|
|
233
|
+
|
|
234
|
+
this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
|
|
235
|
+
|
|
236
|
+
} else { // Equirectangular
|
|
237
|
+
|
|
238
|
+
this._setSize( texture.image.width / 4 );
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
_oldTarget = this._renderer.getRenderTarget();
|
|
243
|
+
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
244
|
+
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
245
|
+
|
|
246
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTargets();
|
|
247
|
+
this._textureToCubeUV( texture, cubeUVRenderTarget );
|
|
248
|
+
this._applyPMREM( cubeUVRenderTarget );
|
|
249
|
+
this._cleanup( cubeUVRenderTarget );
|
|
250
|
+
|
|
251
|
+
return cubeUVRenderTarget;
|
|
252
|
+
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
_allocateTargets() {
|
|
256
|
+
|
|
257
|
+
const width = 3 * Math.max( this._cubeSize, 16 * 7 );
|
|
258
|
+
const height = 4 * this._cubeSize;
|
|
259
|
+
|
|
260
|
+
const params = {
|
|
261
|
+
magFilter: LinearFilter,
|
|
262
|
+
minFilter: LinearFilter,
|
|
263
|
+
generateMipmaps: false,
|
|
264
|
+
type: HalfFloatType,
|
|
265
|
+
format: RGBAFormat,
|
|
266
|
+
colorSpace: LinearSRGBColorSpace,
|
|
267
|
+
depthBuffer: false
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
const cubeUVRenderTarget = _createRenderTarget( width, height, params );
|
|
271
|
+
|
|
272
|
+
// NEEDLE: This was added to work around a caching bug in PMREMGenerator that lead to incorrect results.
|
|
273
|
+
const { _lodMax } = this;
|
|
274
|
+
( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
275
|
+
|
|
276
|
+
if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {
|
|
277
|
+
|
|
278
|
+
if ( this._pingPongRenderTarget !== null ) {
|
|
279
|
+
|
|
280
|
+
this._dispose();
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
this._pingPongRenderTarget = _createRenderTarget( width, height, params );
|
|
285
|
+
|
|
286
|
+
const { _lodMax } = this;
|
|
287
|
+
( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
288
|
+
|
|
289
|
+
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
290
|
+
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return cubeUVRenderTarget;
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
_compileMaterial( material ) {
|
|
298
|
+
|
|
299
|
+
const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
300
|
+
this._renderer.compile( tmpMesh, _flatCamera );
|
|
301
|
+
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
|
|
305
|
+
|
|
306
|
+
const fov = 90;
|
|
307
|
+
const aspect = 1;
|
|
308
|
+
const cubeCamera = new PerspectiveCamera( fov, aspect, near, far );
|
|
309
|
+
const upSign = [ 1, - 1, 1, 1, 1, 1 ];
|
|
310
|
+
const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];
|
|
311
|
+
const renderer = this._renderer;
|
|
312
|
+
|
|
313
|
+
const originalAutoClear = renderer.autoClear;
|
|
314
|
+
const toneMapping = renderer.toneMapping;
|
|
315
|
+
renderer.getClearColor( _clearColor );
|
|
316
|
+
|
|
317
|
+
renderer.toneMapping = NoToneMapping;
|
|
318
|
+
renderer.autoClear = false;
|
|
319
|
+
|
|
320
|
+
const backgroundMaterial = new MeshBasicMaterial( {
|
|
321
|
+
name: 'PMREM.Background',
|
|
322
|
+
side: BackSide,
|
|
323
|
+
depthWrite: false,
|
|
324
|
+
depthTest: false,
|
|
325
|
+
} );
|
|
326
|
+
|
|
327
|
+
const backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );
|
|
328
|
+
|
|
329
|
+
let useSolidColor = false;
|
|
330
|
+
const background = scene.background;
|
|
331
|
+
|
|
332
|
+
if ( background ) {
|
|
333
|
+
|
|
334
|
+
if ( background.isColor ) {
|
|
335
|
+
|
|
336
|
+
backgroundMaterial.color.copy( background );
|
|
337
|
+
scene.background = null;
|
|
338
|
+
useSolidColor = true;
|
|
339
|
+
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
} else {
|
|
343
|
+
|
|
344
|
+
backgroundMaterial.color.copy( _clearColor );
|
|
345
|
+
useSolidColor = true;
|
|
346
|
+
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
350
|
+
|
|
351
|
+
const col = i % 3;
|
|
352
|
+
|
|
353
|
+
if ( col === 0 ) {
|
|
354
|
+
|
|
355
|
+
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
356
|
+
cubeCamera.lookAt( forwardSign[ i ], 0, 0 );
|
|
357
|
+
|
|
358
|
+
} else if ( col === 1 ) {
|
|
359
|
+
|
|
360
|
+
cubeCamera.up.set( 0, 0, upSign[ i ] );
|
|
361
|
+
cubeCamera.lookAt( 0, forwardSign[ i ], 0 );
|
|
362
|
+
|
|
363
|
+
} else {
|
|
364
|
+
|
|
365
|
+
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
366
|
+
cubeCamera.lookAt( 0, 0, forwardSign[ i ] );
|
|
367
|
+
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
const size = this._cubeSize;
|
|
371
|
+
|
|
372
|
+
_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );
|
|
373
|
+
|
|
374
|
+
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
375
|
+
|
|
376
|
+
if ( useSolidColor ) {
|
|
377
|
+
|
|
378
|
+
renderer.render( backgroundBox, cubeCamera );
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
renderer.render( scene, cubeCamera );
|
|
383
|
+
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
backgroundBox.geometry.dispose();
|
|
387
|
+
backgroundBox.material.dispose();
|
|
388
|
+
|
|
389
|
+
renderer.toneMapping = toneMapping;
|
|
390
|
+
renderer.autoClear = originalAutoClear;
|
|
391
|
+
scene.background = background;
|
|
392
|
+
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
_textureToCubeUV( texture, cubeUVRenderTarget ) {
|
|
396
|
+
|
|
397
|
+
const renderer = this._renderer;
|
|
398
|
+
|
|
399
|
+
const isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );
|
|
400
|
+
|
|
401
|
+
if ( isCubeTexture ) {
|
|
402
|
+
|
|
403
|
+
if ( this._cubemapMaterial === null ) {
|
|
404
|
+
|
|
405
|
+
this._cubemapMaterial = _getCubemapMaterial();
|
|
406
|
+
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
this._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
410
|
+
|
|
411
|
+
} else {
|
|
412
|
+
|
|
413
|
+
if ( this._equirectMaterial === null ) {
|
|
414
|
+
|
|
415
|
+
this._equirectMaterial = _getEquirectMaterial();
|
|
416
|
+
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;
|
|
422
|
+
const mesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
423
|
+
|
|
424
|
+
const uniforms = material.uniforms;
|
|
425
|
+
|
|
426
|
+
uniforms[ 'envMap' ].value = texture;
|
|
427
|
+
|
|
428
|
+
const size = this._cubeSize;
|
|
429
|
+
|
|
430
|
+
_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );
|
|
431
|
+
|
|
432
|
+
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
433
|
+
renderer.render( mesh, _flatCamera );
|
|
434
|
+
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
_applyPMREM( cubeUVRenderTarget ) {
|
|
438
|
+
|
|
439
|
+
const renderer = this._renderer;
|
|
440
|
+
const autoClear = renderer.autoClear;
|
|
441
|
+
renderer.autoClear = false;
|
|
442
|
+
|
|
443
|
+
for ( let i = 1; i < this._lodPlanes.length; i ++ ) {
|
|
444
|
+
|
|
445
|
+
const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );
|
|
446
|
+
|
|
447
|
+
const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];
|
|
448
|
+
|
|
449
|
+
this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );
|
|
450
|
+
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
renderer.autoClear = autoClear;
|
|
454
|
+
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* This is a two-pass Gaussian blur for a cubemap. Normally this is done
|
|
459
|
+
* vertically and horizontally, but this breaks down on a cube. Here we apply
|
|
460
|
+
* the blur latitudinally (around the poles), and then longitudinally (towards
|
|
461
|
+
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
462
|
+
* accurate at the poles, but still does a decent job.
|
|
463
|
+
*/
|
|
464
|
+
_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
|
|
465
|
+
|
|
466
|
+
const pingPongRenderTarget = this._pingPongRenderTarget;
|
|
467
|
+
|
|
468
|
+
this._halfBlur(
|
|
469
|
+
cubeUVRenderTarget,
|
|
470
|
+
pingPongRenderTarget,
|
|
471
|
+
lodIn,
|
|
472
|
+
lodOut,
|
|
473
|
+
sigma,
|
|
474
|
+
'latitudinal',
|
|
475
|
+
poleAxis );
|
|
476
|
+
|
|
477
|
+
this._halfBlur(
|
|
478
|
+
pingPongRenderTarget,
|
|
479
|
+
cubeUVRenderTarget,
|
|
480
|
+
lodOut,
|
|
481
|
+
lodOut,
|
|
482
|
+
sigma,
|
|
483
|
+
'longitudinal',
|
|
484
|
+
poleAxis );
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {
|
|
489
|
+
|
|
490
|
+
const renderer = this._renderer;
|
|
491
|
+
const blurMaterial = this._blurMaterial;
|
|
492
|
+
|
|
493
|
+
if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
|
|
494
|
+
|
|
495
|
+
console.error(
|
|
496
|
+
'blur direction must be either latitudinal or longitudinal!' );
|
|
497
|
+
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// Number of standard deviations at which to cut off the discrete approximation.
|
|
501
|
+
const STANDARD_DEVIATIONS = 3;
|
|
502
|
+
|
|
503
|
+
const blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );
|
|
504
|
+
const blurUniforms = blurMaterial.uniforms;
|
|
505
|
+
|
|
506
|
+
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
507
|
+
const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
|
|
508
|
+
const sigmaPixels = sigmaRadians / radiansPerPixel;
|
|
509
|
+
const samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;
|
|
510
|
+
|
|
511
|
+
if ( samples > MAX_SAMPLES ) {
|
|
512
|
+
|
|
513
|
+
console.warn( `sigmaRadians, ${
|
|
514
|
+
sigmaRadians}, is too large and will clip, as it requested ${
|
|
515
|
+
samples} samples when the maximum is set to ${MAX_SAMPLES}` );
|
|
516
|
+
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
const weights = [];
|
|
520
|
+
let sum = 0;
|
|
521
|
+
|
|
522
|
+
for ( let i = 0; i < MAX_SAMPLES; ++ i ) {
|
|
523
|
+
|
|
524
|
+
const x = i / sigmaPixels;
|
|
525
|
+
const weight = Math.exp( - x * x / 2 );
|
|
526
|
+
weights.push( weight );
|
|
527
|
+
|
|
528
|
+
if ( i === 0 ) {
|
|
529
|
+
|
|
530
|
+
sum += weight;
|
|
531
|
+
|
|
532
|
+
} else if ( i < samples ) {
|
|
533
|
+
|
|
534
|
+
sum += 2 * weight;
|
|
535
|
+
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
for ( let i = 0; i < weights.length; i ++ ) {
|
|
541
|
+
|
|
542
|
+
weights[ i ] = weights[ i ] / sum;
|
|
543
|
+
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
blurUniforms[ 'envMap' ].value = targetIn.texture;
|
|
547
|
+
blurUniforms[ 'samples' ].value = samples;
|
|
548
|
+
blurUniforms[ 'weights' ].value = weights;
|
|
549
|
+
blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';
|
|
550
|
+
|
|
551
|
+
if ( poleAxis ) {
|
|
552
|
+
|
|
553
|
+
blurUniforms[ 'poleAxis' ].value = poleAxis;
|
|
554
|
+
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
const { _lodMax } = this;
|
|
558
|
+
blurUniforms[ 'dTheta' ].value = radiansPerPixel;
|
|
559
|
+
blurUniforms[ 'mipInt' ].value = _lodMax - lodIn;
|
|
560
|
+
|
|
561
|
+
const outputSize = this._sizeLods[ lodOut ];
|
|
562
|
+
const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
|
|
563
|
+
const y = 4 * ( this._cubeSize - outputSize );
|
|
564
|
+
|
|
565
|
+
_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );
|
|
566
|
+
renderer.setRenderTarget( targetOut );
|
|
567
|
+
renderer.render( blurMesh, _flatCamera );
|
|
568
|
+
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
function _createPlanes( lodMax ) {
|
|
576
|
+
|
|
577
|
+
const lodPlanes = [];
|
|
578
|
+
const sizeLods = [];
|
|
579
|
+
const sigmas = [];
|
|
580
|
+
|
|
581
|
+
let lod = lodMax;
|
|
582
|
+
|
|
583
|
+
const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;
|
|
584
|
+
|
|
585
|
+
for ( let i = 0; i < totalLods; i ++ ) {
|
|
586
|
+
|
|
587
|
+
const sizeLod = Math.pow( 2, lod );
|
|
588
|
+
sizeLods.push( sizeLod );
|
|
589
|
+
let sigma = 1.0 / sizeLod;
|
|
590
|
+
|
|
591
|
+
if ( i > lodMax - LOD_MIN ) {
|
|
592
|
+
|
|
593
|
+
sigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];
|
|
594
|
+
|
|
595
|
+
} else if ( i === 0 ) {
|
|
596
|
+
|
|
597
|
+
sigma = 0;
|
|
598
|
+
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
sigmas.push( sigma );
|
|
602
|
+
|
|
603
|
+
const texelSize = 1.0 / ( sizeLod - 2 );
|
|
604
|
+
const min = - texelSize;
|
|
605
|
+
const max = 1 + texelSize;
|
|
606
|
+
const uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];
|
|
607
|
+
|
|
608
|
+
const cubeFaces = 6;
|
|
609
|
+
const vertices = 6;
|
|
610
|
+
const positionSize = 3;
|
|
611
|
+
const uvSize = 2;
|
|
612
|
+
const faceIndexSize = 1;
|
|
613
|
+
|
|
614
|
+
const position = new Float32Array( positionSize * vertices * cubeFaces );
|
|
615
|
+
const uv = new Float32Array( uvSize * vertices * cubeFaces );
|
|
616
|
+
const faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );
|
|
617
|
+
|
|
618
|
+
for ( let face = 0; face < cubeFaces; face ++ ) {
|
|
619
|
+
|
|
620
|
+
const x = ( face % 3 ) * 2 / 3 - 1;
|
|
621
|
+
const y = face > 2 ? 0 : - 1;
|
|
622
|
+
const coordinates = [
|
|
623
|
+
x, y, 0,
|
|
624
|
+
x + 2 / 3, y, 0,
|
|
625
|
+
x + 2 / 3, y + 1, 0,
|
|
626
|
+
x, y, 0,
|
|
627
|
+
x + 2 / 3, y + 1, 0,
|
|
628
|
+
x, y + 1, 0
|
|
629
|
+
];
|
|
630
|
+
position.set( coordinates, positionSize * vertices * face );
|
|
631
|
+
uv.set( uv1, uvSize * vertices * face );
|
|
632
|
+
const fill = [ face, face, face, face, face, face ];
|
|
633
|
+
faceIndex.set( fill, faceIndexSize * vertices * face );
|
|
634
|
+
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
const planes = new BufferGeometry();
|
|
638
|
+
planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
|
|
639
|
+
planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
|
|
640
|
+
planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
|
|
641
|
+
lodPlanes.push( planes );
|
|
642
|
+
|
|
643
|
+
if ( lod > LOD_MIN ) {
|
|
644
|
+
|
|
645
|
+
lod --;
|
|
646
|
+
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
return { lodPlanes, sizeLods, sigmas };
|
|
652
|
+
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
function _createRenderTarget( width, height, params ) {
|
|
656
|
+
|
|
657
|
+
const cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );
|
|
658
|
+
cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;
|
|
659
|
+
cubeUVRenderTarget.texture.name = 'PMREM.cubeUv';
|
|
660
|
+
cubeUVRenderTarget.scissorTest = true;
|
|
661
|
+
return cubeUVRenderTarget;
|
|
662
|
+
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
function _setViewport( target, x, y, width, height ) {
|
|
666
|
+
|
|
667
|
+
target.viewport.set( x, y, width, height );
|
|
668
|
+
target.scissor.set( x, y, width, height );
|
|
669
|
+
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
function _getBlurShader( lodMax, width, height ) {
|
|
673
|
+
|
|
674
|
+
const weights = new Float32Array( MAX_SAMPLES );
|
|
675
|
+
const poleAxis = new Vector3( 0, 1, 0 );
|
|
676
|
+
const shaderMaterial = new ShaderMaterial( {
|
|
677
|
+
|
|
678
|
+
name: 'SphericalGaussianBlur',
|
|
679
|
+
|
|
680
|
+
defines: {
|
|
681
|
+
'n': MAX_SAMPLES,
|
|
682
|
+
'CUBEUV_TEXEL_WIDTH': 1.0 / width,
|
|
683
|
+
'CUBEUV_TEXEL_HEIGHT': 1.0 / height,
|
|
684
|
+
'CUBEUV_MAX_MIP': `${lodMax}.0`,
|
|
685
|
+
},
|
|
686
|
+
|
|
687
|
+
uniforms: {
|
|
688
|
+
'envMap': { value: null },
|
|
689
|
+
'samples': { value: 1 },
|
|
690
|
+
'weights': { value: weights },
|
|
691
|
+
'latitudinal': { value: false },
|
|
692
|
+
'dTheta': { value: 0 },
|
|
693
|
+
'mipInt': { value: 0 },
|
|
694
|
+
'poleAxis': { value: poleAxis }
|
|
695
|
+
},
|
|
696
|
+
|
|
697
|
+
vertexShader: _getCommonVertexShader(),
|
|
698
|
+
|
|
699
|
+
fragmentShader: /* glsl */`
|
|
700
|
+
|
|
701
|
+
precision mediump float;
|
|
702
|
+
precision mediump int;
|
|
703
|
+
|
|
704
|
+
varying vec3 vOutputDirection;
|
|
705
|
+
|
|
706
|
+
uniform sampler2D envMap;
|
|
707
|
+
uniform int samples;
|
|
708
|
+
uniform float weights[ n ];
|
|
709
|
+
uniform bool latitudinal;
|
|
710
|
+
uniform float dTheta;
|
|
711
|
+
uniform float mipInt;
|
|
712
|
+
uniform vec3 poleAxis;
|
|
713
|
+
|
|
714
|
+
#define ENVMAP_TYPE_CUBE_UV
|
|
715
|
+
#include <cube_uv_reflection_fragment>
|
|
716
|
+
|
|
717
|
+
vec3 getSample( float theta, vec3 axis ) {
|
|
718
|
+
|
|
719
|
+
float cosTheta = cos( theta );
|
|
720
|
+
// Rodrigues' axis-angle rotation
|
|
721
|
+
vec3 sampleDirection = vOutputDirection * cosTheta
|
|
722
|
+
+ cross( axis, vOutputDirection ) * sin( theta )
|
|
723
|
+
+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );
|
|
724
|
+
|
|
725
|
+
return bilinearCubeUV( envMap, sampleDirection, mipInt );
|
|
726
|
+
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
void main() {
|
|
730
|
+
|
|
731
|
+
vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );
|
|
732
|
+
|
|
733
|
+
if ( all( equal( axis, vec3( 0.0 ) ) ) ) {
|
|
734
|
+
|
|
735
|
+
axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );
|
|
736
|
+
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
axis = normalize( axis );
|
|
740
|
+
|
|
741
|
+
gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );
|
|
742
|
+
gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );
|
|
743
|
+
|
|
744
|
+
for ( int i = 1; i < n; i++ ) {
|
|
745
|
+
|
|
746
|
+
if ( i >= samples ) {
|
|
747
|
+
|
|
748
|
+
break;
|
|
749
|
+
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
float theta = dTheta * float( i );
|
|
753
|
+
gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );
|
|
754
|
+
gl_FragColor.rgb += weights[ i ] * getSample( theta, axis );
|
|
755
|
+
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
}
|
|
759
|
+
`,
|
|
760
|
+
|
|
761
|
+
blending: NoBlending,
|
|
762
|
+
depthTest: false,
|
|
763
|
+
depthWrite: false
|
|
764
|
+
|
|
765
|
+
} );
|
|
766
|
+
|
|
767
|
+
return shaderMaterial;
|
|
768
|
+
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
function _getEquirectMaterial() {
|
|
772
|
+
|
|
773
|
+
return new ShaderMaterial( {
|
|
774
|
+
|
|
775
|
+
name: 'EquirectangularToCubeUV',
|
|
776
|
+
|
|
777
|
+
uniforms: {
|
|
778
|
+
'envMap': { value: null }
|
|
779
|
+
},
|
|
780
|
+
|
|
781
|
+
vertexShader: _getCommonVertexShader(),
|
|
782
|
+
|
|
783
|
+
fragmentShader: /* glsl */`
|
|
784
|
+
|
|
785
|
+
precision mediump float;
|
|
786
|
+
precision mediump int;
|
|
787
|
+
|
|
788
|
+
varying vec3 vOutputDirection;
|
|
789
|
+
|
|
790
|
+
uniform sampler2D envMap;
|
|
791
|
+
|
|
792
|
+
#include <common>
|
|
793
|
+
|
|
794
|
+
void main() {
|
|
795
|
+
|
|
796
|
+
vec3 outputDirection = normalize( vOutputDirection );
|
|
797
|
+
vec2 uv = equirectUv( outputDirection );
|
|
798
|
+
|
|
799
|
+
gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
|
|
800
|
+
|
|
801
|
+
}
|
|
802
|
+
`,
|
|
803
|
+
|
|
804
|
+
blending: NoBlending,
|
|
805
|
+
depthTest: false,
|
|
806
|
+
depthWrite: false
|
|
807
|
+
|
|
808
|
+
} );
|
|
809
|
+
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
function _getCubemapMaterial() {
|
|
813
|
+
|
|
814
|
+
return new ShaderMaterial( {
|
|
815
|
+
|
|
816
|
+
name: 'CubemapToCubeUV',
|
|
817
|
+
|
|
818
|
+
uniforms: {
|
|
819
|
+
'envMap': { value: null },
|
|
820
|
+
'flipEnvMap': { value: - 1 }
|
|
821
|
+
},
|
|
822
|
+
|
|
823
|
+
vertexShader: _getCommonVertexShader(),
|
|
824
|
+
|
|
825
|
+
fragmentShader: /* glsl */`
|
|
826
|
+
|
|
827
|
+
precision mediump float;
|
|
828
|
+
precision mediump int;
|
|
829
|
+
|
|
830
|
+
uniform float flipEnvMap;
|
|
831
|
+
|
|
832
|
+
varying vec3 vOutputDirection;
|
|
833
|
+
|
|
834
|
+
uniform samplerCube envMap;
|
|
835
|
+
|
|
836
|
+
void main() {
|
|
837
|
+
|
|
838
|
+
gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );
|
|
839
|
+
|
|
840
|
+
}
|
|
841
|
+
`,
|
|
842
|
+
|
|
843
|
+
blending: NoBlending,
|
|
844
|
+
depthTest: false,
|
|
845
|
+
depthWrite: false
|
|
846
|
+
|
|
847
|
+
} );
|
|
848
|
+
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
function _getCommonVertexShader() {
|
|
852
|
+
|
|
853
|
+
return /* glsl */`
|
|
854
|
+
|
|
855
|
+
precision mediump float;
|
|
856
|
+
precision mediump int;
|
|
857
|
+
|
|
858
|
+
attribute float faceIndex;
|
|
859
|
+
|
|
860
|
+
varying vec3 vOutputDirection;
|
|
861
|
+
|
|
862
|
+
// RH coordinate system; PMREM face-indexing convention
|
|
863
|
+
vec3 getDirection( vec2 uv, float face ) {
|
|
864
|
+
|
|
865
|
+
uv = 2.0 * uv - 1.0;
|
|
866
|
+
|
|
867
|
+
vec3 direction = vec3( uv, 1.0 );
|
|
868
|
+
|
|
869
|
+
if ( face == 0.0 ) {
|
|
870
|
+
|
|
871
|
+
direction = direction.zyx; // ( 1, v, u ) pos x
|
|
872
|
+
|
|
873
|
+
} else if ( face == 1.0 ) {
|
|
874
|
+
|
|
875
|
+
direction = direction.xzy;
|
|
876
|
+
direction.xz *= -1.0; // ( -u, 1, -v ) pos y
|
|
877
|
+
|
|
878
|
+
} else if ( face == 2.0 ) {
|
|
879
|
+
|
|
880
|
+
direction.x *= -1.0; // ( -u, v, 1 ) pos z
|
|
881
|
+
|
|
882
|
+
} else if ( face == 3.0 ) {
|
|
883
|
+
|
|
884
|
+
direction = direction.zyx;
|
|
885
|
+
direction.xz *= -1.0; // ( -1, v, -u ) neg x
|
|
886
|
+
|
|
887
|
+
} else if ( face == 4.0 ) {
|
|
888
|
+
|
|
889
|
+
direction = direction.xzy;
|
|
890
|
+
direction.xy *= -1.0; // ( -u, -1, v ) neg y
|
|
891
|
+
|
|
892
|
+
} else if ( face == 5.0 ) {
|
|
893
|
+
|
|
894
|
+
direction.z *= -1.0; // ( u, v, -1 ) neg z
|
|
895
|
+
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
return direction;
|
|
899
|
+
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
void main() {
|
|
903
|
+
|
|
904
|
+
vOutputDirection = getDirection( uv, faceIndex );
|
|
905
|
+
gl_Position = vec4( position, 1.0 );
|
|
906
|
+
|
|
907
|
+
}
|
|
908
|
+
`;
|
|
909
|
+
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
export { PMREMGenerator };
|