super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Clock,
|
|
3
2
|
HalfFloatType,
|
|
4
3
|
NoBlending,
|
|
4
|
+
Timer,
|
|
5
5
|
Vector2,
|
|
6
6
|
WebGLRenderTarget
|
|
7
7
|
} from 'three';
|
|
@@ -123,12 +123,12 @@ class EffectComposer {
|
|
|
123
123
|
this.copyPass.material.blending = NoBlending;
|
|
124
124
|
|
|
125
125
|
/**
|
|
126
|
-
* The internal
|
|
126
|
+
* The internal timer for managing time data.
|
|
127
127
|
*
|
|
128
128
|
* @private
|
|
129
|
-
* @type {
|
|
129
|
+
* @type {Timer}
|
|
130
130
|
*/
|
|
131
|
-
this.
|
|
131
|
+
this.timer = new Timer();
|
|
132
132
|
|
|
133
133
|
this.onSessionStateChange = this.onSessionStateChange.bind( this );
|
|
134
134
|
this.renderer.xr.addEventListener( 'sessionstart', this.onSessionStateChange );
|
|
@@ -233,9 +233,11 @@ class EffectComposer {
|
|
|
233
233
|
|
|
234
234
|
// deltaTime value is in seconds
|
|
235
235
|
|
|
236
|
+
this.timer.update();
|
|
237
|
+
|
|
236
238
|
if ( deltaTime === undefined ) {
|
|
237
239
|
|
|
238
|
-
deltaTime = this.
|
|
240
|
+
deltaTime = this.timer.getDelta();
|
|
239
241
|
|
|
240
242
|
}
|
|
241
243
|
|
|
@@ -93,6 +93,16 @@ class RenderPass extends Pass {
|
|
|
93
93
|
* @default false
|
|
94
94
|
*/
|
|
95
95
|
this.needsSwap = false;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* This flag indicates that this pass renders the scene itself.
|
|
99
|
+
*
|
|
100
|
+
* @type {boolean}
|
|
101
|
+
* @readonly
|
|
102
|
+
* @default true
|
|
103
|
+
*/
|
|
104
|
+
this.isRenderPass = true;
|
|
105
|
+
|
|
96
106
|
this._oldClearColor = new Color();
|
|
97
107
|
|
|
98
108
|
}
|
|
@@ -114,7 +114,7 @@ class RenderTransitionPass extends Pass {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
/**
|
|
117
|
-
* Sets the texture threshold. This value
|
|
117
|
+
* Sets the texture threshold. This value defines how strong the texture effects
|
|
118
118
|
* the transition. Must be in the range `[0,1]` (0 means full effect, 1 means no effect).
|
|
119
119
|
*
|
|
120
120
|
* @param {boolean|number} value - The threshold value.
|
|
@@ -56,7 +56,7 @@ class UnrealBloomPass extends Pass {
|
|
|
56
56
|
this.strength = strength;
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* The Bloom radius.
|
|
59
|
+
* The Bloom radius. Must be in the range `[0,1]`.
|
|
60
60
|
*
|
|
61
61
|
* @type {number}
|
|
62
62
|
*/
|
|
@@ -187,6 +187,7 @@ class UnrealBloomPass extends Pass {
|
|
|
187
187
|
uniforms: this.copyUniforms,
|
|
188
188
|
vertexShader: CopyShader.vertexShader,
|
|
189
189
|
fragmentShader: CopyShader.fragmentShader,
|
|
190
|
+
premultipliedAlpha: true,
|
|
190
191
|
blending: AdditiveBlending,
|
|
191
192
|
depthTest: false,
|
|
192
193
|
depthWrite: false,
|
|
@@ -399,33 +400,46 @@ class UnrealBloomPass extends Pass {
|
|
|
399
400
|
'gaussianCoefficients': { value: coefficients } // precomputed Gaussian coefficients
|
|
400
401
|
},
|
|
401
402
|
|
|
402
|
-
vertexShader:
|
|
403
|
-
|
|
403
|
+
vertexShader: /* glsl */`
|
|
404
|
+
|
|
405
|
+
varying vec2 vUv;
|
|
406
|
+
|
|
404
407
|
void main() {
|
|
408
|
+
|
|
405
409
|
vUv = uv;
|
|
406
410
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
411
|
+
|
|
407
412
|
}`,
|
|
408
413
|
|
|
409
|
-
fragmentShader:
|
|
410
|
-
|
|
414
|
+
fragmentShader: /* glsl */`
|
|
415
|
+
|
|
416
|
+
#include <common>
|
|
417
|
+
|
|
411
418
|
varying vec2 vUv;
|
|
419
|
+
|
|
412
420
|
uniform sampler2D colorTexture;
|
|
413
421
|
uniform vec2 invSize;
|
|
414
422
|
uniform vec2 direction;
|
|
415
423
|
uniform float gaussianCoefficients[KERNEL_RADIUS];
|
|
416
424
|
|
|
417
425
|
void main() {
|
|
426
|
+
|
|
418
427
|
float weightSum = gaussianCoefficients[0];
|
|
419
428
|
vec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;
|
|
420
|
-
|
|
421
|
-
|
|
429
|
+
|
|
430
|
+
for ( int i = 1; i < KERNEL_RADIUS; i ++ ) {
|
|
431
|
+
|
|
432
|
+
float x = float( i );
|
|
422
433
|
float w = gaussianCoefficients[i];
|
|
423
434
|
vec2 uvOffset = direction * invSize * x;
|
|
424
435
|
vec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;
|
|
425
436
|
vec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;
|
|
426
437
|
diffuseSum += ( sample1 + sample2 ) * w;
|
|
438
|
+
|
|
427
439
|
}
|
|
440
|
+
|
|
428
441
|
gl_FragColor = vec4( diffuseSum, 1.0 );
|
|
442
|
+
|
|
429
443
|
}`
|
|
430
444
|
} );
|
|
431
445
|
|
|
@@ -451,15 +465,21 @@ class UnrealBloomPass extends Pass {
|
|
|
451
465
|
'bloomRadius': { value: 0.0 }
|
|
452
466
|
},
|
|
453
467
|
|
|
454
|
-
vertexShader:
|
|
455
|
-
|
|
468
|
+
vertexShader: /* glsl */`
|
|
469
|
+
|
|
470
|
+
varying vec2 vUv;
|
|
471
|
+
|
|
456
472
|
void main() {
|
|
473
|
+
|
|
457
474
|
vUv = uv;
|
|
458
475
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
476
|
+
|
|
459
477
|
}`,
|
|
460
478
|
|
|
461
|
-
fragmentShader:
|
|
462
|
-
|
|
479
|
+
fragmentShader: /* glsl */`
|
|
480
|
+
|
|
481
|
+
varying vec2 vUv;
|
|
482
|
+
|
|
463
483
|
uniform sampler2D blurTexture1;
|
|
464
484
|
uniform sampler2D blurTexture2;
|
|
465
485
|
uniform sampler2D blurTexture3;
|
|
@@ -470,17 +490,27 @@ class UnrealBloomPass extends Pass {
|
|
|
470
490
|
uniform float bloomFactors[NUM_MIPS];
|
|
471
491
|
uniform vec3 bloomTintColors[NUM_MIPS];
|
|
472
492
|
|
|
473
|
-
float lerpBloomFactor(const in float factor) {
|
|
493
|
+
float lerpBloomFactor( const in float factor ) {
|
|
494
|
+
|
|
474
495
|
float mirrorFactor = 1.2 - factor;
|
|
475
|
-
return mix(factor, mirrorFactor, bloomRadius);
|
|
496
|
+
return mix( factor, mirrorFactor, bloomRadius );
|
|
497
|
+
|
|
476
498
|
}
|
|
477
499
|
|
|
478
500
|
void main() {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
lerpBloomFactor(bloomFactors[
|
|
483
|
-
lerpBloomFactor(bloomFactors[
|
|
501
|
+
|
|
502
|
+
// 3.0 for backwards compatibility with previous alpha-based intensity
|
|
503
|
+
vec3 bloom = 3.0 * bloomStrength * (
|
|
504
|
+
lerpBloomFactor( bloomFactors[ 0 ] ) * bloomTintColors[ 0 ] * texture2D( blurTexture1, vUv ).rgb +
|
|
505
|
+
lerpBloomFactor( bloomFactors[ 1 ] ) * bloomTintColors[ 1 ] * texture2D( blurTexture2, vUv ).rgb +
|
|
506
|
+
lerpBloomFactor( bloomFactors[ 2 ] ) * bloomTintColors[ 2 ] * texture2D( blurTexture3, vUv ).rgb +
|
|
507
|
+
lerpBloomFactor( bloomFactors[ 3 ] ) * bloomTintColors[ 3 ] * texture2D( blurTexture4, vUv ).rgb +
|
|
508
|
+
lerpBloomFactor( bloomFactors[ 4 ] ) * bloomTintColors[ 4 ] * texture2D( blurTexture5, vUv ).rgb
|
|
509
|
+
);
|
|
510
|
+
|
|
511
|
+
float bloomAlpha = max( bloom.r, max( bloom.g, bloom.b ) );
|
|
512
|
+
gl_FragColor = vec4( bloom, bloomAlpha );
|
|
513
|
+
|
|
484
514
|
}`
|
|
485
515
|
} );
|
|
486
516
|
|
|
@@ -141,7 +141,7 @@ const _matrix2 = new Matrix4();
|
|
|
141
141
|
* This renderer can be used to apply hierarchical 3D transformations to DOM elements
|
|
142
142
|
* via the CSS3 [transform](https://www.w3schools.com/cssref/css3_pr_transform.asp) property.
|
|
143
143
|
* `CSS3DRenderer` is particularly interesting if you want to apply 3D effects to a website without
|
|
144
|
-
* canvas based rendering. It can also be used in order to combine DOM elements with
|
|
144
|
+
* canvas based rendering. It can also be used in order to combine DOM elements with WebGL content.
|
|
145
145
|
*
|
|
146
146
|
* There are, however, some important limitations:
|
|
147
147
|
*
|
|
@@ -139,7 +139,7 @@ class Projector {
|
|
|
139
139
|
_face, _faceCount, _facePoolLength = 0,
|
|
140
140
|
_line, _lineCount, _linePoolLength = 0,
|
|
141
141
|
_sprite, _spriteCount, _spritePoolLength = 0,
|
|
142
|
-
_modelMatrix;
|
|
142
|
+
_modelMatrix, _clipInput = [], _clipOutput = [];
|
|
143
143
|
|
|
144
144
|
const
|
|
145
145
|
|
|
@@ -159,7 +159,19 @@ class Projector {
|
|
|
159
159
|
|
|
160
160
|
_frustum = new Frustum(),
|
|
161
161
|
|
|
162
|
-
_objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = []
|
|
162
|
+
_objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = [],
|
|
163
|
+
|
|
164
|
+
_clipVertexPool = [],
|
|
165
|
+
_clipPos1 = new Vector4(),
|
|
166
|
+
_clipPos2 = new Vector4(),
|
|
167
|
+
_clipPos3 = new Vector4(),
|
|
168
|
+
_screenVertexPool = [],
|
|
169
|
+
_clipInputVertices = [ null, null, null ],
|
|
170
|
+
|
|
171
|
+
_clipPlanes = [
|
|
172
|
+
{ sign: + 1 },
|
|
173
|
+
{ sign: - 1 }
|
|
174
|
+
];
|
|
163
175
|
|
|
164
176
|
//
|
|
165
177
|
|
|
@@ -298,48 +310,168 @@ class Projector {
|
|
|
298
310
|
const v2 = _vertexPool[ b ];
|
|
299
311
|
const v3 = _vertexPool[ c ];
|
|
300
312
|
|
|
301
|
-
|
|
313
|
+
// Derive near/far clip distances from NDC z and stored clip-space w
|
|
314
|
+
// (projectVertex already computed positionScreen = clipPos / w, with w preserved)
|
|
315
|
+
const w1 = v1.positionScreen.w;
|
|
316
|
+
const w2 = v2.positionScreen.w;
|
|
317
|
+
const w3 = v3.positionScreen.w;
|
|
318
|
+
|
|
319
|
+
const nearDist1 = w1 * ( v1.positionScreen.z + 1 );
|
|
320
|
+
const nearDist2 = w2 * ( v2.positionScreen.z + 1 );
|
|
321
|
+
const nearDist3 = w3 * ( v3.positionScreen.z + 1 );
|
|
322
|
+
const farDist1 = w1 * ( 1 - v1.positionScreen.z );
|
|
323
|
+
const farDist2 = w2 * ( 1 - v2.positionScreen.z );
|
|
324
|
+
const farDist3 = w3 * ( 1 - v3.positionScreen.z );
|
|
302
325
|
|
|
303
|
-
|
|
326
|
+
// Check if completely outside
|
|
327
|
+
if ( ( nearDist1 < 0 && nearDist2 < 0 && nearDist3 < 0 ) ||
|
|
328
|
+
( farDist1 < 0 && farDist2 < 0 && farDist3 < 0 ) ) {
|
|
329
|
+
|
|
330
|
+
return; // Triangle completely clipped
|
|
331
|
+
|
|
332
|
+
}
|
|
304
333
|
|
|
305
|
-
|
|
334
|
+
// Check if completely inside (no clipping needed)
|
|
335
|
+
if ( nearDist1 >= 0 && nearDist2 >= 0 && nearDist3 >= 0 &&
|
|
336
|
+
farDist1 >= 0 && farDist2 >= 0 && farDist3 >= 0 ) {
|
|
306
337
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
_face.v2.copy( v2 );
|
|
310
|
-
_face.v3.copy( v3 );
|
|
311
|
-
_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) / 3;
|
|
312
|
-
_face.renderOrder = object.renderOrder;
|
|
338
|
+
// No clipping needed - use original path
|
|
339
|
+
if ( checkTriangleVisibility( v1, v2, v3 ) === false ) return;
|
|
313
340
|
|
|
314
|
-
|
|
315
|
-
_vector3.subVectors( v3.position, v2.position );
|
|
316
|
-
_vector4.subVectors( v1.position, v2.position );
|
|
317
|
-
_vector3.cross( _vector4 );
|
|
318
|
-
_face.normalModel.copy( _vector3 );
|
|
319
|
-
_face.normalModel.applyMatrix3( normalMatrix ).normalize();
|
|
341
|
+
if ( material.side === DoubleSide || checkBackfaceCulling( v1, v2, v3 ) === true ) {
|
|
320
342
|
|
|
321
|
-
|
|
343
|
+
_face = getNextFaceInPool();
|
|
322
344
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
345
|
+
_face.id = object.id;
|
|
346
|
+
_face.v1.copy( v1 );
|
|
347
|
+
_face.v2.copy( v2 );
|
|
348
|
+
_face.v3.copy( v3 );
|
|
349
|
+
_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) / 3;
|
|
350
|
+
_face.renderOrder = object.renderOrder;
|
|
326
351
|
|
|
327
|
-
|
|
328
|
-
|
|
352
|
+
// face normal
|
|
353
|
+
_vector3.subVectors( v3.position, v2.position );
|
|
354
|
+
_vector4.subVectors( v1.position, v2.position );
|
|
355
|
+
_vector3.cross( _vector4 );
|
|
356
|
+
_face.normalModel.copy( _vector3 );
|
|
357
|
+
_face.normalModel.applyMatrix3( normalMatrix ).normalize();
|
|
358
|
+
|
|
359
|
+
for ( let i = 0; i < 3; i ++ ) {
|
|
360
|
+
|
|
361
|
+
const normal = _face.vertexNormalsModel[ i ];
|
|
362
|
+
normal.fromArray( normals, arguments[ i ] * 3 );
|
|
363
|
+
normal.applyMatrix3( normalMatrix ).normalize();
|
|
364
|
+
|
|
365
|
+
const uv = _face.uvs[ i ];
|
|
366
|
+
uv.fromArray( uvs, arguments[ i ] * 2 );
|
|
367
|
+
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
_face.vertexNormalsLength = 3;
|
|
371
|
+
|
|
372
|
+
_face.material = material;
|
|
373
|
+
|
|
374
|
+
if ( material.vertexColors ) {
|
|
375
|
+
|
|
376
|
+
_face.color.fromArray( colors, a * 3 );
|
|
377
|
+
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
_renderData.elements.push( _face );
|
|
329
381
|
|
|
330
382
|
}
|
|
331
383
|
|
|
332
|
-
|
|
384
|
+
return;
|
|
385
|
+
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// Triangle needs clipping - reconstruct clip-space positions from NDC + w
|
|
389
|
+
_clipPos1.set( v1.positionScreen.x * w1, v1.positionScreen.y * w1, v1.positionScreen.z * w1, w1 );
|
|
390
|
+
_clipPos2.set( v2.positionScreen.x * w2, v2.positionScreen.y * w2, v2.positionScreen.z * w2, w2 );
|
|
391
|
+
_clipPos3.set( v3.positionScreen.x * w3, v3.positionScreen.y * w3, v3.positionScreen.z * w3, w3 );
|
|
392
|
+
_clipInputVertices[ 0 ] = _clipPos1;
|
|
393
|
+
_clipInputVertices[ 1 ] = _clipPos2;
|
|
394
|
+
_clipInputVertices[ 2 ] = _clipPos3;
|
|
395
|
+
const clippedCount = clipTriangle( _clipInputVertices );
|
|
333
396
|
|
|
334
|
-
|
|
397
|
+
if ( clippedCount < 3 ) return; // Triangle completely clipped
|
|
335
398
|
|
|
336
|
-
|
|
399
|
+
// Perform perspective divide on clipped vertices and create screen vertices
|
|
400
|
+
for ( let i = 0; i < clippedCount; i ++ ) {
|
|
337
401
|
|
|
338
|
-
|
|
402
|
+
const cv = _clipInput[ i ];
|
|
403
|
+
|
|
404
|
+
// Get or create renderable vertex from pool
|
|
405
|
+
let sv = _screenVertexPool[ i ];
|
|
406
|
+
if ( ! sv ) {
|
|
407
|
+
|
|
408
|
+
sv = new RenderableVertex();
|
|
409
|
+
_screenVertexPool[ i ] = sv;
|
|
339
410
|
|
|
340
411
|
}
|
|
341
412
|
|
|
342
|
-
|
|
413
|
+
// Perform perspective divide
|
|
414
|
+
const invW = 1 / cv.w;
|
|
415
|
+
sv.positionScreen.set( cv.x * invW, cv.y * invW, cv.z * invW, 1 );
|
|
416
|
+
|
|
417
|
+
// Interpolate world position (simplified - using weighted average based on barycentric-like coords)
|
|
418
|
+
// For a proper implementation, we'd need to track interpolation weights
|
|
419
|
+
sv.positionWorld.copy( v1.positionWorld );
|
|
420
|
+
|
|
421
|
+
sv.visible = true;
|
|
422
|
+
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Triangulate the clipped polygon (simple fan triangulation)
|
|
426
|
+
for ( let i = 1; i < clippedCount - 1; i ++ ) {
|
|
427
|
+
|
|
428
|
+
const tv1 = _screenVertexPool[ 0 ];
|
|
429
|
+
const tv2 = _screenVertexPool[ i ];
|
|
430
|
+
const tv3 = _screenVertexPool[ i + 1 ];
|
|
431
|
+
|
|
432
|
+
if ( material.side === DoubleSide || checkBackfaceCulling( tv1, tv2, tv3 ) === true ) {
|
|
433
|
+
|
|
434
|
+
_face = getNextFaceInPool();
|
|
435
|
+
|
|
436
|
+
_face.id = object.id;
|
|
437
|
+
_face.v1.copy( tv1 );
|
|
438
|
+
_face.v2.copy( tv2 );
|
|
439
|
+
_face.v3.copy( tv3 );
|
|
440
|
+
_face.z = ( tv1.positionScreen.z + tv2.positionScreen.z + tv3.positionScreen.z ) / 3;
|
|
441
|
+
_face.renderOrder = object.renderOrder;
|
|
442
|
+
|
|
443
|
+
// face normal - use original triangle's normal
|
|
444
|
+
_vector3.subVectors( v3.position, v2.position );
|
|
445
|
+
_vector4.subVectors( v1.position, v2.position );
|
|
446
|
+
_vector3.cross( _vector4 );
|
|
447
|
+
_face.normalModel.copy( _vector3 );
|
|
448
|
+
_face.normalModel.applyMatrix3( normalMatrix ).normalize();
|
|
449
|
+
|
|
450
|
+
// Use original vertex normals and UVs (simplified - proper impl would interpolate)
|
|
451
|
+
for ( let j = 0; j < 3; j ++ ) {
|
|
452
|
+
|
|
453
|
+
const normal = _face.vertexNormalsModel[ j ];
|
|
454
|
+
normal.fromArray( normals, arguments[ j ] * 3 );
|
|
455
|
+
normal.applyMatrix3( normalMatrix ).normalize();
|
|
456
|
+
|
|
457
|
+
const uv = _face.uvs[ j ];
|
|
458
|
+
uv.fromArray( uvs, arguments[ j ] * 2 );
|
|
459
|
+
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
_face.vertexNormalsLength = 3;
|
|
463
|
+
|
|
464
|
+
_face.material = material;
|
|
465
|
+
|
|
466
|
+
if ( material.vertexColors ) {
|
|
467
|
+
|
|
468
|
+
_face.color.fromArray( colors, a * 3 );
|
|
469
|
+
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
_renderData.elements.push( _face );
|
|
473
|
+
|
|
474
|
+
}
|
|
343
475
|
|
|
344
476
|
}
|
|
345
477
|
|
|
@@ -858,6 +990,92 @@ class Projector {
|
|
|
858
990
|
|
|
859
991
|
}
|
|
860
992
|
|
|
993
|
+
// Sutherland-Hodgman triangle clipping in homogeneous clip space
|
|
994
|
+
// Returns count of vertices in clipped polygon (0 if completely clipped, 3+ if partially clipped)
|
|
995
|
+
// Result vertices are in _clipInput array
|
|
996
|
+
function clipTriangle( vertices ) {
|
|
997
|
+
|
|
998
|
+
// Initialize input with the three input vertices
|
|
999
|
+
_clipInput[ 0 ] = vertices[ 0 ];
|
|
1000
|
+
_clipInput[ 1 ] = vertices[ 1 ];
|
|
1001
|
+
_clipInput[ 2 ] = vertices[ 2 ];
|
|
1002
|
+
|
|
1003
|
+
let inputCount = 3;
|
|
1004
|
+
let outputCount = 0;
|
|
1005
|
+
|
|
1006
|
+
for ( let p = 0; p < _clipPlanes.length; p ++ ) {
|
|
1007
|
+
|
|
1008
|
+
const plane = _clipPlanes[ p ];
|
|
1009
|
+
outputCount = 0;
|
|
1010
|
+
|
|
1011
|
+
if ( inputCount === 0 ) break;
|
|
1012
|
+
|
|
1013
|
+
for ( let i = 0; i < inputCount; i ++ ) {
|
|
1014
|
+
|
|
1015
|
+
const v1 = _clipInput[ i ];
|
|
1016
|
+
const v2 = _clipInput[ ( i + 1 ) % inputCount ];
|
|
1017
|
+
|
|
1018
|
+
const d1 = plane.sign * v1.z + v1.w;
|
|
1019
|
+
const d2 = plane.sign * v2.z + v2.w;
|
|
1020
|
+
|
|
1021
|
+
const v1Inside = d1 >= 0;
|
|
1022
|
+
const v2Inside = d2 >= 0;
|
|
1023
|
+
|
|
1024
|
+
if ( v1Inside && v2Inside ) {
|
|
1025
|
+
|
|
1026
|
+
// Both inside - add v1
|
|
1027
|
+
_clipOutput[ outputCount ++ ] = v1;
|
|
1028
|
+
|
|
1029
|
+
} else if ( v1Inside && ! v2Inside ) {
|
|
1030
|
+
|
|
1031
|
+
// v1 inside, v2 outside - add v1 and intersection
|
|
1032
|
+
_clipOutput[ outputCount ++ ] = v1;
|
|
1033
|
+
|
|
1034
|
+
const t = d1 / ( d1 - d2 );
|
|
1035
|
+
let intersection = _clipVertexPool[ outputCount ];
|
|
1036
|
+
if ( ! intersection ) {
|
|
1037
|
+
|
|
1038
|
+
intersection = new Vector4();
|
|
1039
|
+
_clipVertexPool[ outputCount ] = intersection;
|
|
1040
|
+
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
intersection.lerpVectors( v1, v2, t );
|
|
1044
|
+
_clipOutput[ outputCount ++ ] = intersection;
|
|
1045
|
+
|
|
1046
|
+
} else if ( ! v1Inside && v2Inside ) {
|
|
1047
|
+
|
|
1048
|
+
// v1 outside, v2 inside - add intersection only
|
|
1049
|
+
const t = d1 / ( d1 - d2 );
|
|
1050
|
+
let intersection = _clipVertexPool[ outputCount ];
|
|
1051
|
+
if ( ! intersection ) {
|
|
1052
|
+
|
|
1053
|
+
intersection = new Vector4();
|
|
1054
|
+
_clipVertexPool[ outputCount ] = intersection;
|
|
1055
|
+
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
intersection.lerpVectors( v1, v2, t );
|
|
1059
|
+
_clipOutput[ outputCount ++ ] = intersection;
|
|
1060
|
+
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
// Both outside - add nothing
|
|
1064
|
+
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
// Swap input/output
|
|
1068
|
+
const temp = _clipInput;
|
|
1069
|
+
_clipInput = _clipOutput;
|
|
1070
|
+
_clipOutput = temp;
|
|
1071
|
+
inputCount = outputCount;
|
|
1072
|
+
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
return inputCount;
|
|
1076
|
+
|
|
1077
|
+
}
|
|
1078
|
+
|
|
861
1079
|
function clipLine( s1, s2 ) {
|
|
862
1080
|
|
|
863
1081
|
let alpha1 = 0, alpha2 = 1;
|