super-three 0.181.0 → 0.185.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 +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- 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 +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- 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/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- 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 +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- 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 +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- 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 +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- 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 +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -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/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -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/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- 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/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- 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/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- 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 +3 -3
- 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 +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -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 +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- 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 +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- 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/TemporalReprojectNode.js +1023 -0
- 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/ClusteredLightsNode.js +622 -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/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.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/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- 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 +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- 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/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- 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 +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -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 +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- 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 +4 -19
- 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 +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- 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 +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- 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/functions/VolumetricLightingModel.js +40 -7
- 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 +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- 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/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- 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 +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -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/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -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/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- 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 +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- 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 +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- 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/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- 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 +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -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/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- 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 +3 -1
- 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_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -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 +2 -2
- 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} +2 -3
- 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 +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- 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 +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- 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 +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- 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/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- 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/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- 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/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- 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,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}
|
|
@@ -31,34 +31,23 @@ const VolumeRenderShader1 = {
|
|
|
31
31
|
|
|
32
32
|
vertexShader: /* glsl */`
|
|
33
33
|
|
|
34
|
-
varying vec4 v_nearpos;
|
|
35
|
-
varying vec4 v_farpos;
|
|
36
34
|
varying vec3 v_position;
|
|
35
|
+
varying vec3 v_cameraInObj;
|
|
36
|
+
varying vec3 v_viewDirInObj;
|
|
37
37
|
|
|
38
38
|
void main() {
|
|
39
|
-
// Prepare transforms to map to "camera view". See also:
|
|
40
|
-
// https://threejs.org/docs/#api/renderers/webgl/WebGLProgram
|
|
41
|
-
mat4 viewtransformf = modelViewMatrix;
|
|
42
|
-
mat4 viewtransformi = inverse(modelViewMatrix);
|
|
43
|
-
|
|
44
|
-
// Project local vertex coordinate to camera position. Then do a step
|
|
45
|
-
// backward (in cam coords) to the near clipping plane, and project back. Do
|
|
46
|
-
// the same for the far clipping plane. This gives us all the information we
|
|
47
|
-
// need to calculate the ray and truncate it to the viewing cone.
|
|
48
39
|
vec4 position4 = vec4(position, 1.0);
|
|
49
|
-
vec4 pos_in_cam = viewtransformf * position4;
|
|
50
40
|
|
|
51
|
-
|
|
52
|
-
pos_in_cam.z = -pos_in_cam.w;
|
|
53
|
-
v_nearpos = viewtransformi * pos_in_cam;
|
|
41
|
+
v_position = position;
|
|
54
42
|
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
43
|
+
// Express the camera position and view direction in the object's local
|
|
44
|
+
// space so the fragment shader can build the per-fragment view ray.
|
|
45
|
+
// For perspective cameras, rays converge at v_cameraInObj.
|
|
46
|
+
// For orthographic cameras, rays travel along v_viewDirInObj.
|
|
47
|
+
v_cameraInObj = (inverse(modelMatrix) * vec4(cameraPosition, 1.0)).xyz;
|
|
48
|
+
v_viewDirInObj = (inverse(modelViewMatrix) * vec4(0.0, 0.0, -1.0, 0.0)).xyz;
|
|
58
49
|
|
|
59
|
-
|
|
60
|
-
v_position = position;
|
|
61
|
-
gl_Position = projectionMatrix * viewMatrix * modelMatrix * position4;
|
|
50
|
+
gl_Position = projectionMatrix * modelViewMatrix * position4;
|
|
62
51
|
}`,
|
|
63
52
|
|
|
64
53
|
fragmentShader: /* glsl */`
|
|
@@ -75,8 +64,8 @@ const VolumeRenderShader1 = {
|
|
|
75
64
|
uniform sampler2D u_cmdata;
|
|
76
65
|
|
|
77
66
|
varying vec3 v_position;
|
|
78
|
-
varying
|
|
79
|
-
varying
|
|
67
|
+
varying vec3 v_cameraInObj;
|
|
68
|
+
varying vec3 v_viewDirInObj;
|
|
80
69
|
|
|
81
70
|
// The maximum distance through our rendering volume is sqrt(3).
|
|
82
71
|
const int MAX_STEPS = 887; // 887 for 512^3, 1774 for 1024^3
|
|
@@ -96,33 +85,29 @@ const VolumeRenderShader1 = {
|
|
|
96
85
|
|
|
97
86
|
|
|
98
87
|
void main() {
|
|
99
|
-
//
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
//
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
distance = max(distance, min((-0.5 - v_position.z) / view_ray.z,
|
|
115
|
-
(u_size.z - 0.5 - v_position.z) / view_ray.z));
|
|
116
|
-
|
|
117
|
-
// Now we have the starting position on the front surface
|
|
118
|
-
vec3 front = v_position + view_ray * distance;
|
|
88
|
+
// Per-fragment ray direction in object space, pointing from the back
|
|
89
|
+
// face toward the camera. For perspective cameras the rays converge
|
|
90
|
+
// at the camera position; for orthographic cameras they are parallel
|
|
91
|
+
// to the view direction.
|
|
92
|
+
vec3 view_ray = isOrthographic
|
|
93
|
+
? normalize(-v_viewDirInObj)
|
|
94
|
+
: normalize(v_cameraInObj - v_position);
|
|
95
|
+
|
|
96
|
+
// Slab-based ray/AABB intersection: v_position lies on the back face
|
|
97
|
+
// of the cuboid, so stepping along view_ray traverses the volume and
|
|
98
|
+
// exits through the front face at t = distance.
|
|
99
|
+
vec3 t1 = (vec3(-0.5) - v_position) / view_ray;
|
|
100
|
+
vec3 t2 = (u_size - vec3(0.5) - v_position) / view_ray;
|
|
101
|
+
vec3 tmax = max(t1, t2);
|
|
102
|
+
float distance = min(min(tmax.x, tmax.y), tmax.z);
|
|
119
103
|
|
|
120
104
|
// Decide how many steps to take
|
|
121
|
-
int nsteps = int(
|
|
105
|
+
int nsteps = int(distance / relative_step_size + 0.5);
|
|
122
106
|
if ( nsteps < 1 )
|
|
123
107
|
discard;
|
|
124
108
|
|
|
125
109
|
// Get starting location and step vector in texture coordinates
|
|
110
|
+
vec3 front = v_position + view_ray * distance;
|
|
126
111
|
vec3 step = ((v_position - front) / u_size) / float(nsteps);
|
|
127
112
|
vec3 start_loc = front / u_size;
|
|
128
113
|
|
|
@@ -149,6 +134,8 @@ const VolumeRenderShader1 = {
|
|
|
149
134
|
|
|
150
135
|
vec4 apply_colormap(float val) {
|
|
151
136
|
val = (val - u_clim[0]) / (u_clim[1] - u_clim[0]);
|
|
137
|
+
float n = float(textureSize(u_cmdata, 0).x); // see #33842
|
|
138
|
+
val = (val * (n - 1.0) + 0.5) / n;
|
|
152
139
|
return texture2D(u_cmdata, vec2(val, 0.5));
|
|
153
140
|
}
|
|
154
141
|
|
|
@@ -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
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Program, FunctionDeclaration, Switch, For, AccessorElements, Ternary, Varying, DynamicElement, StaticElement, FunctionParameter, Unary, Conditional, VariableDeclaration, Operator, Number, String, FunctionCall, Return, Accessor, Uniform, Discard, SwitchCase, Continue, Break, While, Comment } from './AST.js';
|
|
1
|
+
import { Program, FunctionDeclaration, Switch, For, AccessorElements, Ternary, Varying, DynamicElement, StaticElement, FunctionParameter, Unary, Conditional, VariableDeclaration, Operator, Number, String, FunctionCall, Return, Accessor, Uniform, Discard, SwitchCase, Continue, Break, While, Comment, StructMember, StructDefinition } from './AST.js';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { isBuiltinType } from './TranspilerUtils.js';
|
|
4
4
|
|
|
5
5
|
const unaryOperators = [
|
|
6
6
|
'+', '-', '~', '!', '++', '--'
|
|
@@ -170,7 +170,7 @@ class Tokenizer {
|
|
|
170
170
|
|
|
171
171
|
skip( ...params ) {
|
|
172
172
|
|
|
173
|
-
let remainingCode = this.source.
|
|
173
|
+
let remainingCode = this.source.slice( this.position );
|
|
174
174
|
let i = params.length;
|
|
175
175
|
|
|
176
176
|
while ( i -- ) {
|
|
@@ -182,7 +182,7 @@ class Tokenizer {
|
|
|
182
182
|
|
|
183
183
|
this.position += skipLength;
|
|
184
184
|
|
|
185
|
-
remainingCode = this.source.
|
|
185
|
+
remainingCode = this.source.slice( this.position );
|
|
186
186
|
|
|
187
187
|
// re-skip, new remainingCode is generated
|
|
188
188
|
// maybe exist previous regexp non detected
|
|
@@ -255,6 +255,7 @@ class GLSLDecoder {
|
|
|
255
255
|
this.index = 0;
|
|
256
256
|
this.tokenizer = null;
|
|
257
257
|
this.keywords = [];
|
|
258
|
+
this.structTypes = new Map();
|
|
258
259
|
|
|
259
260
|
this.addPolyfill( 'gl_FragCoord', 'vec3 gl_FragCoord = vec3( screenCoordinate.x, screenCoordinate.y.oneMinus(), screenCoordinate.z );' );
|
|
260
261
|
|
|
@@ -676,7 +677,7 @@ class GLSLDecoder {
|
|
|
676
677
|
|
|
677
678
|
params.push( new FunctionParameter( type, name, qualifier, immutable ) );
|
|
678
679
|
|
|
679
|
-
if ( tokens[ i ] && tokens[ i ].str !== ',' ) throw new Error( 'Expected ","' );
|
|
680
|
+
if ( tokens[ i ] && tokens[ i ].str !== ',' ) throw new Error( 'THREE.GLSLDecoder: Expected ","' );
|
|
680
681
|
|
|
681
682
|
}
|
|
682
683
|
|
|
@@ -780,6 +781,54 @@ class GLSLDecoder {
|
|
|
780
781
|
|
|
781
782
|
}
|
|
782
783
|
|
|
784
|
+
parseStructDefinition() {
|
|
785
|
+
|
|
786
|
+
const tokens = this.readTokensUntil( ';' );
|
|
787
|
+
|
|
788
|
+
const structName = tokens[ 1 ].str;
|
|
789
|
+
|
|
790
|
+
if ( tokens[ 2 ].str !== '{' ) {
|
|
791
|
+
|
|
792
|
+
throw new Error( 'THREE.GLSLDecoder: Expected \'{\' after struct name ' );
|
|
793
|
+
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
const structMembers = [];
|
|
797
|
+
for ( let i = 3; i < tokens.length - 2; i += 3 ) {
|
|
798
|
+
|
|
799
|
+
const typeToken = tokens[ i ];
|
|
800
|
+
const nameToken = tokens[ i + 1 ];
|
|
801
|
+
|
|
802
|
+
if ( typeToken.type != 'literal' || nameToken.type != 'literal' ) {
|
|
803
|
+
|
|
804
|
+
throw new Error( 'THREE.GLSLDecoder: Invalid struct declaration' );
|
|
805
|
+
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
if ( tokens[ i + 2 ].str !== ';' ) {
|
|
809
|
+
|
|
810
|
+
throw new Error( 'THREE.GLSLDecoder: Missing \';\' after struct member name' );
|
|
811
|
+
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
const member = new StructMember( typeToken.str, nameToken.str );
|
|
815
|
+
structMembers.push( member );
|
|
816
|
+
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
if ( tokens[ tokens.length - 2 ].str !== '}' ) {
|
|
820
|
+
|
|
821
|
+
throw new Error( 'THREE.GLSLDecoder: Missing closing \'}\' for struct ' + structName );
|
|
822
|
+
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
const definition = new StructDefinition( structName, structMembers );
|
|
826
|
+
this.structTypes.set( structName, definition );
|
|
827
|
+
|
|
828
|
+
return definition;
|
|
829
|
+
|
|
830
|
+
}
|
|
831
|
+
|
|
783
832
|
parseReturn() {
|
|
784
833
|
|
|
785
834
|
this.readToken(); // skip 'return'
|
|
@@ -827,7 +876,9 @@ class GLSLDecoder {
|
|
|
827
876
|
|
|
828
877
|
let initialization;
|
|
829
878
|
|
|
830
|
-
|
|
879
|
+
const firstToken = initializationTokens[ 0 ];
|
|
880
|
+
|
|
881
|
+
if ( firstToken && ( isBuiltinType( firstToken.str ) || this.structTypes.has( firstToken.str ) ) ) {
|
|
831
882
|
|
|
832
883
|
initialization = this.parseVariablesFromToken( initializationTokens );
|
|
833
884
|
|
|
@@ -870,7 +921,7 @@ class GLSLDecoder {
|
|
|
870
921
|
// Validate curly braces
|
|
871
922
|
if ( this.getToken().str !== '{' ) {
|
|
872
923
|
|
|
873
|
-
throw new Error( 'Expected \'{\' after switch(...) ' );
|
|
924
|
+
throw new Error( 'THREE.GLSLDecoder: Expected \'{\' after switch(...) ' );
|
|
874
925
|
|
|
875
926
|
}
|
|
876
927
|
|
|
@@ -1079,7 +1130,11 @@ class GLSLDecoder {
|
|
|
1079
1130
|
|
|
1080
1131
|
statement = this.parseVarying();
|
|
1081
1132
|
|
|
1082
|
-
} else if (
|
|
1133
|
+
} else if ( token.str === 'struct' ) {
|
|
1134
|
+
|
|
1135
|
+
statement = this.parseStructDefinition();
|
|
1136
|
+
|
|
1137
|
+
} else if ( isBuiltinType( token.str ) || this.structTypes.has( token.str ) ) {
|
|
1083
1138
|
|
|
1084
1139
|
if ( this.getToken( 2 ).str === '(' ) {
|
|
1085
1140
|
|
|
@@ -1159,7 +1214,9 @@ class GLSLDecoder {
|
|
|
1159
1214
|
this.tokenizer = new Tokenizer( polyfill + source ).tokenize();
|
|
1160
1215
|
|
|
1161
1216
|
const body = this.parseBlock();
|
|
1217
|
+
|
|
1162
1218
|
const program = new Program( body );
|
|
1219
|
+
program.structTypes = this.structTypes;
|
|
1163
1220
|
|
|
1164
1221
|
return program;
|
|
1165
1222
|
|
|
@@ -314,6 +314,10 @@ class TSLEncoder {
|
|
|
314
314
|
|
|
315
315
|
code = this.emitVarying( node );
|
|
316
316
|
|
|
317
|
+
} else if ( node.isStructDefinition ) {
|
|
318
|
+
|
|
319
|
+
code = this.emitStructDefinition( node );
|
|
320
|
+
|
|
317
321
|
} else if ( node.isTernary ) {
|
|
318
322
|
|
|
319
323
|
code = this.emitTernary( node );
|
|
@@ -669,9 +673,19 @@ ${ this.tab }} )`;
|
|
|
669
673
|
|
|
670
674
|
} else {
|
|
671
675
|
|
|
672
|
-
|
|
676
|
+
const program = node.getProgram();
|
|
677
|
+
|
|
678
|
+
if ( program.structTypes.has( type ) ) {
|
|
679
|
+
|
|
680
|
+
varStr += ` = ${ type }()`;
|
|
681
|
+
|
|
682
|
+
} else {
|
|
683
|
+
|
|
684
|
+
varStr += ` = property( '${ type }' )`;
|
|
673
685
|
|
|
674
|
-
|
|
686
|
+
this.addImport( 'property' );
|
|
687
|
+
|
|
688
|
+
}
|
|
675
689
|
|
|
676
690
|
}
|
|
677
691
|
|
|
@@ -702,6 +716,34 @@ ${ this.tab }} )`;
|
|
|
702
716
|
|
|
703
717
|
}
|
|
704
718
|
|
|
719
|
+
emitStructDefinition( node ) {
|
|
720
|
+
|
|
721
|
+
const { name, members } = node;
|
|
722
|
+
|
|
723
|
+
this.addImport( 'struct' );
|
|
724
|
+
|
|
725
|
+
let structString = `const ${ name } = struct( {\n`;
|
|
726
|
+
|
|
727
|
+
for ( let i = 0; i < members.length; i += 1 ) {
|
|
728
|
+
|
|
729
|
+
const member = members[ i ];
|
|
730
|
+
|
|
731
|
+
structString += `${this.tab}\t${member.name}: '${member.type}'`;
|
|
732
|
+
|
|
733
|
+
if ( i != members.length - 1 ) {
|
|
734
|
+
|
|
735
|
+
structString += ',\n';
|
|
736
|
+
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
structString += `\n${this.tab}}, \'${name}\' )`;
|
|
742
|
+
|
|
743
|
+
return structString;
|
|
744
|
+
|
|
745
|
+
}
|
|
746
|
+
|
|
705
747
|
emitOverloadingFunction( nodes ) {
|
|
706
748
|
|
|
707
749
|
const { name } = nodes[ 0 ];
|
|
@@ -798,7 +840,8 @@ ${ this.tab }}`;
|
|
|
798
840
|
|
|
799
841
|
if ( node.layout !== false && hasPointer === false ) {
|
|
800
842
|
|
|
801
|
-
|
|
843
|
+
const inputsStr = inputs.length > 0 ? inputs.join( ', ' ) + ', ' : '';
|
|
844
|
+
funcStr += ', { ' + inputsStr + 'return: \'' + type + '\' }';
|
|
802
845
|
|
|
803
846
|
}
|
|
804
847
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export function isExpression( st ) {
|
|
2
2
|
|
|
3
|
-
return st.isFunctionDeclaration !== true && st.isFor !== true && st.isWhile !== true && st.isConditional !== true && st.isSwitch !== true;
|
|
3
|
+
return st.isFunctionDeclaration !== true && st.isFor !== true && st.isWhile !== true && st.isConditional !== true && st.isSwitch !== true && st.isStructDefinition !== true;
|
|
4
4
|
|
|
5
5
|
}
|
|
6
6
|
|
|
@@ -10,9 +10,9 @@ export function isPrimitive( value ) {
|
|
|
10
10
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export function
|
|
13
|
+
export function isBuiltinType( str ) {
|
|
14
14
|
|
|
15
|
-
return
|
|
15
|
+
return /^(void|bool|float|u?int|mat[234]|mat[234]x[234]|(u|i|b)?vec[234])$/.test( str );
|
|
16
16
|
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -300,6 +300,10 @@ class WGSLEncoder {
|
|
|
300
300
|
this.varyings.push( node );
|
|
301
301
|
return ''; // Defer emission to the header
|
|
302
302
|
|
|
303
|
+
} else if ( node.isStructDefinition ) {
|
|
304
|
+
|
|
305
|
+
code = this.emitStructDefinition( node );
|
|
306
|
+
|
|
303
307
|
} else if ( node.isTernary ) {
|
|
304
308
|
|
|
305
309
|
const cond = this.emitExpression( node.cond );
|
|
@@ -584,6 +588,29 @@ class WGSLEncoder {
|
|
|
584
588
|
|
|
585
589
|
}
|
|
586
590
|
|
|
591
|
+
emitStructDefinition( node ) {
|
|
592
|
+
|
|
593
|
+
const { name, members } = node;
|
|
594
|
+
|
|
595
|
+
let structString = `struct ${ name } {\n`;
|
|
596
|
+
|
|
597
|
+
for ( let i = 0; i < members.length; i += 1 ) {
|
|
598
|
+
|
|
599
|
+
const member = members[ i ];
|
|
600
|
+
|
|
601
|
+
structString += `${ this.tab }\t${ member.name }: ${ this.getWgslType( member.type ) }`;
|
|
602
|
+
|
|
603
|
+
const delimiter = ( i != members.length - 1 ) ? ',\n' : '\n';
|
|
604
|
+
structString += delimiter;
|
|
605
|
+
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
structString += this.tab + '}';
|
|
609
|
+
|
|
610
|
+
return structString;
|
|
611
|
+
|
|
612
|
+
}
|
|
613
|
+
|
|
587
614
|
emitFunction( node ) {
|
|
588
615
|
|
|
589
616
|
const name = node.name;
|