@needle-tools/three 0.145.2 → 0.146.1
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 +3559 -6924
- package/build/three.js +3559 -6924
- package/build/three.min.js +1 -2
- package/build/three.module.js +732 -339
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +49 -66
- 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 +85 -95
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +84 -169
- 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 +143 -261
- 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 +110 -25
- 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 +22 -33
- package/examples/js/interactive/InteractiveGroup.js +6 -12
- 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 +38 -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 +201 -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 +286 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +354 -405
- 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/MaterialXLoader.js +392 -0
- 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 +9 -39
- 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 +183 -139
- 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 +14 -18
- 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/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 -6
- 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 +234 -168
- 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 +1 -1
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/exporters/GLTFExporter.js +17 -131
- package/examples/jsm/exporters/USDZExporter.js +94 -28
- package/examples/jsm/interactive/HTMLMesh.js +2 -0
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +16 -2
- package/examples/jsm/loaders/GLTFLoader.js +204 -377
- 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 +31 -16
- package/examples/jsm/nodes/Nodes.js +14 -2
- 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 +1 -1
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
- 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/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- 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/MaterialXNodes.js +6 -2
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -0
- package/examples/jsm/nodes/math/OperatorNode.js +6 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
- 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/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +1 -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 +10 -0
- 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 +39 -16
- 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 +35 -5
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/utils/TextureUtils.js +85 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
- package/package.json +11 -12
- package/src/Three.js +1 -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/extras/Earcut.js +67 -67
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/SpotLightHelper.js +4 -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/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +19 -26
- 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/packing.glsl.js +8 -0
- 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.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/WebGLCubeUVMaps.js +1 -1
- 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 +31 -1
- package/src/renderers/webgl/WebGLTextures.js +71 -18
- package/src/renderers/webgl/WebGLUniforms.js +116 -20
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +85 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- 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
|
@@ -13,7 +13,6 @@ export const shaderStages = [ ...defaultShaderStages, 'compute' ];
|
|
|
13
13
|
export const vector = [ 'x', 'y', 'z', 'w' ];
|
|
14
14
|
|
|
15
15
|
const typeFromLength = new Map();
|
|
16
|
-
typeFromLength.set( 1, 'float' );
|
|
17
16
|
typeFromLength.set( 2, 'vec2' );
|
|
18
17
|
typeFromLength.set( 3, 'vec3' );
|
|
19
18
|
typeFromLength.set( 4, 'vec4' );
|
|
@@ -117,7 +116,7 @@ class NodeBuilder {
|
|
|
117
116
|
|
|
118
117
|
const updateType = node.getUpdateType( this );
|
|
119
118
|
|
|
120
|
-
if ( updateType !== NodeUpdateType.
|
|
119
|
+
if ( updateType !== NodeUpdateType.NONE ) {
|
|
121
120
|
|
|
122
121
|
this.updateNodes.push( node );
|
|
123
122
|
|
|
@@ -181,6 +180,18 @@ class NodeBuilder {
|
|
|
181
180
|
|
|
182
181
|
}
|
|
183
182
|
|
|
183
|
+
getFragCoord() {
|
|
184
|
+
|
|
185
|
+
console.warn( 'Abstract function.' );
|
|
186
|
+
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
isFlipY() {
|
|
190
|
+
|
|
191
|
+
return false;
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
184
195
|
getTexture( /* textureProperty, uvSnippet */ ) {
|
|
185
196
|
|
|
186
197
|
console.warn( 'Abstract function.' );
|
|
@@ -353,6 +364,8 @@ class NodeBuilder {
|
|
|
353
364
|
|
|
354
365
|
type = this.getVectorType( type );
|
|
355
366
|
|
|
367
|
+
if ( type === 'float' || type === 'bool' || type === 'int' || type === 'uint' ) return type;
|
|
368
|
+
|
|
356
369
|
const componentType = /(b|i|u|)(vec|mat)([2-4])/.exec( type );
|
|
357
370
|
|
|
358
371
|
if ( componentType === null ) return null;
|
|
@@ -374,9 +387,12 @@ class NodeBuilder {
|
|
|
374
387
|
|
|
375
388
|
}
|
|
376
389
|
|
|
377
|
-
getTypeFromLength( length ) {
|
|
390
|
+
getTypeFromLength( length, componentType = 'float' ) {
|
|
378
391
|
|
|
379
|
-
|
|
392
|
+
if ( length === 1 ) return componentType;
|
|
393
|
+
const baseType = typeFromLength.get( length );
|
|
394
|
+
const prefix = componentType === 'float' ? '' : componentType[ 0 ];
|
|
395
|
+
return prefix + baseType;
|
|
380
396
|
|
|
381
397
|
}
|
|
382
398
|
|
|
@@ -400,6 +416,22 @@ class NodeBuilder {
|
|
|
400
416
|
|
|
401
417
|
}
|
|
402
418
|
|
|
419
|
+
changeComponentType( type, newComponentType ) {
|
|
420
|
+
|
|
421
|
+
return this.getTypeFromLength( this.getTypeLength( type ), newComponentType );
|
|
422
|
+
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
getIntegerType( type ) {
|
|
426
|
+
|
|
427
|
+
const componentType = this.getComponentType( type );
|
|
428
|
+
|
|
429
|
+
if ( componentType === 'int' || componentType === 'uint' ) return type;
|
|
430
|
+
|
|
431
|
+
return this.changeComponentType( type, 'int' );
|
|
432
|
+
|
|
433
|
+
}
|
|
434
|
+
|
|
403
435
|
getDataFromNode( node, shaderStage = this.shaderStage ) {
|
|
404
436
|
|
|
405
437
|
let nodeData = this.nodesData.get( node );
|
|
@@ -22,7 +22,7 @@ class NodeFrame {
|
|
|
22
22
|
|
|
23
23
|
updateNode( node ) {
|
|
24
24
|
|
|
25
|
-
if ( node.updateType === NodeUpdateType.
|
|
25
|
+
if ( node.updateType === NodeUpdateType.FRAME ) {
|
|
26
26
|
|
|
27
27
|
if ( this.updateMap.get( node ) !== this.frameId ) {
|
|
28
28
|
|
|
@@ -32,7 +32,7 @@ class NodeFrame {
|
|
|
32
32
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
} else if ( node.updateType === NodeUpdateType.
|
|
35
|
+
} else if ( node.updateType === NodeUpdateType.OBJECT ) {
|
|
36
36
|
|
|
37
37
|
node.update( this );
|
|
38
38
|
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
import NodeVar from './NodeVar.js';
|
|
2
|
+
|
|
3
|
+
class NodeVarying extends NodeVar {
|
|
2
4
|
|
|
3
5
|
constructor( name, type ) {
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
super( name, type );
|
|
6
8
|
|
|
7
|
-
this.
|
|
8
|
-
|
|
9
|
+
this.needsInterpolation = false;
|
|
10
|
+
|
|
11
|
+
this.isNodeVarying = true;
|
|
9
12
|
|
|
10
13
|
}
|
|
11
14
|
|
|
@@ -28,22 +28,24 @@ class VaryingNode extends Node {
|
|
|
28
28
|
|
|
29
29
|
generate( builder ) {
|
|
30
30
|
|
|
31
|
+
const { name, node } = this;
|
|
31
32
|
const type = this.getNodeType( builder );
|
|
32
|
-
const node = this.node;
|
|
33
|
-
const name = this.name;
|
|
34
33
|
|
|
35
34
|
const nodeVarying = builder.getVaryingFromNode( this, type );
|
|
36
35
|
|
|
36
|
+
// this property can be used to check if the varying can be optimized for a var
|
|
37
|
+
nodeVarying.needsInterpolation ||= builder.shaderStage === 'fragment';
|
|
38
|
+
|
|
37
39
|
if ( name !== null ) {
|
|
38
40
|
|
|
39
41
|
nodeVarying.name = name;
|
|
40
42
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
const propertyName = builder.getPropertyName( nodeVarying, NodeShaderStage.
|
|
45
|
+
const propertyName = builder.getPropertyName( nodeVarying, NodeShaderStage.VERTEX );
|
|
44
46
|
|
|
45
47
|
// force node run in vertex stage
|
|
46
|
-
builder.flowNodeFromShaderStage( NodeShaderStage.
|
|
48
|
+
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, node, type, propertyName );
|
|
47
49
|
|
|
48
50
|
return builder.getPropertyName( nodeVarying );
|
|
49
51
|
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
export const NodeShaderStage = {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
VERTEX: 'vertex',
|
|
3
|
+
FRAGMENT: 'fragment'
|
|
4
4
|
};
|
|
5
5
|
|
|
6
6
|
export const NodeUpdateType = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
NONE: 'none',
|
|
8
|
+
FRAME: 'frame',
|
|
9
|
+
OBJECT: 'object'
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
export const NodeType = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
BOOLEAN: 'bool',
|
|
14
|
+
INTEGER: 'int',
|
|
15
|
+
FLOAT: 'float',
|
|
16
|
+
VECTOR2: 'vec2',
|
|
17
|
+
VECTOR3: 'vec3',
|
|
18
|
+
VECTOR4: 'vec4',
|
|
19
|
+
MATRIX3: 'mat3',
|
|
20
|
+
MATRIX4: 'mat4'
|
|
21
21
|
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import TempNode from '../core/Node.js';
|
|
2
|
+
import { mul, floor, reciprocal } from '../shadernode/ShaderNodeBaseElements.js';
|
|
3
|
+
|
|
4
|
+
class PosterizeNode extends TempNode {
|
|
5
|
+
|
|
6
|
+
constructor( sourceNode, stepsNode ) {
|
|
7
|
+
|
|
8
|
+
super();
|
|
9
|
+
|
|
10
|
+
this.sourceNode = sourceNode;
|
|
11
|
+
this.stepsNode = stepsNode;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
construct() {
|
|
16
|
+
|
|
17
|
+
const { sourceNode, stepsNode } = this;
|
|
18
|
+
|
|
19
|
+
return mul( floor( mul( sourceNode, stepsNode ) ), reciprocal( stepsNode ) );
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default PosterizeNode;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { uniform, div, vec2, invert } from '../shadernode/ShaderNodeBaseElements.js';
|
|
3
|
+
import { Vector2 } from 'three';
|
|
4
|
+
import { NodeUpdateType } from '../core/constants.js';
|
|
5
|
+
|
|
6
|
+
let resolution;
|
|
7
|
+
|
|
8
|
+
class ViewportNode extends Node {
|
|
9
|
+
|
|
10
|
+
static COORDINATE = 'coordinate';
|
|
11
|
+
static RESOLUTION = 'resolution';
|
|
12
|
+
static TOP_LEFT = 'topLeft';
|
|
13
|
+
static BOTTOM_LEFT = 'bottomLeft';
|
|
14
|
+
static TOP_RIGHT = 'topRight';
|
|
15
|
+
static BOTTOM_RIGHT = 'bottomRight';
|
|
16
|
+
|
|
17
|
+
constructor( scope ) {
|
|
18
|
+
|
|
19
|
+
super();
|
|
20
|
+
|
|
21
|
+
this.scope = scope;
|
|
22
|
+
|
|
23
|
+
this.isViewportNode = true;
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
getNodeType() {
|
|
28
|
+
|
|
29
|
+
return this.scope === ViewportNode.COORDINATE ? 'vec4' : 'vec2';
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getUpdateType() {
|
|
34
|
+
|
|
35
|
+
let updateType = NodeUpdateType.NONE;
|
|
36
|
+
|
|
37
|
+
if ( this.scope === ViewportNode.RESOLUTION ) {
|
|
38
|
+
|
|
39
|
+
updateType = NodeUpdateType.FRAME;
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
this.updateType = updateType;
|
|
44
|
+
|
|
45
|
+
return updateType;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
update( { renderer } ) {
|
|
50
|
+
|
|
51
|
+
renderer.getSize( resolution );
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
construct( builder ) {
|
|
56
|
+
|
|
57
|
+
const scope = this.scope;
|
|
58
|
+
|
|
59
|
+
if ( scope === ViewportNode.COORDINATE ) return;
|
|
60
|
+
|
|
61
|
+
let output = null;
|
|
62
|
+
|
|
63
|
+
if ( scope === ViewportNode.RESOLUTION ) {
|
|
64
|
+
|
|
65
|
+
resolution ||= new Vector2();
|
|
66
|
+
|
|
67
|
+
output = uniform( resolution );
|
|
68
|
+
|
|
69
|
+
} else {
|
|
70
|
+
|
|
71
|
+
const coordinateNode = vec2( new ViewportNode( ViewportNode.COORDINATE ) );
|
|
72
|
+
const resolutionNode = new ViewportNode( ViewportNode.RESOLUTION );
|
|
73
|
+
|
|
74
|
+
output = div( coordinateNode, resolutionNode );
|
|
75
|
+
|
|
76
|
+
let outX = output.x;
|
|
77
|
+
let outY = output.y;
|
|
78
|
+
|
|
79
|
+
if ( /top/i.test( scope ) && builder.isFlipY() ) outY = invert( outY );
|
|
80
|
+
else if ( /bottom/i.test( scope ) && builder.isFlipY() === false ) outY = invert( outY );
|
|
81
|
+
|
|
82
|
+
if ( /right/i.test( scope ) ) outX = invert( outX );
|
|
83
|
+
|
|
84
|
+
output = vec2( outX, outY );
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return output;
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
generate( builder ) {
|
|
93
|
+
|
|
94
|
+
if ( this.scope === ViewportNode.COORDINATE ) {
|
|
95
|
+
|
|
96
|
+
return builder.getFragCoord();
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return super.generate( builder );
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export default ViewportNode;
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
LineBasicNodeMaterial,
|
|
5
5
|
MeshBasicNodeMaterial,
|
|
6
6
|
MeshStandardNodeMaterial,
|
|
7
|
+
MeshPhysicalNodeMaterial,
|
|
7
8
|
PointsNodeMaterial,
|
|
8
9
|
SpriteNodeMaterial
|
|
9
10
|
} from '../materials/Materials.js';
|
|
@@ -17,8 +18,9 @@ MaterialLoader.createMaterialFromType = function ( type ) {
|
|
|
17
18
|
LineBasicNodeMaterial,
|
|
18
19
|
MeshBasicNodeMaterial,
|
|
19
20
|
MeshStandardNodeMaterial,
|
|
21
|
+
MeshPhysicalNodeMaterial,
|
|
20
22
|
PointsNodeMaterial,
|
|
21
|
-
SpriteNodeMaterial
|
|
23
|
+
SpriteNodeMaterial
|
|
22
24
|
};
|
|
23
25
|
|
|
24
26
|
if ( materialLib[ type ] !== undefined ) {
|
|
@@ -32,19 +32,21 @@ NodeMaterial.fromMaterial = function ( material ) {
|
|
|
32
32
|
|
|
33
33
|
if ( materialLib[ type ] === undefined ) {
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
if ( material.isNodeMaterial !== true ) {
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
throw new Error( `NodeMaterial: Material "${ material.type }" is not compatible.` );
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
}
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
return material; // is already a node material
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
}
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
const nodeMaterial = new materialLib[ type ]();
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
for ( const key in material ) {
|
|
48
|
+
|
|
49
|
+
nodeMaterial[ key ] = material[ key ];
|
|
48
50
|
|
|
49
51
|
}
|
|
50
52
|
|
|
@@ -3,7 +3,7 @@ import { getNodesKeys, getCacheKey } from '../core/NodeUtils.js';
|
|
|
3
3
|
import ExpressionNode from '../core/ExpressionNode.js';
|
|
4
4
|
import {
|
|
5
5
|
float, vec3, vec4,
|
|
6
|
-
assign, label, mul, bypass,
|
|
6
|
+
assign, label, mul, bypass, attribute,
|
|
7
7
|
positionLocal, skinning, instance, modelViewProjection, lightingContext, colorSpace,
|
|
8
8
|
materialAlphaTest, materialColor, materialOpacity
|
|
9
9
|
} from '../shadernode/ShaderNodeElements.js';
|
|
@@ -80,6 +80,14 @@ class NodeMaterial extends ShaderMaterial {
|
|
|
80
80
|
let colorNode = vec4( this.colorNode || materialColor );
|
|
81
81
|
let opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;
|
|
82
82
|
|
|
83
|
+
// VERTEX COLORS
|
|
84
|
+
|
|
85
|
+
if ( this.vertexColors === true && builder.geometry.hasAttribute( 'color' ) ) {
|
|
86
|
+
|
|
87
|
+
colorNode = vec4( mul( colorNode.xyz, attribute( 'color' ) ), colorNode.a );
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
83
91
|
// COLOR
|
|
84
92
|
|
|
85
93
|
colorNode = builder.addFlow( 'fragment', label( colorNode, 'Color' ) );
|
|
@@ -5,7 +5,8 @@ import {
|
|
|
5
5
|
mx_fractal_noise_float as fractal_noise_float, mx_fractal_noise_vec2 as fractal_noise_vec2, mx_fractal_noise_vec3 as fractal_noise_vec3, mx_fractal_noise_vec4 as fractal_noise_vec4
|
|
6
6
|
} from './lib/mx_noise.js';
|
|
7
7
|
import { mx_hsvtorgb, mx_rgbtohsv } from './lib/mx_hsv.js';
|
|
8
|
-
import {
|
|
8
|
+
import { mx_srgb_texture_to_lin_rec709 } from './lib/mx_transform_color.js';
|
|
9
|
+
import { nodeObject, float, vec2, vec4, add, sub, mul, mix, clamp, uv, length, smoothstep, dFdx, dFdy, sign, pow, abs, convert } from '../shadernode/ShaderNodeElements.js';
|
|
9
10
|
|
|
10
11
|
export const mx_aastep = ( threshold, value ) => {
|
|
11
12
|
|
|
@@ -28,6 +29,9 @@ export const mx_splittb = ( valuet, valueb, center, texcoord = uv() ) => _split(
|
|
|
28
29
|
|
|
29
30
|
export const mx_transform_uv = ( uv_scale = 1, uv_offset = 0, uv_geo = uv() ) => add( mul( uv_geo, uv_scale ), uv_offset );
|
|
30
31
|
|
|
32
|
+
export const mx_safepower = ( in1, in2 = 1 ) => mul( sign( in1 ), pow( abs( in1 ), in2 ) );
|
|
33
|
+
export const mx_contrast = ( input, amount = 1, pivot = .5 ) => add( mul( sub( input, pivot ), amount ), pivot );
|
|
34
|
+
|
|
31
35
|
export const mx_noise_float = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => add( mul( amplitude, mx_perlin_noise_float( convert( texcoord, 'vec2|vec3' ) ) ), pivot );
|
|
32
36
|
export const mx_noise_vec2 = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => add( mul( amplitude, mx_perlin_noise_vec2( convert( texcoord, 'vec2|vec3' ) ) ), pivot );
|
|
33
37
|
export const mx_noise_vec3 = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => add( mul( amplitude, mx_perlin_noise_vec3( convert( texcoord, 'vec2|vec3' ) ) ), pivot );
|
|
@@ -52,4 +56,4 @@ export const mx_fractal_noise_vec2 = ( position = uv(), octaves = 3, lacunarity
|
|
|
52
56
|
export const mx_fractal_noise_vec3 = ( position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mul( fractal_noise_vec3( position, octaves, lacunarity, diminish ), amplitude );
|
|
53
57
|
export const mx_fractal_noise_vec4 = ( position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mul( fractal_noise_vec4( position, octaves, lacunarity, diminish ), amplitude );
|
|
54
58
|
|
|
55
|
-
export { mx_hsvtorgb, mx_rgbtohsv };
|
|
59
|
+
export { mx_hsvtorgb, mx_rgbtohsv, mx_srgb_texture_to_lin_rec709 };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { code, fn } from '../../Nodes.js';
|
|
2
|
+
|
|
3
|
+
// Original shader code from:
|
|
4
|
+
// https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_transform_color.glsl
|
|
5
|
+
|
|
6
|
+
export const mx_transform_color = code( `#define M_AP1_TO_REC709 mat3(1.705079555511475, -0.1297005265951157, -0.02416634373366833, -0.6242334842681885, 1.138468623161316, -0.1246141716837883, -0.0808461606502533, -0.008768022060394287, 1.148780584335327)
|
|
7
|
+
|
|
8
|
+
vec3 mx_srgb_texture_to_lin_rec709(vec3 color)
|
|
9
|
+
{
|
|
10
|
+
bvec3 isAbove = greaterThan(color, vec3(0.04045));
|
|
11
|
+
vec3 linSeg = color / 12.92;
|
|
12
|
+
vec3 powSeg = pow(max(color + vec3(0.055), vec3(0.0)) / 1.055, vec3(2.4));
|
|
13
|
+
return mix(linSeg, powSeg, isAbove);
|
|
14
|
+
}` );
|
|
15
|
+
|
|
16
|
+
const includes = [ mx_transform_color ];
|
|
17
|
+
|
|
18
|
+
export const mx_srgb_texture_to_lin_rec709 = fn( 'vec3 mx_srgb_texture_to_lin_rec709( vec3 color )', includes );
|
|
@@ -33,6 +33,7 @@ class MathNode extends TempNode {
|
|
|
33
33
|
static DFDX = 'dFdx';
|
|
34
34
|
static DFDY = 'dFdy';
|
|
35
35
|
static ROUND = 'round';
|
|
36
|
+
static RECIPROCAL = 'reciprocal';
|
|
36
37
|
|
|
37
38
|
// 2 inputs
|
|
38
39
|
|
|
@@ -159,6 +160,10 @@ class MathNode extends TempNode {
|
|
|
159
160
|
|
|
160
161
|
return builder.format( '( 1.0 - ' + a.build( builder, inputType ) + ' )', type, output );
|
|
161
162
|
|
|
163
|
+
} else if ( method === MathNode.RECIPROCAL ) {
|
|
164
|
+
|
|
165
|
+
return builder.format( '( 1.0 / ' + a.build( builder, inputType ) + ' )', type, output );
|
|
166
|
+
|
|
162
167
|
} else {
|
|
163
168
|
|
|
164
169
|
const params = [];
|
|
@@ -47,7 +47,7 @@ class OperatorNode extends TempNode {
|
|
|
47
47
|
|
|
48
48
|
} else if ( op === '&' || op === '|' || op === '^' || op === '>>' || op === '<<' ) {
|
|
49
49
|
|
|
50
|
-
return
|
|
50
|
+
return builder.getIntegerType( typeA );
|
|
51
51
|
|
|
52
52
|
} else if ( op === '==' || op === '&&' || op === '||' || op === '^^' ) {
|
|
53
53
|
|
|
@@ -124,6 +124,11 @@ class OperatorNode extends TempNode {
|
|
|
124
124
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
} else if ( op === '>>' || op === '<<' ) {
|
|
128
|
+
|
|
129
|
+
typeA = type;
|
|
130
|
+
typeB = builder.changeComponentType( typeB, 'uint' );
|
|
131
|
+
|
|
127
132
|
} else if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) {
|
|
128
133
|
|
|
129
134
|
// matrix x vector
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
1
2
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
2
3
|
import ConvertNode from '../utils/ConvertNode.js';
|
|
3
4
|
import JoinNode from '../utils/JoinNode.js';
|
|
@@ -147,31 +148,43 @@ const ShaderNodeImmutable = function ( NodeClass, ...params ) {
|
|
|
147
148
|
|
|
148
149
|
};
|
|
149
150
|
|
|
150
|
-
|
|
151
|
+
class ShaderNodeInternal extends Node {
|
|
152
|
+
|
|
153
|
+
constructor( jsFunc ) {
|
|
151
154
|
|
|
152
|
-
|
|
155
|
+
super();
|
|
153
156
|
|
|
154
|
-
|
|
157
|
+
this._jsFunc = jsFunc;
|
|
155
158
|
|
|
156
|
-
|
|
159
|
+
}
|
|
157
160
|
|
|
158
|
-
|
|
161
|
+
call( inputs, builder ) {
|
|
159
162
|
|
|
160
|
-
|
|
163
|
+
inputs = nodeObjects( inputs );
|
|
164
|
+
|
|
165
|
+
return nodeObject( this._jsFunc( inputs, builder ) );
|
|
166
|
+
|
|
167
|
+
}
|
|
161
168
|
|
|
162
|
-
|
|
169
|
+
generate( builder, output ) {
|
|
163
170
|
|
|
164
|
-
call
|
|
171
|
+
const nodeCall = this.call( {}, builder );
|
|
165
172
|
|
|
166
|
-
|
|
173
|
+
if ( nodeCall === undefined ) {
|
|
167
174
|
|
|
168
|
-
return
|
|
175
|
+
return '';
|
|
169
176
|
|
|
170
177
|
}
|
|
171
178
|
|
|
172
|
-
|
|
179
|
+
return builder.format( nodeCall.build( builder ), nodeCall.getNodeType( builder ), output );
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const ShaderNodeScript = function ( jsFunc ) {
|
|
173
186
|
|
|
174
|
-
return
|
|
187
|
+
return new ShaderNodeInternal( jsFunc );
|
|
175
188
|
|
|
176
189
|
};
|
|
177
190
|
|
|
@@ -253,7 +266,7 @@ export const ConvertType = function ( type, cacheMap = null ) {
|
|
|
253
266
|
|
|
254
267
|
}
|
|
255
268
|
|
|
256
|
-
return nodeObject( new
|
|
269
|
+
return nodeObject( new JoinNode( nodes, type ) );
|
|
257
270
|
|
|
258
271
|
}
|
|
259
272
|
|
|
@@ -181,6 +181,7 @@ export const invert = nodeProxy( MathNode, MathNode.INVERT );
|
|
|
181
181
|
export const dFdx = nodeProxy( MathNode, MathNode.DFDX );
|
|
182
182
|
export const dFdy = nodeProxy( MathNode, MathNode.DFDY );
|
|
183
183
|
export const round = nodeProxy( MathNode, MathNode.ROUND );
|
|
184
|
+
export const reciprocal = nodeProxy( MathNode, MathNode.RECIPROCAL );
|
|
184
185
|
|
|
185
186
|
export const atan2 = nodeProxy( MathNode, MathNode.ATAN2 );
|
|
186
187
|
export const min = nodeProxy( MathNode, MathNode.MIN );
|
|
@@ -265,6 +266,7 @@ export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITI
|
|
|
265
266
|
export const positionGeometry = nodeImmutable( PositionNode, PositionNode.GEOMETRY );
|
|
266
267
|
export const positionLocal = nodeImmutable( PositionNode, PositionNode.LOCAL );
|
|
267
268
|
export const positionWorld = nodeImmutable( PositionNode, PositionNode.WORLD );
|
|
269
|
+
export const positionWorldDirection = nodeImmutable( PositionNode, PositionNode.WORLD_DIRECTION );
|
|
268
270
|
export const positionView = nodeImmutable( PositionNode, PositionNode.VIEW );
|
|
269
271
|
export const positionViewDirection = nodeImmutable( PositionNode, PositionNode.VIEW_DIRECTION );
|
|
270
272
|
|
|
@@ -9,7 +9,9 @@ import BlendModeNode from '../display/BlendModeNode.js';
|
|
|
9
9
|
import ColorAdjustmentNode from '../display/ColorAdjustmentNode.js';
|
|
10
10
|
import ColorSpaceNode from '../display/ColorSpaceNode.js';
|
|
11
11
|
import NormalMapNode from '../display/NormalMapNode.js';
|
|
12
|
+
import PosterizeNode from '../display/PosterizeNode.js';
|
|
12
13
|
import ToneMappingNode from '../display/ToneMappingNode.js';
|
|
14
|
+
import ViewportNode from '../display/ViewportNode.js';
|
|
13
15
|
|
|
14
16
|
// lighting
|
|
15
17
|
import LightsNode from '../lighting/LightsNode.js';
|
|
@@ -17,6 +19,7 @@ import LightsNode from '../lighting/LightsNode.js';
|
|
|
17
19
|
import LightingContextNode from '../lighting/LightingContextNode.js';
|
|
18
20
|
|
|
19
21
|
// utils
|
|
22
|
+
import EquirectUVNode from '../utils/EquirectUVNode.js';
|
|
20
23
|
import MatcapUVNode from '../utils/MatcapUVNode.js';
|
|
21
24
|
import MaxMipLevelNode from '../utils/MaxMipLevelNode.js';
|
|
22
25
|
import OscNode from '../utils/OscNode.js';
|
|
@@ -24,6 +27,7 @@ import RemapNode from '../utils/RemapNode.js';
|
|
|
24
27
|
import RotateUVNode from '../utils/RotateUVNode.js';
|
|
25
28
|
import SpriteSheetUVNode from '../utils/SpriteSheetUVNode.js';
|
|
26
29
|
import TimerNode from '../utils/TimerNode.js';
|
|
30
|
+
import TriplanarTexturesNode from '../utils/TriplanarTexturesNode.js';
|
|
27
31
|
|
|
28
32
|
// geometry
|
|
29
33
|
import RangeNode from '../geometry/RangeNode.js';
|
|
@@ -87,6 +91,15 @@ export const colorSpace = ( node, encoding ) => nodeObject( new ColorSpaceNode(
|
|
|
87
91
|
export const normalMap = nodeProxy( NormalMapNode );
|
|
88
92
|
export const toneMapping = ( mapping, exposure, color ) => nodeObject( new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) ) );
|
|
89
93
|
|
|
94
|
+
export const posterize = nodeProxy( PosterizeNode );
|
|
95
|
+
|
|
96
|
+
export const viewportCoordinate = nodeImmutable( ViewportNode, ViewportNode.COORDINATE );
|
|
97
|
+
export const viewportResolution = nodeImmutable( ViewportNode, ViewportNode.RESOLUTION );
|
|
98
|
+
export const viewportTopLeft = nodeImmutable( ViewportNode, ViewportNode.TOP_LEFT );
|
|
99
|
+
export const viewportBottomLeft = nodeImmutable( ViewportNode, ViewportNode.BOTTOM_LEFT );
|
|
100
|
+
export const viewportTopRight = nodeImmutable( ViewportNode, ViewportNode.TOP_RIGHT );
|
|
101
|
+
export const viewportBottomRight = nodeImmutable( ViewportNode, ViewportNode.BOTTOM_RIGHT );
|
|
102
|
+
|
|
90
103
|
// lighting
|
|
91
104
|
|
|
92
105
|
//export const lighting = nodeProxy( LightingNode ); // abstract
|
|
@@ -97,6 +110,8 @@ export const lightingContext = nodeProxy( LightingContextNode );
|
|
|
97
110
|
// utils
|
|
98
111
|
|
|
99
112
|
export const matcapUV = nodeImmutable( MatcapUVNode );
|
|
113
|
+
export const equirectUV = nodeProxy( EquirectUVNode );
|
|
114
|
+
|
|
100
115
|
export const maxMipLevel = nodeProxy( MaxMipLevelNode );
|
|
101
116
|
|
|
102
117
|
export const oscSine = nodeProxy( OscNode, OscNode.SINE );
|
|
@@ -117,6 +132,9 @@ export const timerGlobal = ( timeScale, value = 0 ) => nodeObject( new TimerNode
|
|
|
117
132
|
export const timerDelta = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.DELTA, timeScale, value ) );
|
|
118
133
|
export const frameId = nodeImmutable( TimerNode, TimerNode.FRAME );
|
|
119
134
|
|
|
135
|
+
export const triplanarTextures = nodeProxy( TriplanarTexturesNode );
|
|
136
|
+
export const triplanarTexture = ( texture, ...params ) => triplanarTextures( texture, texture, texture, ...params );
|
|
137
|
+
|
|
120
138
|
// geometry
|
|
121
139
|
|
|
122
140
|
export const range = ( min, max ) => nodeObject( new RangeNode( min, max ) );
|