super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -8,12 +8,13 @@ import {
|
|
|
8
8
|
SRGBColorSpace,
|
|
9
9
|
Vector3
|
|
10
10
|
} from 'three';
|
|
11
|
+
|
|
11
12
|
import {
|
|
12
13
|
Projector,
|
|
13
14
|
RenderableFace,
|
|
14
15
|
RenderableLine,
|
|
15
16
|
RenderableSprite
|
|
16
|
-
} from '
|
|
17
|
+
} from './Projector.js';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Can be used to wrap SVG elements into a 3D object.
|
|
@@ -87,6 +88,8 @@ class SVGRenderer {
|
|
|
87
88
|
|
|
88
89
|
_svgNode,
|
|
89
90
|
_pathCount = 0,
|
|
91
|
+
_svgObjectCount = 0,
|
|
92
|
+
_renderListCount = 0,
|
|
90
93
|
|
|
91
94
|
_precision = null,
|
|
92
95
|
_quality = 1,
|
|
@@ -113,6 +116,8 @@ class SVGRenderer {
|
|
|
113
116
|
_viewProjectionMatrix = new Matrix4(),
|
|
114
117
|
|
|
115
118
|
_svgPathPool = [],
|
|
119
|
+
_svgObjectsPool = [],
|
|
120
|
+
_renderListPool = [],
|
|
116
121
|
|
|
117
122
|
_projector = new Projector(),
|
|
118
123
|
_svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );
|
|
@@ -183,8 +188,8 @@ class SVGRenderer {
|
|
|
183
188
|
};
|
|
184
189
|
|
|
185
190
|
/**
|
|
186
|
-
* Sets the render quality. Setting to `high`
|
|
187
|
-
*
|
|
191
|
+
* Sets the render quality. Setting to `high` makes the browser improve SVG quality
|
|
192
|
+
* over rendering speed and geometric precision.
|
|
188
193
|
*
|
|
189
194
|
* @param {('low'|'high')} quality - The quality.
|
|
190
195
|
*/
|
|
@@ -275,6 +280,26 @@ class SVGRenderer {
|
|
|
275
280
|
|
|
276
281
|
}
|
|
277
282
|
|
|
283
|
+
function renderSort( a, b ) {
|
|
284
|
+
|
|
285
|
+
const aOrder = a.data.renderOrder !== undefined ? a.data.renderOrder : 0;
|
|
286
|
+
const bOrder = b.data.renderOrder !== undefined ? b.data.renderOrder : 0;
|
|
287
|
+
|
|
288
|
+
if ( aOrder !== bOrder ) {
|
|
289
|
+
|
|
290
|
+
return aOrder - bOrder;
|
|
291
|
+
|
|
292
|
+
} else {
|
|
293
|
+
|
|
294
|
+
const aZ = a.data.z !== undefined ? a.data.z : 0;
|
|
295
|
+
const bZ = b.data.z !== undefined ? b.data.z : 0;
|
|
296
|
+
|
|
297
|
+
return bZ - aZ; // Painter's algorithm: far to near
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
}
|
|
302
|
+
|
|
278
303
|
/**
|
|
279
304
|
* Performs a manual clear with the defined clear color.
|
|
280
305
|
*/
|
|
@@ -327,10 +352,7 @@ class SVGRenderer {
|
|
|
327
352
|
|
|
328
353
|
calculateLights( _lights );
|
|
329
354
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
_currentPath = '';
|
|
333
|
-
_currentStyle = '';
|
|
355
|
+
_renderListCount = 0;
|
|
334
356
|
|
|
335
357
|
for ( let e = 0, el = _elements.length; e < el; e ++ ) {
|
|
336
358
|
|
|
@@ -339,88 +361,130 @@ class SVGRenderer {
|
|
|
339
361
|
|
|
340
362
|
if ( material === undefined || material.opacity === 0 ) continue;
|
|
341
363
|
|
|
342
|
-
|
|
364
|
+
getRenderItem( _renderListCount ++, 'element', element, material );
|
|
343
365
|
|
|
344
|
-
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
_svgObjectCount = 0;
|
|
345
369
|
|
|
346
|
-
|
|
347
|
-
_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;
|
|
370
|
+
scene.traverseVisible( function ( object ) {
|
|
348
371
|
|
|
349
|
-
|
|
372
|
+
if ( object.isSVGObject ) {
|
|
350
373
|
|
|
351
|
-
|
|
374
|
+
_vector3.setFromMatrixPosition( object.matrixWorld );
|
|
375
|
+
_vector3.applyMatrix4( _viewProjectionMatrix );
|
|
352
376
|
|
|
353
|
-
|
|
377
|
+
if ( _vector3.z < - 1 || _vector3.z > 1 ) return;
|
|
354
378
|
|
|
355
|
-
|
|
356
|
-
|
|
379
|
+
const x = _vector3.x * _svgWidthHalf;
|
|
380
|
+
const y = - _vector3.y * _svgHeightHalf;
|
|
357
381
|
|
|
358
|
-
|
|
382
|
+
const svgObject = getSVGObjectData( _svgObjectCount ++ );
|
|
359
383
|
|
|
360
|
-
|
|
384
|
+
svgObject.node = object.node;
|
|
385
|
+
svgObject.x = x;
|
|
386
|
+
svgObject.y = y;
|
|
387
|
+
svgObject.z = _vector3.z;
|
|
388
|
+
svgObject.renderOrder = object.renderOrder;
|
|
361
389
|
|
|
362
|
-
|
|
390
|
+
getRenderItem( _renderListCount ++, 'svgObject', svgObject, null );
|
|
363
391
|
|
|
364
|
-
|
|
392
|
+
}
|
|
365
393
|
|
|
366
|
-
|
|
394
|
+
} );
|
|
367
395
|
|
|
368
|
-
|
|
396
|
+
_renderListPool.length = _renderListCount;
|
|
369
397
|
|
|
370
|
-
|
|
371
|
-
if ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;
|
|
372
|
-
if ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;
|
|
398
|
+
if ( this.sortElements && _svgObjectCount > 0 ) {
|
|
373
399
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
400
|
+
// Elements are already sorted by the Projector.
|
|
401
|
+
// Only re-sort when SVGObjects need depth-interleaving.
|
|
402
|
+
_renderListPool.sort( renderSort );
|
|
377
403
|
|
|
378
|
-
|
|
404
|
+
}
|
|
379
405
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
406
|
+
// Reset accumulated path
|
|
407
|
+
_currentPath = '';
|
|
408
|
+
_currentStyle = '';
|
|
383
409
|
|
|
384
|
-
|
|
410
|
+
// Render in sorted order
|
|
411
|
+
for ( let i = 0; i < _renderListCount; i ++ ) {
|
|
385
412
|
|
|
386
|
-
|
|
387
|
-
_v1.positionScreen,
|
|
388
|
-
_v2.positionScreen,
|
|
389
|
-
_v3.positionScreen
|
|
390
|
-
] );
|
|
413
|
+
const item = _renderListPool[ i ];
|
|
391
414
|
|
|
392
|
-
|
|
415
|
+
if ( item.type === 'svgObject' ) {
|
|
393
416
|
|
|
394
|
-
|
|
417
|
+
flushPath(); // Flush any accumulated paths before inserting SVG node
|
|
395
418
|
|
|
396
|
-
|
|
419
|
+
const svgObject = item.data;
|
|
420
|
+
const node = svgObject.node;
|
|
421
|
+
node.setAttribute( 'transform', 'translate(' + svgObject.x + ',' + svgObject.y + ')' );
|
|
422
|
+
_svg.appendChild( node );
|
|
397
423
|
|
|
398
|
-
}
|
|
424
|
+
} else {
|
|
399
425
|
|
|
400
|
-
|
|
426
|
+
const element = item.data;
|
|
427
|
+
const material = item.material;
|
|
401
428
|
|
|
402
|
-
|
|
429
|
+
_elemBox.makeEmpty();
|
|
403
430
|
|
|
404
|
-
|
|
431
|
+
if ( element instanceof RenderableSprite ) {
|
|
405
432
|
|
|
406
|
-
|
|
433
|
+
_v1 = element;
|
|
434
|
+
_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;
|
|
407
435
|
|
|
408
|
-
|
|
409
|
-
_vector3.applyMatrix4( _viewProjectionMatrix );
|
|
436
|
+
renderSprite( _v1, element, material );
|
|
410
437
|
|
|
411
|
-
if (
|
|
438
|
+
} else if ( element instanceof RenderableLine ) {
|
|
412
439
|
|
|
413
|
-
|
|
414
|
-
const y = - _vector3.y * _svgHeightHalf;
|
|
440
|
+
_v1 = element.v1; _v2 = element.v2;
|
|
415
441
|
|
|
416
|
-
|
|
417
|
-
|
|
442
|
+
_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;
|
|
443
|
+
_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
|
|
418
444
|
|
|
419
|
-
|
|
445
|
+
_elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen ] );
|
|
446
|
+
|
|
447
|
+
if ( _clipBox.intersectsBox( _elemBox ) === true ) {
|
|
448
|
+
|
|
449
|
+
renderLine( _v1, _v2, material );
|
|
450
|
+
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
} else if ( element instanceof RenderableFace ) {
|
|
454
|
+
|
|
455
|
+
_v1 = element.v1; _v2 = element.v2; _v3 = element.v3;
|
|
456
|
+
|
|
457
|
+
_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;
|
|
458
|
+
_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
|
|
459
|
+
_v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;
|
|
460
|
+
|
|
461
|
+
if ( this.overdraw > 0 ) {
|
|
462
|
+
|
|
463
|
+
expand( _v1.positionScreen, _v2.positionScreen, this.overdraw );
|
|
464
|
+
expand( _v2.positionScreen, _v3.positionScreen, this.overdraw );
|
|
465
|
+
expand( _v3.positionScreen, _v1.positionScreen, this.overdraw );
|
|
466
|
+
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
_elemBox.setFromPoints( [
|
|
470
|
+
_v1.positionScreen,
|
|
471
|
+
_v2.positionScreen,
|
|
472
|
+
_v3.positionScreen
|
|
473
|
+
] );
|
|
474
|
+
|
|
475
|
+
if ( _clipBox.intersectsBox( _elemBox ) === true ) {
|
|
476
|
+
|
|
477
|
+
renderFace3( _v1, _v2, _v3, element, material );
|
|
478
|
+
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
}
|
|
420
482
|
|
|
421
483
|
}
|
|
422
484
|
|
|
423
|
-
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
flushPath(); // Flush any remaining paths
|
|
424
488
|
|
|
425
489
|
};
|
|
426
490
|
|
|
@@ -660,21 +724,71 @@ class SVGRenderer {
|
|
|
660
724
|
|
|
661
725
|
function getPathNode( id ) {
|
|
662
726
|
|
|
663
|
-
|
|
727
|
+
let path = _svgPathPool[ id ];
|
|
728
|
+
|
|
729
|
+
if ( path === undefined ) {
|
|
664
730
|
|
|
665
|
-
|
|
731
|
+
path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );
|
|
666
732
|
|
|
667
733
|
if ( _quality == 0 ) {
|
|
668
734
|
|
|
669
|
-
|
|
735
|
+
path.setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed
|
|
670
736
|
|
|
671
737
|
}
|
|
672
738
|
|
|
673
|
-
|
|
739
|
+
_svgPathPool[ id ] = path;
|
|
674
740
|
|
|
675
741
|
}
|
|
676
742
|
|
|
677
|
-
return
|
|
743
|
+
return path;
|
|
744
|
+
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
function getSVGObjectData( id ) {
|
|
748
|
+
|
|
749
|
+
let svgObject = _svgObjectsPool[ id ];
|
|
750
|
+
|
|
751
|
+
if ( svgObject === undefined ) {
|
|
752
|
+
|
|
753
|
+
svgObject = {
|
|
754
|
+
node: null,
|
|
755
|
+
x: 0,
|
|
756
|
+
y: 0,
|
|
757
|
+
z: 0,
|
|
758
|
+
renderOrder: 0
|
|
759
|
+
};
|
|
760
|
+
|
|
761
|
+
_svgObjectsPool[ id ] = svgObject;
|
|
762
|
+
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
return svgObject;
|
|
766
|
+
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
function getRenderItem( id, type, data, material ) {
|
|
770
|
+
|
|
771
|
+
let item = _renderListPool[ id ];
|
|
772
|
+
|
|
773
|
+
if ( item === undefined ) {
|
|
774
|
+
|
|
775
|
+
item = {
|
|
776
|
+
type: type,
|
|
777
|
+
data: data,
|
|
778
|
+
material: material
|
|
779
|
+
};
|
|
780
|
+
|
|
781
|
+
_renderListPool[ id ] = item;
|
|
782
|
+
|
|
783
|
+
return item;
|
|
784
|
+
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
item.type = type;
|
|
788
|
+
item.data = data;
|
|
789
|
+
item.material = material;
|
|
790
|
+
|
|
791
|
+
return item;
|
|
678
792
|
|
|
679
793
|
}
|
|
680
794
|
|
|
@@ -91,8 +91,12 @@ const GTAOShader = {
|
|
|
91
91
|
#define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)
|
|
92
92
|
#endif
|
|
93
93
|
|
|
94
|
-
vec3 getViewPosition(const in vec2 screenPosition, const in float depth) {
|
|
95
|
-
|
|
94
|
+
vec3 getViewPosition( const in vec2 screenPosition, const in float depth ) {
|
|
95
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
96
|
+
vec4 clipSpacePosition = vec4( vec2( screenPosition ) * 2.0 - 1.0, depth, 1.0 );
|
|
97
|
+
#else
|
|
98
|
+
vec4 clipSpacePosition = vec4( vec3( screenPosition, depth ) * 2.0 - 1.0, 1.0 );
|
|
99
|
+
#endif
|
|
96
100
|
vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;
|
|
97
101
|
return viewSpacePosition.xyz / viewSpacePosition.w;
|
|
98
102
|
}
|
|
@@ -154,10 +158,19 @@ const GTAOShader = {
|
|
|
154
158
|
|
|
155
159
|
void main() {
|
|
156
160
|
float depth = getDepth(vUv.xy);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
+
|
|
162
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
163
|
+
if (depth <= 0.0) {
|
|
164
|
+
discard;
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
#else
|
|
168
|
+
if (depth >= 1.0) {
|
|
169
|
+
discard;
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
#endif
|
|
173
|
+
|
|
161
174
|
vec3 viewPos = getViewPosition(vUv, depth);
|
|
162
175
|
vec3 viewNormal = getViewNormal(vUv);
|
|
163
176
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Used by {@link HalftonePass}.
|
|
10
10
|
*
|
|
11
|
-
* Shape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square)
|
|
11
|
+
* Shape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square, 5 = Diamond)
|
|
12
12
|
* Blending Mode (1 = Linear, 2 = Multiply, 3 = Add, 4 = Lighter, 5 = Darker)
|
|
13
13
|
*
|
|
14
14
|
* @constant
|
|
@@ -49,11 +49,13 @@ const HalftoneShader = {
|
|
|
49
49
|
|
|
50
50
|
#define SQRT2_MINUS_ONE 0.41421356
|
|
51
51
|
#define SQRT2_HALF_MINUS_ONE 0.20710678
|
|
52
|
+
#define PI 3.14159265
|
|
52
53
|
#define PI2 6.28318531
|
|
53
54
|
#define SHAPE_DOT 1
|
|
54
55
|
#define SHAPE_ELLIPSE 2
|
|
55
56
|
#define SHAPE_LINE 3
|
|
56
57
|
#define SHAPE_SQUARE 4
|
|
58
|
+
#define SHAPE_DIAMOND 5
|
|
57
59
|
#define BLENDING_LINEAR 1
|
|
58
60
|
#define BLENDING_MULTIPLY 2
|
|
59
61
|
#define BLENDING_ADD 3
|
|
@@ -129,6 +131,15 @@ const HalftoneShader = {
|
|
|
129
131
|
rad = pow( abs( rad ), 1.4 );
|
|
130
132
|
rad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );
|
|
131
133
|
|
|
134
|
+
} else if ( shape == SHAPE_DIAMOND ) {
|
|
135
|
+
|
|
136
|
+
float angle45 = PI / 4.0;
|
|
137
|
+
float theta = atan( p.y - coord.y, p.x - coord.x ) - angle - angle45;
|
|
138
|
+
float sin_t = abs( sin( theta ) );
|
|
139
|
+
float cos_t = abs( cos( theta ) );
|
|
140
|
+
rad = pow( abs( rad ), 1.4 );
|
|
141
|
+
rad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );
|
|
142
|
+
|
|
132
143
|
}
|
|
133
144
|
|
|
134
145
|
return rad - dist;
|
|
@@ -86,8 +86,12 @@ const PoissonDenoiseShader = {
|
|
|
86
86
|
|
|
87
87
|
const vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS;
|
|
88
88
|
|
|
89
|
-
vec3 getViewPosition(const in vec2 screenPosition, const in float depth) {
|
|
90
|
-
|
|
89
|
+
vec3 getViewPosition( const in vec2 screenPosition, const in float depth ) {
|
|
90
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
91
|
+
vec4 clipSpacePosition = vec4( vec2( screenPosition ) * 2.0 - 1.0, depth, 1.0 );
|
|
92
|
+
#else
|
|
93
|
+
vec4 clipSpacePosition = vec4( vec3( screenPosition, depth ) * 2.0 - 1.0, 1.0 );
|
|
94
|
+
#endif
|
|
91
95
|
vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;
|
|
92
96
|
return viewSpacePosition.xyz / viewSpacePosition.w;
|
|
93
97
|
}
|
|
@@ -153,9 +153,15 @@ const SAOShader = {
|
|
|
153
153
|
angle += ANGLE_STEP;
|
|
154
154
|
|
|
155
155
|
float sampleDepth = getDepth( sampleUv );
|
|
156
|
-
|
|
156
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
157
|
+
if( sampleDepth <= 0.0 + EPSILON ) {
|
|
157
158
|
continue;
|
|
158
159
|
}
|
|
160
|
+
#else
|
|
161
|
+
if( sampleDepth >= 1.0 - EPSILON ) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
#endif
|
|
159
165
|
|
|
160
166
|
float sampleViewZ = getViewZ( sampleDepth );
|
|
161
167
|
vec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );
|
|
@@ -170,9 +176,16 @@ const SAOShader = {
|
|
|
170
176
|
|
|
171
177
|
void main() {
|
|
172
178
|
float centerDepth = getDepth( vUv );
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
179
|
+
|
|
180
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
181
|
+
if( centerDepth <= 0.0 + EPSILON ) {
|
|
182
|
+
discard;
|
|
183
|
+
}
|
|
184
|
+
#else
|
|
185
|
+
if( centerDepth >= 1.0 - EPSILON ) {
|
|
186
|
+
discard;
|
|
187
|
+
}
|
|
188
|
+
#endif
|
|
176
189
|
|
|
177
190
|
float centerViewZ = getViewZ( centerDepth );
|
|
178
191
|
vec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );
|
|
@@ -79,6 +79,16 @@ const SSAOShader = {
|
|
|
79
79
|
|
|
80
80
|
#include <packing>
|
|
81
81
|
|
|
82
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
83
|
+
|
|
84
|
+
const float depthThreshold = 0.0;
|
|
85
|
+
|
|
86
|
+
#else
|
|
87
|
+
|
|
88
|
+
const float depthThreshold = 1.0;
|
|
89
|
+
|
|
90
|
+
#endif
|
|
91
|
+
|
|
82
92
|
float getDepth( const in vec2 screenPosition ) {
|
|
83
93
|
|
|
84
94
|
return texture2D( tDepth, screenPosition ).x;
|
|
@@ -137,7 +147,7 @@ const SSAOShader = {
|
|
|
137
147
|
|
|
138
148
|
float depth = getDepth( vUv );
|
|
139
149
|
|
|
140
|
-
if ( depth ==
|
|
150
|
+
if ( depth == depthThreshold ) {
|
|
141
151
|
|
|
142
152
|
gl_FragColor = vec4( 1.0 ); // don't influence background
|
|
143
153
|
|
|
@@ -96,7 +96,7 @@ const SSRShader = {
|
|
|
96
96
|
float x0=point.x,y0=point.y,z0=point.z;
|
|
97
97
|
float x=planePoint.x,y=planePoint.y,z=planePoint.z;
|
|
98
98
|
float d=-(a*x+b*y+c*z);
|
|
99
|
-
float distance=
|
|
99
|
+
float distance=a*x0+b*y0+c*z0+d;
|
|
100
100
|
return distance;
|
|
101
101
|
}
|
|
102
102
|
float getDepth( const in vec2 uv ) {
|
|
@@ -170,17 +170,17 @@ const SSRShader = {
|
|
|
170
170
|
#endif
|
|
171
171
|
d1=viewPositionToXY(d1viewPosition);
|
|
172
172
|
|
|
173
|
-
float totalLen=length(d1-d0);
|
|
174
173
|
float xLen=d1.x-d0.x;
|
|
175
174
|
float yLen=d1.y-d0.y;
|
|
176
175
|
float totalStep=max(abs(xLen),abs(yLen));
|
|
177
176
|
float xSpan=xLen/totalStep;
|
|
178
177
|
float ySpan=yLen/totalStep;
|
|
179
|
-
|
|
178
|
+
float sStep=1./totalStep;
|
|
179
|
+
float s=sStep; // start at sStep since loop starts at i=1
|
|
180
|
+
for(float i=1.;i<float(MAX_STEP);i++){
|
|
180
181
|
if(i>=totalStep) break;
|
|
181
182
|
vec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan);
|
|
182
183
|
if(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break;
|
|
183
|
-
float s=length(xy-d0)/totalLen;
|
|
184
184
|
vec2 uv=xy/resolution;
|
|
185
185
|
|
|
186
186
|
float d = getDepth(uv);
|
|
@@ -221,7 +221,7 @@ const SSRShader = {
|
|
|
221
221
|
|
|
222
222
|
if(hit){
|
|
223
223
|
vec3 vN=getViewNormal( uv );
|
|
224
|
-
if(dot(viewReflectDir,vN)>=0.)
|
|
224
|
+
if(dot(viewReflectDir,vN)>=0.) break; // treat backfaces as opaque
|
|
225
225
|
float distance=pointPlaneDistance(vP,viewPosition,viewNormal);
|
|
226
226
|
if(distance>maxDistance) break;
|
|
227
227
|
float op=opacity;
|
|
@@ -240,6 +240,7 @@ const SSRShader = {
|
|
|
240
240
|
break;
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
|
+
s+=sStep;
|
|
243
244
|
}
|
|
244
245
|
}
|
|
245
246
|
`
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Depth visualization shader that shows depth values as monochrome color.
|
|
8
8
|
*
|
|
9
9
|
* @constant
|
|
10
10
|
* @type {ShaderMaterial~Shader}
|
|
@@ -39,11 +39,9 @@ const UnpackDepthRGBAShader = {
|
|
|
39
39
|
|
|
40
40
|
varying vec2 vUv;
|
|
41
41
|
|
|
42
|
-
#include <packing>
|
|
43
|
-
|
|
44
42
|
void main() {
|
|
45
43
|
|
|
46
|
-
float depth =
|
|
44
|
+
float depth = texture2D( tDiffuse, vUv ).r;
|
|
47
45
|
|
|
48
46
|
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
49
47
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Based on [PaintEffect postprocess from ro.me](
|
|
7
|
+
* Based on [PaintEffect postprocess from ro.me](https://github.com/dataarts/3-dreams-of-black/blob/master/deploy/js/effects/PaintEffect.js).
|
|
8
8
|
*
|
|
9
9
|
* @constant
|
|
10
10
|
* @type {ShaderMaterial~Shader}
|
|
@@ -46,6 +46,20 @@ export class ASTNode {
|
|
|
46
46
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
getProgram() {
|
|
50
|
+
|
|
51
|
+
let current = this;
|
|
52
|
+
|
|
53
|
+
while ( current.parent !== null ) {
|
|
54
|
+
|
|
55
|
+
current = current.parent;
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return current.isProgram === true ? current : null;
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
49
63
|
getParent( parents = [] ) {
|
|
50
64
|
|
|
51
65
|
if ( this.parent === null ) {
|
|
@@ -114,6 +128,7 @@ export class Program extends ASTNode {
|
|
|
114
128
|
super();
|
|
115
129
|
|
|
116
130
|
this.body = body;
|
|
131
|
+
this.structTypes = new Map();
|
|
117
132
|
|
|
118
133
|
this.isProgram = true;
|
|
119
134
|
|
|
@@ -629,3 +644,32 @@ export class SwitchCase extends ASTNode {
|
|
|
629
644
|
}
|
|
630
645
|
|
|
631
646
|
}
|
|
647
|
+
|
|
648
|
+
// helper class for StructDefinition
|
|
649
|
+
export class StructMember {
|
|
650
|
+
|
|
651
|
+
constructor( type, name ) {
|
|
652
|
+
|
|
653
|
+
this.type = type;
|
|
654
|
+
this.name = name;
|
|
655
|
+
this.isStructMember = true;
|
|
656
|
+
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
export class StructDefinition extends ASTNode {
|
|
662
|
+
|
|
663
|
+
constructor( name, members = [] ) {
|
|
664
|
+
|
|
665
|
+
super();
|
|
666
|
+
|
|
667
|
+
this.name = name;
|
|
668
|
+
this.members = members;
|
|
669
|
+
this.isStructDefinition = true;
|
|
670
|
+
|
|
671
|
+
this.initialize();
|
|
672
|
+
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
}
|