super-three 0.144.0 → 0.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +735 -387
- package/build/three.js +735 -387
- package/build/three.min.js +1 -1
- package/build/three.module.js +910 -408
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +50 -67
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +70 -134
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +138 -405
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -54
- package/examples/js/controls/FlyControls.js +29 -55
- package/examples/js/controls/OrbitControls.js +125 -99
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +85 -170
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +4 -18
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +26 -30
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
- package/examples/js/effects/PeppersGhostEffect.js +12 -39
- package/examples/js/effects/StereoEffect.js +0 -4
- package/examples/js/environments/RoomEnvironment.js +12 -10
- package/examples/js/exporters/ColladaExporter.js +48 -65
- package/examples/js/exporters/DRACOExporter.js +22 -22
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +141 -317
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +42 -33
- package/examples/js/exporters/PLYExporter.js +38 -33
- package/examples/js/exporters/STLExporter.js +5 -7
- package/examples/js/exporters/USDZExporter.js +113 -27
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +11 -6
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +25 -12
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +25 -39
- package/examples/js/interactive/InteractiveGroup.js +9 -14
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +0 -8
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +40 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +228 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +29 -66
- package/examples/js/loaders/EXRLoader.js +67 -164
- package/examples/js/loaders/FBXLoader.js +287 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +409 -706
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +178 -289
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +50 -65
- package/examples/js/loaders/PCDLoader.js +34 -29
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +62 -48
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +361 -233
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +0 -1
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +243 -340
- package/examples/js/loaders/VTKLoader.js +101 -118
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
- package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
- package/examples/js/materials/MeshGouraudMaterial.js +15 -13
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -3
- package/examples/js/math/ConvexHull.js +185 -141
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +26 -16
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +16 -45
- package/examples/js/misc/VolumeSlice.js +14 -24
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +56 -59
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +2 -14
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +22 -20
- package/examples/js/objects/ReflectorForSSRPass.js +19 -23
- package/examples/js/objects/Refractor.js +52 -30
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +45 -36
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +2 -21
- package/examples/js/renderers/CSS3DRenderer.js +3 -24
- package/examples/js/renderers/Projector.js +29 -85
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +3 -6
- package/examples/js/shaders/MMDToonShader.js +2 -8
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +3 -6
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +236 -170
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +13 -18
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +117 -6
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +27 -3
- package/examples/jsm/animation/MMDPhysics.js +25 -0
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/FirstPersonControls.js +20 -20
- package/examples/jsm/controls/FlyControls.js +16 -17
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/controls/TrackballControls.js +14 -2
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/csm/CSM.js +1 -0
- package/examples/jsm/csm/CSMHelper.js +30 -0
- package/examples/jsm/exporters/GLTFExporter.js +0 -79
- package/examples/jsm/exporters/USDZExporter.js +93 -1
- package/examples/jsm/helpers/OctreeHelper.js +22 -8
- package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
- package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
- package/examples/jsm/helpers/ViewHelper.js +24 -0
- package/examples/jsm/interactive/HTMLMesh.js +5 -6
- package/examples/jsm/interactive/InteractiveGroup.js +4 -2
- package/examples/jsm/libs/flow.module.js +610 -160
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/lines/LineSegments2.js +4 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +18 -2
- package/examples/jsm/loaders/GLTFLoader.js +269 -428
- package/examples/jsm/loaders/KTX2Loader.js +68 -29
- package/examples/jsm/loaders/LDrawLoader.js +14 -13
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +68 -16
- package/examples/jsm/loaders/SVGLoader.js +227 -14
- package/examples/jsm/loaders/USDZLoader.js +351 -111
- package/examples/jsm/loaders/VRMLLoader.js +13 -1
- package/examples/jsm/math/ConvexHull.js +4 -4
- package/examples/jsm/math/Octree.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +91 -12
- package/examples/jsm/node-editor/core/BaseNode.js +10 -3
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
- package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
- package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
- package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
- package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
- package/examples/jsm/nodes/Nodes.js +30 -3
- package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
- package/examples/jsm/nodes/core/AttributeNode.js +31 -8
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeVarying.js +7 -4
- package/examples/jsm/nodes/core/VaryingNode.js +6 -4
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
- package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
- package/examples/jsm/nodes/materials/Materials.js +9 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
- package/examples/jsm/nodes/materialx/{Disclaimer.md → DISCLAIMER.md} +1 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
- package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
- package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -5
- package/examples/jsm/nodes/math/OperatorNode.js +16 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
- package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +8 -2
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +34 -0
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +21 -1
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +21 -1
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +56 -35
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +41 -9
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
- package/package.json +13 -13
- package/src/Three.js +1 -0
- package/src/animation/PropertyBinding.js +7 -0
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -14
- package/src/constants.js +1 -1
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/core/InterleavedBufferAttribute.js +4 -4
- package/src/extras/Earcut.js +67 -67
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +9 -0
- package/src/helpers/Box3Helper.js +7 -0
- package/src/helpers/BoxHelper.js +7 -1
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/GridHelper.js +7 -0
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PlaneHelper.js +9 -0
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/PolarGridHelper.js +7 -0
- package/src/helpers/SkeletonHelper.js +7 -0
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/LightShadow.js +1 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +2 -2
- package/src/loaders/FileLoader.js +4 -1
- package/src/loaders/ObjectLoader.js +5 -1
- package/src/materials/Material.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +1 -1
- package/src/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +36 -21
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +36 -62
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +3 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
- package/src/renderers/shaders/ShaderLib.js +20 -6
- package/src/renderers/shaders/UniformsLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +15 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +15 -7
- package/src/renderers/webgl/WebGLLights.js +0 -4
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -1
- package/src/renderers/webgl/WebGLState.js +78 -41
- package/src/renderers/webgl/WebGLTextures.js +94 -39
- package/src/renderers/webgl/WebGLUniforms.js +152 -24
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +70 -2
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/src/textures/Texture.js +2 -1
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/shaders/PixelShader.js +0 -44
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { defaultShaderStages, NodeFrame, MathNode, GLSLNodeParser, NodeBuilder } from 'three/nodes';
|
|
2
2
|
import SlotNode from './SlotNode.js';
|
|
3
|
-
import { PerspectiveCamera, ShaderChunk, ShaderLib, UniformsUtils, UniformsLib
|
|
4
|
-
LinearEncoding, RGBAFormat, UnsignedByteType, sRGBEncoding } from 'three';
|
|
3
|
+
import { PerspectiveCamera, ShaderChunk, ShaderLib, UniformsUtils, UniformsLib } from 'three';
|
|
5
4
|
|
|
6
5
|
const nodeFrame = new NodeFrame();
|
|
7
6
|
nodeFrame.camera = new PerspectiveCamera();
|
|
@@ -73,7 +72,17 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
73
72
|
|
|
74
73
|
_parseShaderLib() {
|
|
75
74
|
|
|
76
|
-
const
|
|
75
|
+
const material = this.material;
|
|
76
|
+
|
|
77
|
+
let type = material.type;
|
|
78
|
+
|
|
79
|
+
// see https://github.com/mrdoob/three.js/issues/23707
|
|
80
|
+
|
|
81
|
+
if ( material.isMeshPhysicalNodeMaterial ) type = 'MeshPhysicalNodeMaterial';
|
|
82
|
+
else if ( material.isMeshStandardNodeMaterial ) type = 'MeshStandardNodeMaterial';
|
|
83
|
+
else if ( material.isMeshBasicNodeMaterial ) type = 'MeshBasicNodeMaterial';
|
|
84
|
+
else if ( material.isPointsNodeMaterial ) type = 'PointsNodeMaterial';
|
|
85
|
+
else if ( material.isLineBasicNodeMaterial ) type = 'LineBasicNodeMaterial';
|
|
77
86
|
|
|
78
87
|
// shader lib
|
|
79
88
|
|
|
@@ -112,9 +121,8 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
112
121
|
this.addSlot( 'fragment', new SlotNode( {
|
|
113
122
|
node: material.colorNode,
|
|
114
123
|
nodeType: 'vec4',
|
|
115
|
-
source:
|
|
116
|
-
target: 'diffuseColor = %RESULT%;'
|
|
117
|
-
inclusionType: 'append'
|
|
124
|
+
source: 'vec4 diffuseColor = vec4( diffuse, opacity );',
|
|
125
|
+
target: 'vec4 diffuseColor = %RESULT%;'
|
|
118
126
|
} ) );
|
|
119
127
|
|
|
120
128
|
}
|
|
@@ -129,6 +137,10 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
129
137
|
inclusionType: 'append'
|
|
130
138
|
} ) );
|
|
131
139
|
|
|
140
|
+
} else {
|
|
141
|
+
|
|
142
|
+
this.addCode( 'fragment', getIncludeSnippet( 'alphatest_fragment' ), 'diffuseColor.a = opacity;', this.shader );
|
|
143
|
+
|
|
132
144
|
}
|
|
133
145
|
|
|
134
146
|
if ( material.normalNode && material.normalNode.isNode ) {
|
|
@@ -498,15 +510,31 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
498
510
|
|
|
499
511
|
}
|
|
500
512
|
|
|
501
|
-
getVaryings(
|
|
513
|
+
getVaryings( shaderStage ) {
|
|
502
514
|
|
|
503
515
|
let snippet = '';
|
|
504
516
|
|
|
505
517
|
const varyings = this.varyings;
|
|
506
518
|
|
|
507
|
-
|
|
519
|
+
if ( shaderStage === 'vertex' ) {
|
|
520
|
+
|
|
521
|
+
for ( const varying of varyings ) {
|
|
522
|
+
|
|
523
|
+
snippet += `${varying.needsInterpolation ? 'varying' : '/*varying*/'} ${varying.type} ${varying.name}; `;
|
|
524
|
+
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
} else if ( shaderStage === 'fragment' ) {
|
|
528
|
+
|
|
529
|
+
for ( const varying of varyings ) {
|
|
530
|
+
|
|
531
|
+
if ( varying.needsInterpolation ) {
|
|
508
532
|
|
|
509
|
-
|
|
533
|
+
snippet += `varying ${varying.type} ${varying.name}; `;
|
|
534
|
+
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
}
|
|
510
538
|
|
|
511
539
|
}
|
|
512
540
|
|
|
@@ -514,52 +542,50 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
514
542
|
|
|
515
543
|
}
|
|
516
544
|
|
|
517
|
-
|
|
545
|
+
addCode( shaderStage, source, code, scope = this ) {
|
|
518
546
|
|
|
519
547
|
const shaderProperty = getShaderStageProperty( shaderStage );
|
|
520
548
|
|
|
521
|
-
let
|
|
549
|
+
let snippet = scope[ shaderProperty ];
|
|
522
550
|
|
|
523
|
-
const index =
|
|
551
|
+
const index = snippet.indexOf( source );
|
|
524
552
|
|
|
525
553
|
if ( index !== - 1 ) {
|
|
526
554
|
|
|
527
|
-
const start =
|
|
528
|
-
const end =
|
|
555
|
+
const start = snippet.substring( 0, index + source.length );
|
|
556
|
+
const end = snippet.substring( index + source.length );
|
|
529
557
|
|
|
530
|
-
|
|
558
|
+
snippet = `${start}\n${code}\n${end}`;
|
|
531
559
|
|
|
532
560
|
}
|
|
533
561
|
|
|
534
|
-
|
|
562
|
+
scope[ shaderProperty ] = snippet;
|
|
535
563
|
|
|
536
564
|
}
|
|
537
565
|
|
|
538
|
-
replaceCode( shaderStage, source, target ) {
|
|
566
|
+
replaceCode( shaderStage, source, target, scope = this ) {
|
|
539
567
|
|
|
540
568
|
const shaderProperty = getShaderStageProperty( shaderStage );
|
|
541
569
|
|
|
542
|
-
|
|
570
|
+
scope[ shaderProperty ] = scope[ shaderProperty ].replaceAll( source, target );
|
|
543
571
|
|
|
544
572
|
}
|
|
545
573
|
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
const isWebGL2 = this.renderer.capabilities.isWebGL2;
|
|
574
|
+
getFrontFacing() {
|
|
549
575
|
|
|
550
|
-
|
|
576
|
+
return 'gl_FrontFacing';
|
|
551
577
|
|
|
552
|
-
|
|
578
|
+
}
|
|
553
579
|
|
|
554
|
-
|
|
580
|
+
getFragCoord() {
|
|
555
581
|
|
|
556
|
-
return
|
|
582
|
+
return 'gl_FragCoord';
|
|
557
583
|
|
|
558
584
|
}
|
|
559
585
|
|
|
560
|
-
|
|
586
|
+
isFlipY() {
|
|
561
587
|
|
|
562
|
-
return
|
|
588
|
+
return true;
|
|
563
589
|
|
|
564
590
|
}
|
|
565
591
|
|
|
@@ -644,11 +670,6 @@ ${this.shader[ getShaderStageProperty( shaderStage ) ]}
|
|
|
644
670
|
|
|
645
671
|
const slots = this.slots[ shaderStage ].sort( ( slotA, slotB ) => {
|
|
646
672
|
|
|
647
|
-
if ( sourceCode.indexOf( slotA.source ) == - 1 ) {
|
|
648
|
-
//console.log( slotA, sourceCode.indexOf( slotA.source ), sourceCode.indexOf( slotB.source ) );
|
|
649
|
-
//console.log(sourceCode);
|
|
650
|
-
}
|
|
651
|
-
|
|
652
673
|
return sourceCode.indexOf( slotA.source ) > sourceCode.indexOf( slotB.source ) ? 1 : - 1;
|
|
653
674
|
|
|
654
675
|
} );
|
|
@@ -677,7 +698,7 @@ ${this.shader[ getShaderStageProperty( shaderStage ) ]}
|
|
|
677
698
|
|
|
678
699
|
if ( inclusionType === 'append' ) {
|
|
679
700
|
|
|
680
|
-
this.
|
|
701
|
+
this.addCode( shaderStage, source, target );
|
|
681
702
|
|
|
682
703
|
} else if ( inclusionType === 'replace' ) {
|
|
683
704
|
|
|
@@ -691,10 +712,10 @@ ${this.shader[ getShaderStageProperty( shaderStage ) ]}
|
|
|
691
712
|
|
|
692
713
|
}
|
|
693
714
|
|
|
694
|
-
this.
|
|
715
|
+
this.addCode(
|
|
695
716
|
shaderStage,
|
|
696
717
|
'main() {',
|
|
697
|
-
this.flowCode[ shaderStage ]
|
|
718
|
+
'\n\t' + this.flowCode[ shaderStage ]
|
|
698
719
|
);
|
|
699
720
|
|
|
700
721
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
class WebGPUAnimation {
|
|
2
|
+
|
|
3
|
+
constructor() {
|
|
4
|
+
|
|
5
|
+
this.nodes = null;
|
|
6
|
+
|
|
7
|
+
this.animationLoop = null;
|
|
8
|
+
this.requestId = null;
|
|
9
|
+
|
|
10
|
+
this.isAnimating = false;
|
|
11
|
+
|
|
12
|
+
this.context = self;
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
start() {
|
|
17
|
+
|
|
18
|
+
if ( this.isAnimating === true || this.animationLoop === null || this.nodes === null ) return;
|
|
19
|
+
|
|
20
|
+
this.isAnimating = true;
|
|
21
|
+
|
|
22
|
+
const update = ( time, frame ) => {
|
|
23
|
+
|
|
24
|
+
this.requestId = self.requestAnimationFrame( update );
|
|
25
|
+
|
|
26
|
+
this.animationLoop( time, frame );
|
|
27
|
+
|
|
28
|
+
this.nodes.updateFrame();
|
|
29
|
+
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
this.requestId = self.requestAnimationFrame( update );
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
stop() {
|
|
37
|
+
|
|
38
|
+
self.cancelAnimationFrame( this.requestId );
|
|
39
|
+
|
|
40
|
+
this.isAnimating = false;
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
setAnimationLoop( callback ) {
|
|
45
|
+
|
|
46
|
+
this.animationLoop = callback;
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
setNodes( nodes ) {
|
|
51
|
+
|
|
52
|
+
this.nodes = nodes;
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default WebGPUAnimation;
|
|
@@ -23,7 +23,7 @@ class WebGPUAttributes {
|
|
|
23
23
|
|
|
24
24
|
if ( data ) {
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
this._destroyBuffers( data );
|
|
27
27
|
|
|
28
28
|
this.buffers.delete( attribute );
|
|
29
29
|
|
|
@@ -51,7 +51,7 @@ class WebGPUAttributes {
|
|
|
51
51
|
|
|
52
52
|
} else if ( usage && usage !== data.usage ) {
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
this._destroyBuffers( data );
|
|
55
55
|
|
|
56
56
|
data = this._createBuffer( attribute, usage );
|
|
57
57
|
|
|
@@ -67,6 +67,53 @@ class WebGPUAttributes {
|
|
|
67
67
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
async getArrayBuffer( attribute ) {
|
|
71
|
+
|
|
72
|
+
const data = this.get( attribute );
|
|
73
|
+
const device = this.device;
|
|
74
|
+
|
|
75
|
+
const gpuBuffer = data.buffer;
|
|
76
|
+
const size = gpuBuffer.size;
|
|
77
|
+
|
|
78
|
+
let gpuReadBuffer = data.readBuffer;
|
|
79
|
+
let needsUnmap = true;
|
|
80
|
+
|
|
81
|
+
if ( gpuReadBuffer === null ) {
|
|
82
|
+
|
|
83
|
+
gpuReadBuffer = device.createBuffer( {
|
|
84
|
+
size,
|
|
85
|
+
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
|
|
86
|
+
} );
|
|
87
|
+
|
|
88
|
+
needsUnmap = false;
|
|
89
|
+
|
|
90
|
+
data.readBuffer = gpuReadBuffer;
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const cmdEncoder = device.createCommandEncoder( {} );
|
|
95
|
+
|
|
96
|
+
cmdEncoder.copyBufferToBuffer(
|
|
97
|
+
gpuBuffer,
|
|
98
|
+
0,
|
|
99
|
+
gpuReadBuffer,
|
|
100
|
+
0,
|
|
101
|
+
size
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
if ( needsUnmap ) gpuReadBuffer.unmap();
|
|
105
|
+
|
|
106
|
+
const gpuCommands = cmdEncoder.finish();
|
|
107
|
+
device.queue.submit( [ gpuCommands ] );
|
|
108
|
+
|
|
109
|
+
await gpuReadBuffer.mapAsync( GPUMapMode.READ );
|
|
110
|
+
|
|
111
|
+
const arrayBuffer = gpuReadBuffer.getMappedRange();
|
|
112
|
+
|
|
113
|
+
return new Float32Array( arrayBuffer );
|
|
114
|
+
|
|
115
|
+
}
|
|
116
|
+
|
|
70
117
|
_createBuffer( attribute, usage ) {
|
|
71
118
|
|
|
72
119
|
const array = attribute.array;
|
|
@@ -74,7 +121,7 @@ class WebGPUAttributes {
|
|
|
74
121
|
|
|
75
122
|
const buffer = this.device.createBuffer( {
|
|
76
123
|
size,
|
|
77
|
-
usage: usage | GPUBufferUsage.COPY_DST,
|
|
124
|
+
usage: usage | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,
|
|
78
125
|
mappedAtCreation: true
|
|
79
126
|
} );
|
|
80
127
|
|
|
@@ -87,6 +134,7 @@ class WebGPUAttributes {
|
|
|
87
134
|
return {
|
|
88
135
|
version: attribute.version,
|
|
89
136
|
buffer,
|
|
137
|
+
readBuffer: null,
|
|
90
138
|
usage
|
|
91
139
|
};
|
|
92
140
|
|
|
@@ -94,6 +142,8 @@ class WebGPUAttributes {
|
|
|
94
142
|
|
|
95
143
|
_writeBuffer( buffer, attribute ) {
|
|
96
144
|
|
|
145
|
+
const device = this.device;
|
|
146
|
+
|
|
97
147
|
const array = attribute.array;
|
|
98
148
|
const updateRange = attribute.updateRange;
|
|
99
149
|
|
|
@@ -101,7 +151,7 @@ class WebGPUAttributes {
|
|
|
101
151
|
|
|
102
152
|
// Not using update ranges
|
|
103
153
|
|
|
104
|
-
|
|
154
|
+
device.queue.writeBuffer(
|
|
105
155
|
buffer,
|
|
106
156
|
0,
|
|
107
157
|
array,
|
|
@@ -110,7 +160,7 @@ class WebGPUAttributes {
|
|
|
110
160
|
|
|
111
161
|
} else {
|
|
112
162
|
|
|
113
|
-
|
|
163
|
+
device.queue.writeBuffer(
|
|
114
164
|
buffer,
|
|
115
165
|
0,
|
|
116
166
|
array,
|
|
@@ -124,6 +174,14 @@ class WebGPUAttributes {
|
|
|
124
174
|
|
|
125
175
|
}
|
|
126
176
|
|
|
177
|
+
_destroyBuffers( { buffer, readBuffer } ) {
|
|
178
|
+
|
|
179
|
+
buffer.destroy();
|
|
180
|
+
|
|
181
|
+
if ( readBuffer !== null ) readBuffer.destroy();
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
127
185
|
}
|
|
128
186
|
|
|
129
187
|
export default WebGPUAttributes;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GPULoadOp, GPUStoreOp } from './constants.js';
|
|
2
|
-
import { Color, Mesh, BoxGeometry, BackSide } from 'three';
|
|
3
|
-
import { context, transformDirection, positionWorld, modelWorldMatrix, MeshBasicNodeMaterial } from 'three/nodes';
|
|
2
|
+
import { Color, Mesh, BoxGeometry, BackSide, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from 'three';
|
|
3
|
+
import { context, vec2, invert, texture, cubeTexture, transformDirection, positionWorld, modelWorldMatrix, viewportBottomLeft, equirectUV, MeshBasicNodeMaterial } from 'three/nodes';
|
|
4
4
|
|
|
5
5
|
let _clearAlpha;
|
|
6
6
|
const _clearColor = new Color();
|
|
@@ -45,7 +45,7 @@ class WebGPUBackground {
|
|
|
45
45
|
_clearAlpha = 1;
|
|
46
46
|
forceClear = true;
|
|
47
47
|
|
|
48
|
-
} else if ( background.isNode === true ) {
|
|
48
|
+
} else if ( background.isNode === true || background.isTexture === true ) {
|
|
49
49
|
|
|
50
50
|
_clearColor.copy( renderer._clearColor );
|
|
51
51
|
_clearAlpha = renderer._clearAlpha;
|
|
@@ -54,12 +54,41 @@ class WebGPUBackground {
|
|
|
54
54
|
|
|
55
55
|
if ( boxMesh === null ) {
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
let node = null;
|
|
58
|
+
|
|
59
|
+
if ( background.isCubeTexture === true ) {
|
|
60
|
+
|
|
61
|
+
node = cubeTexture( background, transformDirection( positionWorld, modelWorldMatrix ) );
|
|
62
|
+
|
|
63
|
+
} else if ( background.isTexture === true ) {
|
|
64
|
+
|
|
65
|
+
let nodeUV = null;
|
|
66
|
+
|
|
67
|
+
if ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping ) {
|
|
68
|
+
|
|
69
|
+
const dirNode = transformDirection( positionWorld, modelWorldMatrix );
|
|
70
|
+
|
|
71
|
+
nodeUV = equirectUV( dirNode );
|
|
72
|
+
nodeUV = vec2( nodeUV.x, invert( nodeUV.y ) );
|
|
73
|
+
|
|
74
|
+
} else {
|
|
75
|
+
|
|
76
|
+
nodeUV = viewportBottomLeft;
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
node = texture( background, nodeUV );
|
|
81
|
+
|
|
82
|
+
} else /*if ( background.isNode === true )*/ {
|
|
83
|
+
|
|
84
|
+
node = context( background, {
|
|
85
|
+
uvNode: transformDirection( positionWorld, modelWorldMatrix )
|
|
86
|
+
} );
|
|
87
|
+
|
|
88
|
+
}
|
|
60
89
|
|
|
61
90
|
const nodeMaterial = new MeshBasicNodeMaterial();
|
|
62
|
-
nodeMaterial.colorNode =
|
|
91
|
+
nodeMaterial.colorNode = node;
|
|
63
92
|
nodeMaterial.side = BackSide;
|
|
64
93
|
nodeMaterial.depthTest = false;
|
|
65
94
|
nodeMaterial.depthWrite = false;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GPUIndexFormat, GPUTextureFormat, GPUStoreOp } from './constants.js';
|
|
2
|
+
import WebGPUAnimation from './WebGPUAnimation.js';
|
|
2
3
|
import WebGPUObjects from './WebGPUObjects.js';
|
|
3
4
|
import WebGPUAttributes from './WebGPUAttributes.js';
|
|
4
5
|
import WebGPUGeometries from './WebGPUGeometries.js';
|
|
@@ -132,6 +133,8 @@ class WebGPURenderer {
|
|
|
132
133
|
this._textures = null;
|
|
133
134
|
this._background = null;
|
|
134
135
|
|
|
136
|
+
this._animation = new WebGPUAnimation();
|
|
137
|
+
|
|
135
138
|
this._renderPassDescriptor = null;
|
|
136
139
|
|
|
137
140
|
this._currentRenderState = null;
|
|
@@ -147,6 +150,8 @@ class WebGPURenderer {
|
|
|
147
150
|
|
|
148
151
|
this._renderTarget = null;
|
|
149
152
|
|
|
153
|
+
this._initialized = false;
|
|
154
|
+
|
|
150
155
|
// some parameters require default values other than "undefined"
|
|
151
156
|
|
|
152
157
|
this._parameters.antialias = ( parameters.antialias === true );
|
|
@@ -168,6 +173,12 @@ class WebGPURenderer {
|
|
|
168
173
|
|
|
169
174
|
async init() {
|
|
170
175
|
|
|
176
|
+
if ( this._initialized === true ) {
|
|
177
|
+
|
|
178
|
+
throw new Error( 'WebGPURenderer: Device has already been initialized.' );
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
|
|
171
182
|
const parameters = this._parameters;
|
|
172
183
|
|
|
173
184
|
const adapterOptions = {
|
|
@@ -192,7 +203,7 @@ class WebGPURenderer {
|
|
|
192
203
|
const context = ( parameters.context !== undefined ) ? parameters.context : this.domElement.getContext( 'webgpu' );
|
|
193
204
|
|
|
194
205
|
context.configure( {
|
|
195
|
-
device
|
|
206
|
+
device,
|
|
196
207
|
format: GPUTextureFormat.BGRA8Unorm, // this is the only valid context format right now (r121)
|
|
197
208
|
alphaMode: 'premultiplied'
|
|
198
209
|
} );
|
|
@@ -232,16 +243,21 @@ class WebGPURenderer {
|
|
|
232
243
|
this._setupColorBuffer();
|
|
233
244
|
this._setupDepthBuffer();
|
|
234
245
|
|
|
235
|
-
|
|
246
|
+
this._animation.setNodes( this._nodes );
|
|
247
|
+
this._animation.start();
|
|
248
|
+
|
|
249
|
+
this._initialized = true;
|
|
236
250
|
|
|
237
|
-
|
|
251
|
+
}
|
|
238
252
|
|
|
239
|
-
|
|
253
|
+
async render( scene, camera ) {
|
|
240
254
|
|
|
241
|
-
this.
|
|
255
|
+
if ( this._initialized === false ) return await this.init();
|
|
242
256
|
|
|
243
257
|
//
|
|
244
258
|
|
|
259
|
+
if ( this._animation.isAnimating === false ) this._nodes.updateFrame();
|
|
260
|
+
|
|
245
261
|
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
246
262
|
|
|
247
263
|
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
@@ -276,6 +292,8 @@ class WebGPURenderer {
|
|
|
276
292
|
|
|
277
293
|
if ( renderTarget !== null ) {
|
|
278
294
|
|
|
295
|
+
this._textures.initRenderTarget( renderTarget );
|
|
296
|
+
|
|
279
297
|
// @TODO: Support RenderTarget with antialiasing.
|
|
280
298
|
|
|
281
299
|
const renderTargetProperties = this._properties.get( renderTarget );
|
|
@@ -354,6 +372,24 @@ class WebGPURenderer {
|
|
|
354
372
|
|
|
355
373
|
}
|
|
356
374
|
|
|
375
|
+
setAnimationLoop( callback ) {
|
|
376
|
+
|
|
377
|
+
if ( this._initialized === false ) this.init();
|
|
378
|
+
|
|
379
|
+
const animation = this._animation;
|
|
380
|
+
|
|
381
|
+
animation.setAnimationLoop( callback );
|
|
382
|
+
|
|
383
|
+
( callback === null ) ? animation.stop() : animation.start();
|
|
384
|
+
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
async getArrayFromBuffer( attribute ) {
|
|
388
|
+
|
|
389
|
+
return await this._attributes.getArrayBuffer( attribute );
|
|
390
|
+
|
|
391
|
+
}
|
|
392
|
+
|
|
357
393
|
getContext() {
|
|
358
394
|
|
|
359
395
|
return this._context;
|
|
@@ -571,21 +607,20 @@ class WebGPURenderer {
|
|
|
571
607
|
this._renderStates.dispose();
|
|
572
608
|
this._textures.dispose();
|
|
573
609
|
|
|
610
|
+
this.setRenderTarget( null );
|
|
611
|
+
this.setAnimationLoop( null );
|
|
612
|
+
|
|
574
613
|
}
|
|
575
614
|
|
|
576
615
|
setRenderTarget( renderTarget ) {
|
|
577
616
|
|
|
578
617
|
this._renderTarget = renderTarget;
|
|
579
618
|
|
|
580
|
-
if ( renderTarget !== null ) {
|
|
581
|
-
|
|
582
|
-
this._textures.initRenderTarget( renderTarget );
|
|
583
|
-
|
|
584
|
-
}
|
|
585
|
-
|
|
586
619
|
}
|
|
587
620
|
|
|
588
|
-
compute( ...computeNodes ) {
|
|
621
|
+
async compute( ...computeNodes ) {
|
|
622
|
+
|
|
623
|
+
if ( this._initialized === false ) return await this.init();
|
|
589
624
|
|
|
590
625
|
const device = this._device;
|
|
591
626
|
const computePipelines = this._computePipelines;
|
|
@@ -57,28 +57,30 @@ const wgslTypeLib = {
|
|
|
57
57
|
const wgslMethods = {
|
|
58
58
|
dFdx: 'dpdx',
|
|
59
59
|
dFdy: 'dpdy',
|
|
60
|
+
mod: 'threejs_mod',
|
|
61
|
+
lessThanEqual: 'threejs_lessThanEqual',
|
|
60
62
|
inversesqrt: 'inverseSqrt'
|
|
61
63
|
};
|
|
62
64
|
|
|
63
65
|
const wgslPolyfill = {
|
|
64
66
|
lessThanEqual: new CodeNode( `
|
|
65
|
-
fn
|
|
67
|
+
fn threejs_lessThanEqual( a : vec3<f32>, b : vec3<f32> ) -> vec3<bool> {
|
|
66
68
|
|
|
67
69
|
return vec3<bool>( a.x <= b.x, a.y <= b.y, a.z <= b.z );
|
|
68
70
|
|
|
69
71
|
}
|
|
70
72
|
` ),
|
|
71
73
|
mod: new CodeNode( `
|
|
72
|
-
fn
|
|
74
|
+
fn threejs_mod( x : f32, y : f32 ) -> f32 {
|
|
73
75
|
|
|
74
76
|
return x - y * floor( x / y );
|
|
75
77
|
|
|
76
78
|
}
|
|
77
79
|
` ),
|
|
78
80
|
repeatWrapping: new CodeNode( `
|
|
79
|
-
fn
|
|
81
|
+
fn threejs_repeatWrapping( uv : vec2<f32>, dimension : vec2<u32> ) -> vec2<u32> {
|
|
80
82
|
|
|
81
|
-
let uvScaled = vec2<
|
|
83
|
+
let uvScaled = vec2<u32>( uv * vec2<f32>( dimension ) );
|
|
82
84
|
|
|
83
85
|
return ( ( uvScaled % dimension ) + dimension ) % dimension;
|
|
84
86
|
|
|
@@ -148,7 +150,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
148
150
|
|
|
149
151
|
const dimension = `textureDimensions( ${textureProperty}, 0 )`;
|
|
150
152
|
|
|
151
|
-
return `textureLoad( ${textureProperty},
|
|
153
|
+
return `textureLoad( ${textureProperty}, threejs_repeatWrapping( ${uvSnippet}, ${dimension} ), 0 )`;
|
|
152
154
|
|
|
153
155
|
}
|
|
154
156
|
|
|
@@ -166,7 +168,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
166
168
|
|
|
167
169
|
const dimension = `textureDimensions( ${textureProperty}, 0 )`;
|
|
168
170
|
|
|
169
|
-
return `textureLoad( ${textureProperty},
|
|
171
|
+
return `textureLoad( ${textureProperty}, threejs_repeatWrapping( ${uvSnippet}, ${dimension} ), i32( ${biasSnippet} ) )`;
|
|
170
172
|
|
|
171
173
|
}
|
|
172
174
|
|
|
@@ -198,7 +200,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
198
200
|
|
|
199
201
|
getPropertyName( node, shaderStage = this.shaderStage ) {
|
|
200
202
|
|
|
201
|
-
if ( node.isNodeVarying === true ) {
|
|
203
|
+
if ( node.isNodeVarying === true && node.needsInterpolation === true ) {
|
|
202
204
|
|
|
203
205
|
if ( shaderStage === 'vertex' ) {
|
|
204
206
|
|
|
@@ -397,6 +399,18 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
397
399
|
|
|
398
400
|
}
|
|
399
401
|
|
|
402
|
+
getFragCoord() {
|
|
403
|
+
|
|
404
|
+
return this.getBuiltin( 'position', 'fragCoord', 'vec4<f32>', 'fragment' );
|
|
405
|
+
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
isFlipY() {
|
|
409
|
+
|
|
410
|
+
return false;
|
|
411
|
+
|
|
412
|
+
}
|
|
413
|
+
|
|
400
414
|
getAttributes( shaderStage ) {
|
|
401
415
|
|
|
402
416
|
const snippets = [];
|
|
@@ -461,24 +475,42 @@ class WebGPUNodeBuilder extends NodeBuilder {
|
|
|
461
475
|
this.getBuiltin( 'position', 'Vertex', 'vec4<f32>', 'vertex' );
|
|
462
476
|
|
|
463
477
|
const varyings = this.varyings;
|
|
478
|
+
const vars = this.vars[ shaderStage ];
|
|
464
479
|
|
|
465
480
|
for ( let index = 0; index < varyings.length; index ++ ) {
|
|
466
481
|
|
|
467
482
|
const varying = varyings[ index ];
|
|
468
483
|
|
|
469
|
-
|
|
484
|
+
if ( varying.needsInterpolation ) {
|
|
485
|
+
|
|
486
|
+
snippets.push( `@location( ${index} ) ${ varying.name } : ${ this.getType( varying.type ) }` );
|
|
487
|
+
|
|
488
|
+
} else if ( vars.includes( varying ) === false ) {
|
|
489
|
+
|
|
490
|
+
vars.push( varying );
|
|
491
|
+
|
|
492
|
+
}
|
|
470
493
|
|
|
471
494
|
}
|
|
472
495
|
|
|
473
496
|
} else if ( shaderStage === 'fragment' ) {
|
|
474
497
|
|
|
475
498
|
const varyings = this.varyings;
|
|
499
|
+
const vars = this.vars[ shaderStage ];
|
|
476
500
|
|
|
477
501
|
for ( let index = 0; index < varyings.length; index ++ ) {
|
|
478
502
|
|
|
479
503
|
const varying = varyings[ index ];
|
|
480
504
|
|
|
481
|
-
|
|
505
|
+
if ( varying.needsInterpolation ) {
|
|
506
|
+
|
|
507
|
+
snippets.push( `@location( ${index} ) ${ varying.name } : ${ this.getType( varying.type ) }` );
|
|
508
|
+
|
|
509
|
+
} else if ( vars.includes( varying ) === false ) {
|
|
510
|
+
|
|
511
|
+
vars.push( varying );
|
|
512
|
+
|
|
513
|
+
}
|
|
482
514
|
|
|
483
515
|
}
|
|
484
516
|
|
|
@@ -45,8 +45,6 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in Geometric
|
|
|
45
45
|
|
|
46
46
|
#define RE_Direct RE_Direct_BlinnPhong
|
|
47
47
|
#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong
|
|
48
|
-
|
|
49
|
-
#define Material_LightProbeLOD( material ) (0)
|
|
50
48
|
`;
|
|
51
49
|
|
|
52
50
|
const mmd_toon_matcap_fragment = /* glsl */`
|