@plastic-software/three 0.181.3 → 0.183.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 +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- 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 +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -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/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- 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 +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- 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 +1 -1
- 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 +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -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/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- 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 +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -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 +61 -4
- 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/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- 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/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -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 +3 -3
- 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 -20
- 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/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/TRAANode.js +273 -125
- 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/math/Bayer.js +40 -1
- 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/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- 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/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/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- 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/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- 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 +98 -12
- 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 +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- 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/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- 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 +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- 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/ViewportTextureNode.js +21 -4
- 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 +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- 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 +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- 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/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- 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/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- 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/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- 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/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- 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 +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- 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_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -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_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- 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 +3 -3
- 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 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -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 +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -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/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,49 @@ 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
|
+
|
|
303
|
+
function arraySortStable( array, start, length ) {
|
|
304
|
+
|
|
305
|
+
// A stable insertion sort for sorting the render list
|
|
306
|
+
// This avoids the GC overhead of Array.prototype.sort()
|
|
307
|
+
|
|
308
|
+
for ( let i = start + 1; i < start + length; i ++ ) {
|
|
309
|
+
|
|
310
|
+
const item = array[ i ];
|
|
311
|
+
let j = i - 1;
|
|
312
|
+
|
|
313
|
+
while ( j >= start && renderSort( array[ j ], item ) > 0 ) {
|
|
314
|
+
|
|
315
|
+
array[ j + 1 ] = array[ j ];
|
|
316
|
+
j --;
|
|
317
|
+
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
array[ j + 1 ] = item;
|
|
321
|
+
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
278
326
|
/**
|
|
279
327
|
* Performs a manual clear with the defined clear color.
|
|
280
328
|
*/
|
|
@@ -327,10 +375,7 @@ class SVGRenderer {
|
|
|
327
375
|
|
|
328
376
|
calculateLights( _lights );
|
|
329
377
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
_currentPath = '';
|
|
333
|
-
_currentStyle = '';
|
|
378
|
+
_renderListCount = 0;
|
|
334
379
|
|
|
335
380
|
for ( let e = 0, el = _elements.length; e < el; e ++ ) {
|
|
336
381
|
|
|
@@ -339,88 +384,126 @@ class SVGRenderer {
|
|
|
339
384
|
|
|
340
385
|
if ( material === undefined || material.opacity === 0 ) continue;
|
|
341
386
|
|
|
342
|
-
|
|
387
|
+
getRenderItem( _renderListCount ++, 'element', element, material );
|
|
343
388
|
|
|
344
|
-
|
|
389
|
+
}
|
|
345
390
|
|
|
346
|
-
|
|
347
|
-
_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;
|
|
391
|
+
_svgObjectCount = 0;
|
|
348
392
|
|
|
349
|
-
|
|
393
|
+
scene.traverseVisible( function ( object ) {
|
|
350
394
|
|
|
351
|
-
|
|
395
|
+
if ( object.isSVGObject ) {
|
|
352
396
|
|
|
353
|
-
|
|
397
|
+
_vector3.setFromMatrixPosition( object.matrixWorld );
|
|
398
|
+
_vector3.applyMatrix4( _viewProjectionMatrix );
|
|
354
399
|
|
|
355
|
-
|
|
356
|
-
_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
|
|
400
|
+
if ( _vector3.z < - 1 || _vector3.z > 1 ) return;
|
|
357
401
|
|
|
358
|
-
|
|
402
|
+
const x = _vector3.x * _svgWidthHalf;
|
|
403
|
+
const y = - _vector3.y * _svgHeightHalf;
|
|
359
404
|
|
|
360
|
-
|
|
405
|
+
const svgObject = getSVGObjectData( _svgObjectCount ++ );
|
|
361
406
|
|
|
362
|
-
|
|
407
|
+
svgObject.node = object.node;
|
|
408
|
+
svgObject.x = x;
|
|
409
|
+
svgObject.y = y;
|
|
410
|
+
svgObject.z = _vector3.z;
|
|
411
|
+
svgObject.renderOrder = object.renderOrder;
|
|
363
412
|
|
|
364
|
-
|
|
413
|
+
getRenderItem( _renderListCount ++, 'svgObject', svgObject, null );
|
|
365
414
|
|
|
366
|
-
}
|
|
415
|
+
}
|
|
367
416
|
|
|
368
|
-
|
|
417
|
+
} );
|
|
369
418
|
|
|
370
|
-
|
|
371
|
-
if ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;
|
|
372
|
-
if ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;
|
|
419
|
+
if ( this.sortElements ) {
|
|
373
420
|
|
|
374
|
-
|
|
375
|
-
_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
|
|
376
|
-
_v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;
|
|
421
|
+
arraySortStable( _renderListPool, 0, _renderListCount );
|
|
377
422
|
|
|
378
|
-
|
|
423
|
+
}
|
|
379
424
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
425
|
+
// Reset accumulated path
|
|
426
|
+
_currentPath = '';
|
|
427
|
+
_currentStyle = '';
|
|
383
428
|
|
|
384
|
-
|
|
429
|
+
// Render in sorted order
|
|
430
|
+
for ( let i = 0; i < _renderListCount; i ++ ) {
|
|
385
431
|
|
|
386
|
-
|
|
387
|
-
_v1.positionScreen,
|
|
388
|
-
_v2.positionScreen,
|
|
389
|
-
_v3.positionScreen
|
|
390
|
-
] );
|
|
432
|
+
const item = _renderListPool[ i ];
|
|
391
433
|
|
|
392
|
-
|
|
434
|
+
if ( item.type === 'svgObject' ) {
|
|
393
435
|
|
|
394
|
-
|
|
436
|
+
flushPath(); // Flush any accumulated paths before inserting SVG node
|
|
395
437
|
|
|
396
|
-
|
|
438
|
+
const svgObject = item.data;
|
|
439
|
+
const node = svgObject.node;
|
|
440
|
+
node.setAttribute( 'transform', 'translate(' + svgObject.x + ',' + svgObject.y + ')' );
|
|
441
|
+
_svg.appendChild( node );
|
|
397
442
|
|
|
398
|
-
}
|
|
443
|
+
} else {
|
|
399
444
|
|
|
400
|
-
|
|
445
|
+
const element = item.data;
|
|
446
|
+
const material = item.material;
|
|
401
447
|
|
|
402
|
-
|
|
448
|
+
_elemBox.makeEmpty();
|
|
403
449
|
|
|
404
|
-
|
|
450
|
+
if ( element instanceof RenderableSprite ) {
|
|
405
451
|
|
|
406
|
-
|
|
452
|
+
_v1 = element;
|
|
453
|
+
_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;
|
|
407
454
|
|
|
408
|
-
|
|
409
|
-
_vector3.applyMatrix4( _viewProjectionMatrix );
|
|
455
|
+
renderSprite( _v1, element, material );
|
|
410
456
|
|
|
411
|
-
if (
|
|
457
|
+
} else if ( element instanceof RenderableLine ) {
|
|
412
458
|
|
|
413
|
-
|
|
414
|
-
const y = - _vector3.y * _svgHeightHalf;
|
|
459
|
+
_v1 = element.v1; _v2 = element.v2;
|
|
415
460
|
|
|
416
|
-
|
|
417
|
-
|
|
461
|
+
_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;
|
|
462
|
+
_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
|
|
418
463
|
|
|
419
|
-
|
|
464
|
+
_elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen ] );
|
|
465
|
+
|
|
466
|
+
if ( _clipBox.intersectsBox( _elemBox ) === true ) {
|
|
467
|
+
|
|
468
|
+
renderLine( _v1, _v2, material );
|
|
469
|
+
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
} else if ( element instanceof RenderableFace ) {
|
|
473
|
+
|
|
474
|
+
_v1 = element.v1; _v2 = element.v2; _v3 = element.v3;
|
|
475
|
+
|
|
476
|
+
_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;
|
|
477
|
+
_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
|
|
478
|
+
_v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;
|
|
479
|
+
|
|
480
|
+
if ( this.overdraw > 0 ) {
|
|
481
|
+
|
|
482
|
+
expand( _v1.positionScreen, _v2.positionScreen, this.overdraw );
|
|
483
|
+
expand( _v2.positionScreen, _v3.positionScreen, this.overdraw );
|
|
484
|
+
expand( _v3.positionScreen, _v1.positionScreen, this.overdraw );
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
_elemBox.setFromPoints( [
|
|
489
|
+
_v1.positionScreen,
|
|
490
|
+
_v2.positionScreen,
|
|
491
|
+
_v3.positionScreen
|
|
492
|
+
] );
|
|
493
|
+
|
|
494
|
+
if ( _clipBox.intersectsBox( _elemBox ) === true ) {
|
|
495
|
+
|
|
496
|
+
renderFace3( _v1, _v2, _v3, element, material );
|
|
497
|
+
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
}
|
|
420
501
|
|
|
421
502
|
}
|
|
422
503
|
|
|
423
|
-
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
flushPath(); // Flush any remaining paths
|
|
424
507
|
|
|
425
508
|
};
|
|
426
509
|
|
|
@@ -660,21 +743,71 @@ class SVGRenderer {
|
|
|
660
743
|
|
|
661
744
|
function getPathNode( id ) {
|
|
662
745
|
|
|
663
|
-
|
|
746
|
+
let path = _svgPathPool[ id ];
|
|
664
747
|
|
|
665
|
-
|
|
748
|
+
if ( path === undefined ) {
|
|
749
|
+
|
|
750
|
+
path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );
|
|
666
751
|
|
|
667
752
|
if ( _quality == 0 ) {
|
|
668
753
|
|
|
669
|
-
|
|
754
|
+
path.setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed
|
|
670
755
|
|
|
671
756
|
}
|
|
672
757
|
|
|
673
|
-
|
|
758
|
+
_svgPathPool[ id ] = path;
|
|
759
|
+
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
return path;
|
|
763
|
+
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
function getSVGObjectData( id ) {
|
|
767
|
+
|
|
768
|
+
let svgObject = _svgObjectsPool[ id ];
|
|
769
|
+
|
|
770
|
+
if ( svgObject === undefined ) {
|
|
771
|
+
|
|
772
|
+
svgObject = {
|
|
773
|
+
node: null,
|
|
774
|
+
x: 0,
|
|
775
|
+
y: 0,
|
|
776
|
+
z: 0,
|
|
777
|
+
renderOrder: 0
|
|
778
|
+
};
|
|
779
|
+
|
|
780
|
+
_svgObjectsPool[ id ] = svgObject;
|
|
674
781
|
|
|
675
782
|
}
|
|
676
783
|
|
|
677
|
-
return
|
|
784
|
+
return svgObject;
|
|
785
|
+
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
function getRenderItem( id, type, data, material ) {
|
|
789
|
+
|
|
790
|
+
let item = _renderListPool[ id ];
|
|
791
|
+
|
|
792
|
+
if ( item === undefined ) {
|
|
793
|
+
|
|
794
|
+
item = {
|
|
795
|
+
type: type,
|
|
796
|
+
data: data,
|
|
797
|
+
material: material
|
|
798
|
+
};
|
|
799
|
+
|
|
800
|
+
_renderListPool[ id ] = item;
|
|
801
|
+
|
|
802
|
+
return item;
|
|
803
|
+
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
item.type = type;
|
|
807
|
+
item.data = data;
|
|
808
|
+
item.material = material;
|
|
809
|
+
|
|
810
|
+
return item;
|
|
678
811
|
|
|
679
812
|
}
|
|
680
813
|
|
|
@@ -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
|
+
}
|