super-three 0.157.1 → 0.160.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/README.md +6 -4
- package/build/three.cjs +3100 -1537
- package/build/three.js +3100 -1537
- package/build/three.min.js +1 -1
- package/build/three.module.js +3093 -1538
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +291 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +62 -41
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +53 -48
- package/examples/jsm/exporters/GLTFExporter.js +151 -3
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +83 -6
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +85 -7
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +16 -12
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +13 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +7 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +15 -6
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +7 -34
- package/examples/jsm/nodes/core/VaryingNode.js +3 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +17 -10
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +24 -27
- package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +10 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +3 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +31 -22
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +21 -2
- package/examples/jsm/renderers/common/RenderObjects.js +5 -3
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +8 -37
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
- package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +135 -133
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +8 -5
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +7 -3
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +8 -3
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +270 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +715 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +24 -9
- package/examples/jsm/webxr/XRButton.js +27 -11
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -6
- package/src/Three.js +1 -0
- package/src/constants.js +8 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/Material.js +27 -13
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Box3.js +35 -18
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/math/Vector3.js +11 -12
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +165 -43
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +100 -51
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Matrix4,
|
|
3
|
+
Vector2,
|
|
4
|
+
Vector3,
|
|
5
|
+
} from 'three';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* References:
|
|
9
|
+
* https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf
|
|
10
|
+
* https://arxiv.org/pdf/2206.01856.pdf
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const PoissonDenoiseShader = {
|
|
14
|
+
|
|
15
|
+
name: 'PoissonDenoiseShader',
|
|
16
|
+
|
|
17
|
+
defines: {
|
|
18
|
+
'SAMPLES': 16,
|
|
19
|
+
'SAMPLE_VECTORS': generatePdSamplePointInitializer( 16, 2, 1 ),
|
|
20
|
+
'NORMAL_VECTOR_TYPE': 1,
|
|
21
|
+
'DEPTH_VALUE_SOURCE': 0,
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
uniforms: {
|
|
25
|
+
'tDiffuse': { value: null },
|
|
26
|
+
'tNormal': { value: null },
|
|
27
|
+
'tDepth': { value: null },
|
|
28
|
+
'tNoise': { value: null },
|
|
29
|
+
'resolution': { value: new Vector2() },
|
|
30
|
+
'cameraProjectionMatrixInverse': { value: new Matrix4() },
|
|
31
|
+
'lumaPhi': { value: 5. },
|
|
32
|
+
'depthPhi': { value: 5. },
|
|
33
|
+
'normalPhi': { value: 5. },
|
|
34
|
+
'radius': { value: 4. },
|
|
35
|
+
'index': { value: 0 }
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
vertexShader: /* glsl */`
|
|
39
|
+
|
|
40
|
+
varying vec2 vUv;
|
|
41
|
+
|
|
42
|
+
void main() {
|
|
43
|
+
vUv = uv;
|
|
44
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
45
|
+
}`,
|
|
46
|
+
|
|
47
|
+
fragmentShader: /* glsl */`
|
|
48
|
+
|
|
49
|
+
varying vec2 vUv;
|
|
50
|
+
|
|
51
|
+
uniform sampler2D tDiffuse;
|
|
52
|
+
uniform sampler2D tNormal;
|
|
53
|
+
uniform sampler2D tDepth;
|
|
54
|
+
uniform sampler2D tNoise;
|
|
55
|
+
uniform vec2 resolution;
|
|
56
|
+
uniform mat4 cameraProjectionMatrixInverse;
|
|
57
|
+
uniform float lumaPhi;
|
|
58
|
+
uniform float depthPhi;
|
|
59
|
+
uniform float normalPhi;
|
|
60
|
+
uniform float radius;
|
|
61
|
+
uniform int index;
|
|
62
|
+
|
|
63
|
+
#include <common>
|
|
64
|
+
#include <packing>
|
|
65
|
+
|
|
66
|
+
#ifndef SAMPLE_LUMINANCE
|
|
67
|
+
#define SAMPLE_LUMINANCE dot(vec3(0.2125, 0.7154, 0.0721), a)
|
|
68
|
+
#endif
|
|
69
|
+
|
|
70
|
+
#ifndef FRAGMENT_OUTPUT
|
|
71
|
+
#define FRAGMENT_OUTPUT vec4(denoised, 1.)
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
float getLuminance(const in vec3 a) {
|
|
75
|
+
return SAMPLE_LUMINANCE;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS;
|
|
79
|
+
|
|
80
|
+
vec3 getViewPosition(const in vec2 screenPosition, const in float depth) {
|
|
81
|
+
vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);
|
|
82
|
+
vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;
|
|
83
|
+
return viewSpacePosition.xyz / viewSpacePosition.w;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
float getDepth(const vec2 uv) {
|
|
87
|
+
#if DEPTH_VALUE_SOURCE == 1
|
|
88
|
+
return textureLod(tDepth, uv.xy, 0.0).a;
|
|
89
|
+
#else
|
|
90
|
+
return textureLod(tDepth, uv.xy, 0.0).r;
|
|
91
|
+
#endif
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
float fetchDepth(const ivec2 uv) {
|
|
95
|
+
#if DEPTH_VALUE_SOURCE == 1
|
|
96
|
+
return texelFetch(tDepth, uv.xy, 0).a;
|
|
97
|
+
#else
|
|
98
|
+
return texelFetch(tDepth, uv.xy, 0).r;
|
|
99
|
+
#endif
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
vec3 computeNormalFromDepth(const vec2 uv) {
|
|
103
|
+
vec2 size = vec2(textureSize(tDepth, 0));
|
|
104
|
+
ivec2 p = ivec2(uv * size);
|
|
105
|
+
float c0 = fetchDepth(p);
|
|
106
|
+
float l2 = fetchDepth(p - ivec2(2, 0));
|
|
107
|
+
float l1 = fetchDepth(p - ivec2(1, 0));
|
|
108
|
+
float r1 = fetchDepth(p + ivec2(1, 0));
|
|
109
|
+
float r2 = fetchDepth(p + ivec2(2, 0));
|
|
110
|
+
float b2 = fetchDepth(p - ivec2(0, 2));
|
|
111
|
+
float b1 = fetchDepth(p - ivec2(0, 1));
|
|
112
|
+
float t1 = fetchDepth(p + ivec2(0, 1));
|
|
113
|
+
float t2 = fetchDepth(p + ivec2(0, 2));
|
|
114
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
115
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
116
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
117
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
118
|
+
vec3 ce = getViewPosition(uv, c0).xyz;
|
|
119
|
+
vec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz
|
|
120
|
+
: -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;
|
|
121
|
+
vec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz
|
|
122
|
+
: -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;
|
|
123
|
+
return normalize(cross(dpdx, dpdy));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
vec3 getViewNormal(const vec2 uv) {
|
|
127
|
+
#if NORMAL_VECTOR_TYPE == 2
|
|
128
|
+
return normalize(textureLod(tNormal, uv, 0.).rgb);
|
|
129
|
+
#elif NORMAL_VECTOR_TYPE == 1
|
|
130
|
+
return unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);
|
|
131
|
+
#else
|
|
132
|
+
return computeNormalFromDepth(uv);
|
|
133
|
+
#endif
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
void denoiseSample(in vec3 center, in vec3 viewNormal, in vec3 viewPos, in vec2 sampleUv, inout vec3 denoised, inout float totalWeight) {
|
|
137
|
+
vec4 sampleTexel = textureLod(tDiffuse, sampleUv, 0.0);
|
|
138
|
+
float sampleDepth = getDepth(sampleUv);
|
|
139
|
+
vec3 sampleNormal = getViewNormal(sampleUv);
|
|
140
|
+
vec3 neighborColor = sampleTexel.rgb;
|
|
141
|
+
vec3 viewPosSample = getViewPosition(sampleUv, sampleDepth);
|
|
142
|
+
|
|
143
|
+
float normalDiff = dot(viewNormal, sampleNormal);
|
|
144
|
+
float normalSimilarity = pow(max(normalDiff, 0.), normalPhi);
|
|
145
|
+
float lumaDiff = abs(getLuminance(neighborColor) - getLuminance(center));
|
|
146
|
+
float lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);
|
|
147
|
+
float depthDiff = abs(dot(viewPos - viewPosSample, viewNormal));
|
|
148
|
+
float depthSimilarity = max(1. - depthDiff / depthPhi, 0.);
|
|
149
|
+
float w = lumaSimilarity * depthSimilarity * normalSimilarity;
|
|
150
|
+
|
|
151
|
+
denoised += w * neighborColor;
|
|
152
|
+
totalWeight += w;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
void main() {
|
|
156
|
+
float depth = getDepth(vUv.xy);
|
|
157
|
+
vec3 viewNormal = getViewNormal(vUv);
|
|
158
|
+
if (depth == 1. || dot(viewNormal, viewNormal) == 0.) {
|
|
159
|
+
discard;
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
vec4 texel = textureLod(tDiffuse, vUv, 0.0);
|
|
163
|
+
vec3 center = texel.rgb;
|
|
164
|
+
vec3 viewPos = getViewPosition(vUv, depth);
|
|
165
|
+
|
|
166
|
+
vec2 noiseResolution = vec2(textureSize(tNoise, 0));
|
|
167
|
+
vec2 noiseUv = vUv * resolution / noiseResolution;
|
|
168
|
+
vec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);
|
|
169
|
+
vec2 noiseVec = vec2(sin(noiseTexel[index % 4] * 2. * PI), cos(noiseTexel[index % 4] * 2. * PI));
|
|
170
|
+
mat2 rotationMatrix = mat2(noiseVec.x, -noiseVec.y, noiseVec.x, noiseVec.y);
|
|
171
|
+
|
|
172
|
+
float totalWeight = 1.0;
|
|
173
|
+
vec3 denoised = texel.rgb;
|
|
174
|
+
for (int i = 0; i < SAMPLES; i++) {
|
|
175
|
+
vec3 sampleDir = poissonDisk[i];
|
|
176
|
+
vec2 offset = rotationMatrix * (sampleDir.xy * (1. + sampleDir.z * (radius - 1.)) / resolution);
|
|
177
|
+
vec2 sampleUv = vUv + offset;
|
|
178
|
+
denoiseSample(center, viewNormal, viewPos, sampleUv, denoised, totalWeight);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (totalWeight > 0.) {
|
|
182
|
+
denoised /= totalWeight;
|
|
183
|
+
}
|
|
184
|
+
gl_FragColor = FRAGMENT_OUTPUT;
|
|
185
|
+
}`
|
|
186
|
+
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
function generatePdSamplePointInitializer( samples, rings, radiusExponent ) {
|
|
190
|
+
|
|
191
|
+
const poissonDisk = generateDenoiseSamples(
|
|
192
|
+
samples,
|
|
193
|
+
rings,
|
|
194
|
+
radiusExponent,
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
let glslCode = 'vec3[SAMPLES](';
|
|
198
|
+
|
|
199
|
+
for ( let i = 0; i < samples; i ++ ) {
|
|
200
|
+
|
|
201
|
+
const sample = poissonDisk[ i ];
|
|
202
|
+
glslCode += `vec3(${sample.x}, ${sample.y}, ${sample.z})${( i < samples - 1 ) ? ',' : ')'}`;
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return glslCode;
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function generateDenoiseSamples( numSamples, numRings, radiusExponent ) {
|
|
211
|
+
|
|
212
|
+
const samples = [];
|
|
213
|
+
|
|
214
|
+
for ( let i = 0; i < numSamples; i ++ ) {
|
|
215
|
+
|
|
216
|
+
const angle = 2 * Math.PI * numRings * i / numSamples;
|
|
217
|
+
const radius = Math.pow( i / ( numSamples - 1 ), radiusExponent );
|
|
218
|
+
samples.push( new Vector3( Math.cos( angle ), Math.sin( angle ), radius ) );
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return samples;
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export { generatePdSamplePointInitializer, PoissonDenoiseShader };
|
|
@@ -8,12 +8,16 @@ import {
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
const SAOShader = {
|
|
11
|
+
|
|
12
|
+
name: 'SAOShader',
|
|
13
|
+
|
|
11
14
|
defines: {
|
|
12
15
|
'NUM_SAMPLES': 7,
|
|
13
16
|
'NUM_RINGS': 4,
|
|
14
17
|
'DIFFUSE_TEXTURE': 0,
|
|
15
18
|
'PERSPECTIVE_CAMERA': 1
|
|
16
19
|
},
|
|
20
|
+
|
|
17
21
|
uniforms: {
|
|
18
22
|
|
|
19
23
|
'tDepth': { value: null },
|
|
@@ -34,6 +38,7 @@ const SAOShader = {
|
|
|
34
38
|
'kernelRadius': { value: 100.0 },
|
|
35
39
|
'randomSeed': { value: 0.0 }
|
|
36
40
|
},
|
|
41
|
+
|
|
37
42
|
vertexShader: /* glsl */`
|
|
38
43
|
|
|
39
44
|
varying vec2 vUv;
|
|
@@ -44,7 +49,6 @@ const SAOShader = {
|
|
|
44
49
|
}`,
|
|
45
50
|
|
|
46
51
|
fragmentShader: /* glsl */`
|
|
47
|
-
|
|
48
52
|
#include <common>
|
|
49
53
|
|
|
50
54
|
varying vec2 vUv;
|
|
@@ -53,8 +57,8 @@ const SAOShader = {
|
|
|
53
57
|
uniform sampler2D tDiffuse;
|
|
54
58
|
#endif
|
|
55
59
|
|
|
56
|
-
uniform sampler2D tDepth;
|
|
57
|
-
uniform sampler2D tNormal;
|
|
60
|
+
uniform highp sampler2D tDepth;
|
|
61
|
+
uniform highp sampler2D tNormal;
|
|
58
62
|
|
|
59
63
|
uniform float cameraNear;
|
|
60
64
|
uniform float cameraFar;
|
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
|
|
11
11
|
const SMAAEdgesShader = {
|
|
12
12
|
|
|
13
|
+
name: 'SMAAEdgesShader',
|
|
14
|
+
|
|
13
15
|
defines: {
|
|
14
16
|
|
|
15
17
|
'SMAA_THRESHOLD': '0.1'
|
|
@@ -115,6 +117,8 @@ const SMAAEdgesShader = {
|
|
|
115
117
|
|
|
116
118
|
const SMAAWeightsShader = {
|
|
117
119
|
|
|
120
|
+
name: 'SMAAWeightsShader',
|
|
121
|
+
|
|
118
122
|
defines: {
|
|
119
123
|
|
|
120
124
|
'SMAA_MAX_SEARCH_STEPS': '8',
|
|
@@ -369,6 +373,8 @@ const SMAAWeightsShader = {
|
|
|
369
373
|
|
|
370
374
|
const SMAABlendShader = {
|
|
371
375
|
|
|
376
|
+
name: 'SMAABlendShader',
|
|
377
|
+
|
|
372
378
|
uniforms: {
|
|
373
379
|
|
|
374
380
|
'tDiffuse': { value: null },
|
|
@@ -12,6 +12,8 @@ import {
|
|
|
12
12
|
|
|
13
13
|
const SSAOShader = {
|
|
14
14
|
|
|
15
|
+
name: 'SSAOShader',
|
|
16
|
+
|
|
15
17
|
defines: {
|
|
16
18
|
'PERSPECTIVE_CAMERA': 1,
|
|
17
19
|
'KERNEL_SIZE': 32
|
|
@@ -47,9 +49,8 @@ const SSAOShader = {
|
|
|
47
49
|
}`,
|
|
48
50
|
|
|
49
51
|
fragmentShader: /* glsl */`
|
|
50
|
-
|
|
51
|
-
uniform sampler2D
|
|
52
|
-
uniform sampler2D tDepth;
|
|
52
|
+
uniform highp sampler2D tNormal;
|
|
53
|
+
uniform highp sampler2D tDepth;
|
|
53
54
|
uniform sampler2D tNoise;
|
|
54
55
|
|
|
55
56
|
uniform vec3 kernel[ KERNEL_SIZE ];
|
|
@@ -183,6 +184,8 @@ const SSAOShader = {
|
|
|
183
184
|
|
|
184
185
|
const SSAODepthShader = {
|
|
185
186
|
|
|
187
|
+
name: 'SSAODepthShader',
|
|
188
|
+
|
|
186
189
|
defines: {
|
|
187
190
|
'PERSPECTIVE_CAMERA': 1
|
|
188
191
|
},
|
|
@@ -244,6 +247,8 @@ const SSAODepthShader = {
|
|
|
244
247
|
|
|
245
248
|
const SSAOBlurShader = {
|
|
246
249
|
|
|
250
|
+
name: 'SSAOBlurShader',
|
|
251
|
+
|
|
247
252
|
uniforms: {
|
|
248
253
|
|
|
249
254
|
'tDiffuse': { value: null },
|
|
@@ -9,6 +9,8 @@ import {
|
|
|
9
9
|
|
|
10
10
|
const SSRShader = {
|
|
11
11
|
|
|
12
|
+
name: 'SSRShader',
|
|
13
|
+
|
|
12
14
|
defines: {
|
|
13
15
|
MAX_STEP: 0,
|
|
14
16
|
PERSPECTIVE_CAMERA: true,
|
|
@@ -233,6 +235,8 @@ const SSRShader = {
|
|
|
233
235
|
|
|
234
236
|
const SSRDepthShader = {
|
|
235
237
|
|
|
238
|
+
name: 'SSRDepthShader',
|
|
239
|
+
|
|
236
240
|
defines: {
|
|
237
241
|
'PERSPECTIVE_CAMERA': 1
|
|
238
242
|
},
|
|
@@ -300,6 +304,8 @@ const SSRDepthShader = {
|
|
|
300
304
|
|
|
301
305
|
const SSRBlurShader = {
|
|
302
306
|
|
|
307
|
+
name: 'SSRBlurShader',
|
|
308
|
+
|
|
303
309
|
uniforms: {
|
|
304
310
|
|
|
305
311
|
'tDiffuse': { value: null },
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
export class Program {
|
|
2
|
+
|
|
3
|
+
constructor() {
|
|
4
|
+
|
|
5
|
+
this.body = [];
|
|
6
|
+
|
|
7
|
+
this.isProgram = true;
|
|
8
|
+
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class VariableDeclaration {
|
|
14
|
+
|
|
15
|
+
constructor( type, name, value = null, next = null, immutable = false ) {
|
|
16
|
+
|
|
17
|
+
this.type = type;
|
|
18
|
+
this.name = name;
|
|
19
|
+
this.value = value;
|
|
20
|
+
this.next = next;
|
|
21
|
+
|
|
22
|
+
this.immutable = immutable;
|
|
23
|
+
|
|
24
|
+
this.isVariableDeclaration = true;
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class Uniform {
|
|
31
|
+
|
|
32
|
+
constructor( type, name ) {
|
|
33
|
+
|
|
34
|
+
this.type = type;
|
|
35
|
+
this.name = name;
|
|
36
|
+
|
|
37
|
+
this.isUniform = true;
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class Varying {
|
|
44
|
+
|
|
45
|
+
constructor( type, name ) {
|
|
46
|
+
|
|
47
|
+
this.type = type;
|
|
48
|
+
this.name = name;
|
|
49
|
+
|
|
50
|
+
this.isVarying = true;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export class FunctionParameter {
|
|
57
|
+
|
|
58
|
+
constructor( type, name, qualifier = null, immutable = true ) {
|
|
59
|
+
|
|
60
|
+
this.type = type;
|
|
61
|
+
this.name = name;
|
|
62
|
+
this.qualifier = qualifier;
|
|
63
|
+
this.immutable = immutable;
|
|
64
|
+
|
|
65
|
+
this.isFunctionParameter = true;
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export class FunctionDeclaration {
|
|
72
|
+
|
|
73
|
+
constructor( type, name, params = [] ) {
|
|
74
|
+
|
|
75
|
+
this.type = type;
|
|
76
|
+
this.name = name;
|
|
77
|
+
this.params = params;
|
|
78
|
+
this.body = [];
|
|
79
|
+
|
|
80
|
+
this.isFunctionDeclaration = true;
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export class Expression {
|
|
87
|
+
|
|
88
|
+
constructor( expression ) {
|
|
89
|
+
|
|
90
|
+
this.expression = expression;
|
|
91
|
+
|
|
92
|
+
this.isExpression = true;
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export class Ternary {
|
|
99
|
+
|
|
100
|
+
constructor( cond, left, right ) {
|
|
101
|
+
|
|
102
|
+
this.cond = cond;
|
|
103
|
+
this.left = left;
|
|
104
|
+
this.right = right;
|
|
105
|
+
|
|
106
|
+
this.isTernary = true;
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export class Operator {
|
|
113
|
+
|
|
114
|
+
constructor( type, left, right ) {
|
|
115
|
+
|
|
116
|
+
this.type = type;
|
|
117
|
+
this.left = left;
|
|
118
|
+
this.right = right;
|
|
119
|
+
|
|
120
|
+
this.isOperator = true;
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
export class Unary {
|
|
128
|
+
|
|
129
|
+
constructor( type, expression, after = false ) {
|
|
130
|
+
|
|
131
|
+
this.type = type;
|
|
132
|
+
this.expression = expression;
|
|
133
|
+
this.after = after;
|
|
134
|
+
|
|
135
|
+
this.isUnary = true;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export class Number {
|
|
142
|
+
|
|
143
|
+
constructor( value, type = 'float' ) {
|
|
144
|
+
|
|
145
|
+
this.type = type;
|
|
146
|
+
this.value = value;
|
|
147
|
+
|
|
148
|
+
this.isNumber = true;
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export class String {
|
|
155
|
+
|
|
156
|
+
constructor( value ) {
|
|
157
|
+
|
|
158
|
+
this.value = value;
|
|
159
|
+
|
|
160
|
+
this.isString = true;
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
export class Conditional {
|
|
168
|
+
|
|
169
|
+
constructor( cond = null ) {
|
|
170
|
+
|
|
171
|
+
this.cond = cond;
|
|
172
|
+
|
|
173
|
+
this.body = [];
|
|
174
|
+
this.elseConditional = null;
|
|
175
|
+
|
|
176
|
+
this.isConditional = true;
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export class FunctionCall {
|
|
183
|
+
|
|
184
|
+
constructor( name, params = [] ) {
|
|
185
|
+
|
|
186
|
+
this.name = name;
|
|
187
|
+
this.params = params;
|
|
188
|
+
|
|
189
|
+
this.isFunctionCall = true;
|
|
190
|
+
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export class Return {
|
|
196
|
+
|
|
197
|
+
constructor( value ) {
|
|
198
|
+
|
|
199
|
+
this.value = value;
|
|
200
|
+
|
|
201
|
+
this.isReturn = true;
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export class Accessor {
|
|
208
|
+
|
|
209
|
+
constructor( property ) {
|
|
210
|
+
|
|
211
|
+
this.property = property;
|
|
212
|
+
|
|
213
|
+
this.isAccessor = true;
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export class StaticElement {
|
|
220
|
+
|
|
221
|
+
constructor( value ) {
|
|
222
|
+
|
|
223
|
+
this.value = value;
|
|
224
|
+
|
|
225
|
+
this.isStaticElement = true;
|
|
226
|
+
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export class DynamicElement {
|
|
232
|
+
|
|
233
|
+
constructor( value ) {
|
|
234
|
+
|
|
235
|
+
this.value = value;
|
|
236
|
+
|
|
237
|
+
this.isDynamicElement = true;
|
|
238
|
+
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export class AccessorElements {
|
|
244
|
+
|
|
245
|
+
constructor( property, elements = [] ) {
|
|
246
|
+
|
|
247
|
+
this.property = property;
|
|
248
|
+
this.elements = elements;
|
|
249
|
+
|
|
250
|
+
this.isAccessorElements = true;
|
|
251
|
+
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export class For {
|
|
257
|
+
|
|
258
|
+
constructor( initialization, condition, afterthought ) {
|
|
259
|
+
|
|
260
|
+
this.initialization = initialization;
|
|
261
|
+
this.condition = condition;
|
|
262
|
+
this.afterthought = afterthought;
|
|
263
|
+
|
|
264
|
+
this.body = [];
|
|
265
|
+
|
|
266
|
+
this.isFor = true;
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
}
|