@plastic-software/three 0.179.0 → 0.181.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +268 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +48 -41
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -137,6 +137,8 @@ class SSRPass extends Pass {
|
|
|
137
137
|
|
|
138
138
|
this._selects = selects;
|
|
139
139
|
|
|
140
|
+
this._resolutionScale = 1;
|
|
141
|
+
|
|
140
142
|
/**
|
|
141
143
|
* Whether the pass is selective or not.
|
|
142
144
|
*
|
|
@@ -457,6 +459,29 @@ class SSRPass extends Pass {
|
|
|
457
459
|
|
|
458
460
|
}
|
|
459
461
|
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* The resolution scale. Valid values are in the range
|
|
465
|
+
* `[0,1]`. `1` means best quality but also results in
|
|
466
|
+
* more computational overhead. Setting to `0.5` means
|
|
467
|
+
* the effect is computed in half-resolution.
|
|
468
|
+
*
|
|
469
|
+
* @type {number}
|
|
470
|
+
* @default 1
|
|
471
|
+
*/
|
|
472
|
+
get resolutionScale() {
|
|
473
|
+
|
|
474
|
+
return this._resolutionScale;
|
|
475
|
+
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
set resolutionScale( value ) {
|
|
479
|
+
|
|
480
|
+
this._resolutionScale = value;
|
|
481
|
+
this.setSize( this.width, this.height ); // force a resize when resolution scaling changes
|
|
482
|
+
|
|
483
|
+
}
|
|
484
|
+
|
|
460
485
|
/**
|
|
461
486
|
* Frees the GPU-related resources allocated by this instance. Call this
|
|
462
487
|
* method whenever the pass is no longer used in your app.
|
|
@@ -661,23 +686,27 @@ class SSRPass extends Pass {
|
|
|
661
686
|
this.width = width;
|
|
662
687
|
this.height = height;
|
|
663
688
|
|
|
664
|
-
|
|
689
|
+
const effectiveWidth = Math.round( this.resolutionScale * width );
|
|
690
|
+
const effectiveHeight = Math.round( this.resolutionScale * height );
|
|
691
|
+
|
|
692
|
+
this.ssrMaterial.defines.MAX_STEP = Math.sqrt( effectiveWidth * effectiveWidth + effectiveHeight * effectiveHeight );
|
|
665
693
|
this.ssrMaterial.needsUpdate = true;
|
|
694
|
+
|
|
666
695
|
this.beautyRenderTarget.setSize( width, height );
|
|
667
|
-
this.prevRenderTarget.setSize( width, height );
|
|
668
|
-
this.ssrRenderTarget.setSize( width, height );
|
|
669
696
|
this.normalRenderTarget.setSize( width, height );
|
|
670
697
|
this.metalnessRenderTarget.setSize( width, height );
|
|
671
|
-
this.
|
|
672
|
-
this.
|
|
698
|
+
this.ssrRenderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
699
|
+
this.prevRenderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
700
|
+
this.blurRenderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
701
|
+
this.blurRenderTarget2.setSize( effectiveWidth, effectiveHeight );
|
|
673
702
|
// this.blurRenderTarget3.setSize(width, height);
|
|
674
703
|
|
|
675
|
-
this.ssrMaterial.uniforms[ 'resolution' ].value.set(
|
|
704
|
+
this.ssrMaterial.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
|
|
676
705
|
this.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );
|
|
677
706
|
this.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
|
|
678
707
|
|
|
679
|
-
this.blurMaterial.uniforms[ 'resolution' ].value.set(
|
|
680
|
-
this.blurMaterial2.uniforms[ 'resolution' ].value.set(
|
|
708
|
+
this.blurMaterial.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
|
|
709
|
+
this.blurMaterial2.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
|
|
681
710
|
|
|
682
711
|
}
|
|
683
712
|
|
|
@@ -22,7 +22,7 @@ import { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js
|
|
|
22
22
|
* When using this pass, tone mapping must be enabled in the renderer settings.
|
|
23
23
|
*
|
|
24
24
|
* Reference:
|
|
25
|
-
* - [Bloom in Unreal Engine]
|
|
25
|
+
* - [Bloom in Unreal Engine](https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/)
|
|
26
26
|
*
|
|
27
27
|
* ```js
|
|
28
28
|
* const resolution = new THREE.Vector2( window.innerWidth, window.innerHeight );
|
|
@@ -145,7 +145,9 @@ class UnrealBloomPass extends Pass {
|
|
|
145
145
|
// gaussian blur materials
|
|
146
146
|
|
|
147
147
|
this.separableBlurMaterials = [];
|
|
148
|
-
|
|
148
|
+
// These sizes have been changed to account for the altered coefficients-calculation to avoid blockiness,
|
|
149
|
+
// while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528
|
|
150
|
+
const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
|
|
149
151
|
resx = Math.round( this.resolution.x / 2 );
|
|
150
152
|
resy = Math.round( this.resolution.y / 2 );
|
|
151
153
|
|
|
@@ -376,10 +378,11 @@ class UnrealBloomPass extends Pass {
|
|
|
376
378
|
_getSeparableBlurMaterial( kernelRadius ) {
|
|
377
379
|
|
|
378
380
|
const coefficients = [];
|
|
381
|
+
const sigma = kernelRadius / 3;
|
|
379
382
|
|
|
380
383
|
for ( let i = 0; i < kernelRadius; i ++ ) {
|
|
381
384
|
|
|
382
|
-
coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / (
|
|
385
|
+
coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );
|
|
383
386
|
|
|
384
387
|
}
|
|
385
388
|
|
|
@@ -420,10 +423,9 @@ class UnrealBloomPass extends Pass {
|
|
|
420
423
|
vec2 uvOffset = direction * invSize * x;
|
|
421
424
|
vec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;
|
|
422
425
|
vec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;
|
|
423
|
-
diffuseSum += (sample1 + sample2) * w;
|
|
424
|
-
weightSum += 2.0 * w;
|
|
426
|
+
diffuseSum += ( sample1 + sample2 ) * w;
|
|
425
427
|
}
|
|
426
|
-
gl_FragColor = vec4(diffuseSum
|
|
428
|
+
gl_FragColor = vec4( diffuseSum, 1.0 );
|
|
427
429
|
}`
|
|
428
430
|
} );
|
|
429
431
|
|
|
@@ -16,7 +16,7 @@ class CSS2DObject extends Object3D {
|
|
|
16
16
|
/**
|
|
17
17
|
* Constructs a new CSS2D object.
|
|
18
18
|
*
|
|
19
|
-
* @param {
|
|
19
|
+
* @param {HTMLElement} [element] - The DOM element.
|
|
20
20
|
*/
|
|
21
21
|
constructor( element = document.createElement( 'div' ) ) {
|
|
22
22
|
|
|
@@ -34,7 +34,7 @@ class CSS2DObject extends Object3D {
|
|
|
34
34
|
/**
|
|
35
35
|
* The DOM element which defines the appearance of this 3D object.
|
|
36
36
|
*
|
|
37
|
-
* @type {
|
|
37
|
+
* @type {HTMLElement}
|
|
38
38
|
* @readonly
|
|
39
39
|
* @default true
|
|
40
40
|
*/
|
|
@@ -59,6 +59,7 @@ class CSS2DObject extends Object3D {
|
|
|
59
59
|
this.traverse( function ( object ) {
|
|
60
60
|
|
|
61
61
|
if (
|
|
62
|
+
object.element &&
|
|
62
63
|
object.element instanceof object.element.ownerDocument.defaultView.Element &&
|
|
63
64
|
object.element.parentNode !== null
|
|
64
65
|
) {
|
|
@@ -132,10 +133,20 @@ class CSS2DRenderer {
|
|
|
132
133
|
/**
|
|
133
134
|
* The DOM where the renderer appends its child-elements.
|
|
134
135
|
*
|
|
135
|
-
* @type {
|
|
136
|
+
* @type {HTMLElement}
|
|
136
137
|
*/
|
|
137
138
|
this.domElement = domElement;
|
|
138
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Controls whether the renderer assigns `z-index` values to CSS2DObject DOM elements.
|
|
142
|
+
* If set to `true`, z-index values are assigned first based on the `renderOrder`
|
|
143
|
+
* and secondly - the distance to the camera. If set to `false`, no z-index values are assigned.
|
|
144
|
+
*
|
|
145
|
+
* @type {boolean}
|
|
146
|
+
* @default true
|
|
147
|
+
*/
|
|
148
|
+
this.sortObjects = true;
|
|
149
|
+
|
|
139
150
|
/**
|
|
140
151
|
* Returns an object containing the width and height of the renderer.
|
|
141
152
|
*
|
|
@@ -165,7 +176,7 @@ class CSS2DRenderer {
|
|
|
165
176
|
_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );
|
|
166
177
|
|
|
167
178
|
renderObject( scene, scene, camera );
|
|
168
|
-
zOrder( scene );
|
|
179
|
+
if ( this.sortObjects ) zOrder( scene );
|
|
169
180
|
|
|
170
181
|
};
|
|
171
182
|
|
|
@@ -310,7 +321,7 @@ class CSS2DRenderer {
|
|
|
310
321
|
* Constructor parameters of `CSS2DRenderer`.
|
|
311
322
|
*
|
|
312
323
|
* @typedef {Object} CSS2DRenderer~Parameters
|
|
313
|
-
* @property {
|
|
324
|
+
* @property {HTMLElement} [element] - A DOM element where the renderer appends its child-elements.
|
|
314
325
|
* If not passed in here, a new div element will be created.
|
|
315
326
|
**/
|
|
316
327
|
|
|
@@ -22,7 +22,7 @@ class CSS3DObject extends Object3D {
|
|
|
22
22
|
/**
|
|
23
23
|
* Constructs a new CSS3D object.
|
|
24
24
|
*
|
|
25
|
-
* @param {
|
|
25
|
+
* @param {HTMLElement} [element] - The DOM element.
|
|
26
26
|
*/
|
|
27
27
|
constructor( element = document.createElement( 'div' ) ) {
|
|
28
28
|
|
|
@@ -40,7 +40,7 @@ class CSS3DObject extends Object3D {
|
|
|
40
40
|
/**
|
|
41
41
|
* The DOM element which defines the appearance of this 3D object.
|
|
42
42
|
*
|
|
43
|
-
* @type {
|
|
43
|
+
* @type {HTMLElement}
|
|
44
44
|
* @readonly
|
|
45
45
|
* @default true
|
|
46
46
|
*/
|
|
@@ -56,6 +56,7 @@ class CSS3DObject extends Object3D {
|
|
|
56
56
|
this.traverse( function ( object ) {
|
|
57
57
|
|
|
58
58
|
if (
|
|
59
|
+
object.element &&
|
|
59
60
|
object.element instanceof object.element.ownerDocument.defaultView.Element &&
|
|
60
61
|
object.element.parentNode !== null
|
|
61
62
|
) {
|
|
@@ -94,7 +95,7 @@ class CSS3DSprite extends CSS3DObject {
|
|
|
94
95
|
/**
|
|
95
96
|
* Constructs a new CSS3D sprite object.
|
|
96
97
|
*
|
|
97
|
-
* @param {
|
|
98
|
+
* @param {HTMLElement} [element] - The DOM element.
|
|
98
99
|
*/
|
|
99
100
|
constructor( element ) {
|
|
100
101
|
|
|
@@ -138,7 +139,7 @@ const _matrix2 = new Matrix4();
|
|
|
138
139
|
|
|
139
140
|
/**
|
|
140
141
|
* This renderer can be used to apply hierarchical 3D transformations to DOM elements
|
|
141
|
-
* via the CSS3 [transform]
|
|
142
|
+
* via the CSS3 [transform](https://www.w3schools.com/cssref/css3_pr_transform.asp) property.
|
|
142
143
|
* `CSS3DRenderer` is particularly interesting if you want to apply 3D effects to a website without
|
|
143
144
|
* canvas based rendering. It can also be used in order to combine DOM elements with WebGLcontent.
|
|
144
145
|
*
|
|
@@ -179,7 +180,7 @@ class CSS3DRenderer {
|
|
|
179
180
|
/**
|
|
180
181
|
* The DOM where the renderer appends its child-elements.
|
|
181
182
|
*
|
|
182
|
-
* @type {
|
|
183
|
+
* @type {HTMLElement}
|
|
183
184
|
*/
|
|
184
185
|
this.domElement = domElement;
|
|
185
186
|
|
|
@@ -446,7 +447,7 @@ class CSS3DRenderer {
|
|
|
446
447
|
* Constructor parameters of `CSS3DRenderer`.
|
|
447
448
|
*
|
|
448
449
|
* @typedef {Object} CSS3DRenderer~Parameters
|
|
449
|
-
* @property {
|
|
450
|
+
* @property {HTMLElement} [element] - A DOM element where the renderer appends its child-elements.
|
|
450
451
|
* If not passed in here, a new div element will be created.
|
|
451
452
|
**/
|
|
452
453
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* ACES Filmic Tone Mapping Shader by Stephen Hill.
|
|
8
|
-
* Reference: [ltc_blit.fs]
|
|
8
|
+
* Reference: [ltc_blit.fs](https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs)
|
|
9
9
|
*
|
|
10
10
|
* This implementation of ACES is modified to accommodate a brighter viewing environment.
|
|
11
11
|
* The scale factor of 1/0.6 is subjective. See discussion in #19621.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Inspired by [Three.js FBO motion trails]
|
|
7
|
+
* Inspired by [Three.js FBO motion trails](https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1&).
|
|
8
8
|
*
|
|
9
9
|
* @constant
|
|
10
10
|
* @type {ShaderMaterial~Shader}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Bleach bypass shader [http://en.wikipedia.org/wiki/Bleach_bypass] based on
|
|
9
|
-
* [Nvidia Shader library]
|
|
9
|
+
* [Nvidia Shader library](http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html#post_bleach_bypass).
|
|
10
10
|
*
|
|
11
11
|
* @constant
|
|
12
12
|
* @type {ShaderMaterial~Shader}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Depth-of-field shader with bokeh ported from
|
|
8
|
-
* [GLSL shader by Martins Upitis]
|
|
8
|
+
* [GLSL shader by Martins Upitis](http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html).
|
|
9
9
|
*
|
|
10
10
|
* @constant
|
|
11
11
|
* @type {ShaderMaterial~Shader}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Depth-of-field shader with bokeh ported from
|
|
12
|
-
* [GLSL shader by Martins Upitis]
|
|
12
|
+
* [GLSL shader by Martins Upitis](http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update)).
|
|
13
13
|
*
|
|
14
14
|
* Requires #define RINGS and SAMPLES integers
|
|
15
15
|
*
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Focus shader based on [PaintEffect postprocess from ro.me]
|
|
7
|
+
* Focus shader based on [PaintEffect postprocess from ro.me](http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js).
|
|
8
8
|
*
|
|
9
9
|
* @constant
|
|
10
10
|
* @type {ShaderMaterial~Shader}
|
|
@@ -15,8 +15,8 @@ import {
|
|
|
15
15
|
* GTAO shader. Use by {@link GTAOPass}.
|
|
16
16
|
*
|
|
17
17
|
* References:
|
|
18
|
-
* - [Practical Realtime Strategies for Accurate Indirect Occlusion]
|
|
19
|
-
* - [Horizon-Based Indirect Lighting (HBIL)]
|
|
18
|
+
* - [Practical Realtime Strategies for Accurate Indirect Occlusion](https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf).
|
|
19
|
+
* - [Horizon-Based Indirect Lighting (HBIL)](https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf)
|
|
20
20
|
*
|
|
21
21
|
* @constant
|
|
22
22
|
* @type {ShaderMaterial~Shader}
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
* 6*6*6 = 216 samples.
|
|
23
23
|
*
|
|
24
24
|
* References:
|
|
25
|
-
* - [Sousa2008, Crysis Next Gen Effects, GDC2008]
|
|
25
|
+
* - [Sousa2008, Crysis Next Gen Effects, GDC2008](http://www.crytek.com/sites/default/files/GDC08_SousaT_CrysisEffects.ppt).
|
|
26
26
|
*
|
|
27
27
|
* @constant
|
|
28
28
|
* @type {ShaderMaterial~Shader}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Kaleidoscope Shader.
|
|
8
8
|
* Radial reflection around center point
|
|
9
9
|
* Ported from: {@link http://pixelshaders.com/editor/}
|
|
10
|
-
* by [Toby Schachman]
|
|
10
|
+
* by [Toby Schachman](http://tobyschachman.com/)
|
|
11
11
|
*
|
|
12
12
|
* sides: number of reflections
|
|
13
13
|
* angle: initial angle in radians
|
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
* Poisson Denoise Shader.
|
|
14
14
|
*
|
|
15
15
|
* References:
|
|
16
|
-
* - [Self-Supervised Poisson-Gaussian Denoising]
|
|
17
|
-
* - [Poisson2Sparse: Self-Supervised Poisson Denoising From a Single Image]
|
|
16
|
+
* - [Self-Supervised Poisson-Gaussian Denoising](https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf).
|
|
17
|
+
* - [Poisson2Sparse: Self-Supervised Poisson Denoising From a Single Image](https://arxiv.org/pdf/2206.01856.pdf)
|
|
18
18
|
*
|
|
19
19
|
* @constant
|
|
20
20
|
* @type {ShaderMaterial~Shader}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
* A collection of shaders used for SSR.
|
|
9
9
|
*
|
|
10
10
|
* References:
|
|
11
|
-
* - [3D Game Shaders For Beginners, Screen Space Reflection (SSR)]
|
|
11
|
+
* - [3D Game Shaders For Beginners, Screen Space Reflection (SSR)](https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html).
|
|
12
12
|
*
|
|
13
13
|
* @module SSRShader
|
|
14
14
|
* @three_import import * as SSRShader from 'three/addons/shaders/SSRShader.js';
|
|
@@ -22,7 +22,7 @@ const meshphong_frag_body = ShaderChunk[ 'meshphong_frag' ].slice( ShaderChunk[
|
|
|
22
22
|
/**
|
|
23
23
|
* Subsurface Scattering shader.
|
|
24
24
|
*
|
|
25
|
-
* Based on GDC 2011 – [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look]
|
|
25
|
+
* Based on GDC 2011 – [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look](https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/)
|
|
26
26
|
*
|
|
27
27
|
* @constant
|
|
28
28
|
* @type {ShaderMaterial~Shader}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Triangle blur shader based on [glfx.js triangle blur shader]
|
|
11
|
+
* Triangle blur shader based on [glfx.js triangle blur shader](https://github.com/evanw/glfx.js).
|
|
12
12
|
*
|
|
13
13
|
* A basic blur filter, which convolves the image with a
|
|
14
14
|
* pyramid filter. The pyramid filter is separable and is applied as two
|
|
@@ -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](http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js).
|
|
8
8
|
*
|
|
9
9
|
* @constant
|
|
10
10
|
* @type {ShaderMaterial~Shader}
|
|
@@ -11,22 +11,21 @@ const arithmeticOperators = [
|
|
|
11
11
|
];
|
|
12
12
|
|
|
13
13
|
const precedenceOperators = [
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
'
|
|
24
|
-
'
|
|
25
|
-
'
|
|
26
|
-
'
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
].reverse();
|
|
14
|
+
[ ',' ],
|
|
15
|
+
[ '=', '+=', '-=', '*=', '/=', '%=', '^=', '&=', '|=', '<<=', '>>=' ],
|
|
16
|
+
[ '?' ],
|
|
17
|
+
[ '||' ],
|
|
18
|
+
[ '^^' ],
|
|
19
|
+
[ '&&' ],
|
|
20
|
+
[ '|' ],
|
|
21
|
+
[ '^' ],
|
|
22
|
+
[ '&' ],
|
|
23
|
+
[ '==', '!=' ],
|
|
24
|
+
[ '<', '>', '<=', '>=' ],
|
|
25
|
+
[ '<<', '>>' ],
|
|
26
|
+
[ '+', '-' ],
|
|
27
|
+
[ '*', '/', '%' ]
|
|
28
|
+
];
|
|
30
29
|
|
|
31
30
|
const associativityRightToLeft = [
|
|
32
31
|
'=',
|
|
@@ -334,7 +333,7 @@ class GLSLDecoder {
|
|
|
334
333
|
|
|
335
334
|
let groupIndex = 0;
|
|
336
335
|
|
|
337
|
-
for ( const
|
|
336
|
+
for ( const operators of precedenceOperators ) {
|
|
338
337
|
|
|
339
338
|
const parseToken = ( i, inverse = false ) => {
|
|
340
339
|
|
|
@@ -351,7 +350,9 @@ class GLSLDecoder {
|
|
|
351
350
|
|
|
352
351
|
}
|
|
353
352
|
|
|
354
|
-
if ( groupIndex === 0 && token.str
|
|
353
|
+
if ( groupIndex === 0 && operators.includes( token.str ) ) {
|
|
354
|
+
|
|
355
|
+
const operator = token.str;
|
|
355
356
|
|
|
356
357
|
if ( operator === '?' ) {
|
|
357
358
|
|
|
@@ -396,7 +397,9 @@ class GLSLDecoder {
|
|
|
396
397
|
|
|
397
398
|
};
|
|
398
399
|
|
|
399
|
-
|
|
400
|
+
const isRightAssociative = operators.some( op => associativityRightToLeft.includes( op ) );
|
|
401
|
+
|
|
402
|
+
if ( isRightAssociative ) {
|
|
400
403
|
|
|
401
404
|
for ( let i = 0; i < tokens.length; i ++ ) {
|
|
402
405
|
|
|
@@ -340,7 +340,7 @@ class TSLEncoder {
|
|
|
340
340
|
|
|
341
341
|
if ( node.hasAssignment ) {
|
|
342
342
|
|
|
343
|
-
if ( node.after === false ) {
|
|
343
|
+
if ( node.after === false && ( node.type === '++' || node.type === '--' ) ) {
|
|
344
344
|
|
|
345
345
|
type += 'Before';
|
|
346
346
|
|
|
@@ -665,15 +665,7 @@ ${ this.tab }} )`;
|
|
|
665
665
|
|
|
666
666
|
}
|
|
667
667
|
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
varStr += ' = ' + valueStr + '.toVar()';
|
|
671
|
-
|
|
672
|
-
} else {
|
|
673
|
-
|
|
674
|
-
varStr += ' = ' + valueStr;
|
|
675
|
-
|
|
676
|
-
}
|
|
668
|
+
varStr += ' = ' + valueStr;
|
|
677
669
|
|
|
678
670
|
} else {
|
|
679
671
|
|
|
@@ -689,6 +681,12 @@ ${ this.tab }} )`;
|
|
|
689
681
|
|
|
690
682
|
}
|
|
691
683
|
|
|
684
|
+
if ( node.needsToVar ) {
|
|
685
|
+
|
|
686
|
+
varStr = varStr + '.toVar()';
|
|
687
|
+
|
|
688
|
+
}
|
|
689
|
+
|
|
692
690
|
return varStr;
|
|
693
691
|
|
|
694
692
|
}
|
|
@@ -758,6 +756,7 @@ ${ this.tab }} )`;
|
|
|
758
756
|
const mutableParam = new VariableDeclaration( param.type, param.name, new Accessor( param.name + '_immutable' ), null, true );
|
|
759
757
|
mutableParam.parent = param.parent; // link to the original node
|
|
760
758
|
mutableParam.linker.assignments.push( mutableParam );
|
|
759
|
+
mutableParam.needsToVar = true; // force var declaration
|
|
761
760
|
|
|
762
761
|
node.body.unshift( mutableParam );
|
|
763
762
|
|
|
@@ -80,6 +80,10 @@ const wgslLib = {
|
|
|
80
80
|
'textureLod': 'textureSampleLevel',
|
|
81
81
|
'texelFetch': 'textureLoad',
|
|
82
82
|
'textureGrad': 'textureSampleGrad',
|
|
83
|
+
'floatBitsToInt': 'bitcast<i32>',
|
|
84
|
+
'floatBitsToUint': 'bitcast<u32>',
|
|
85
|
+
'intBitsToFloat': 'bitcast<f32>',
|
|
86
|
+
'uintBitsToFloat': 'bitcast<f32>',
|
|
83
87
|
};
|
|
84
88
|
|
|
85
89
|
class WGSLEncoder {
|
|
@@ -170,6 +174,26 @@ class WGSLEncoder {
|
|
|
170
174
|
|
|
171
175
|
code = `${ modFnName }( ${ snippets.join( ', ' ) } )`;
|
|
172
176
|
|
|
177
|
+
} else if ( fnName.startsWith( 'bitcast' ) ) {
|
|
178
|
+
|
|
179
|
+
const params = node.params.map( p => this.emitExpression( p ) ).join( ',' );
|
|
180
|
+
const types = node.params.map( p => p.getType() );
|
|
181
|
+
|
|
182
|
+
if ( /.*vec[234]/.test( types[ 0 ] ) ) {
|
|
183
|
+
|
|
184
|
+
const conversionType = fnName.substring( 8, fnName.length - 1 );
|
|
185
|
+
const vectorType = types[ 0 ].substring( - 1 );
|
|
186
|
+
|
|
187
|
+
code = `bitcast<${ vectorType }<${ conversionType }>>`;
|
|
188
|
+
|
|
189
|
+
} else {
|
|
190
|
+
|
|
191
|
+
code = fnName;
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
code += `( ${ params } )`;
|
|
196
|
+
|
|
173
197
|
} else if ( fnName.startsWith( 'texture' ) ) {
|
|
174
198
|
|
|
175
199
|
// Handle texture functions separately due to sampler handling
|