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.
Files changed (303) hide show
  1. package/README.md +6 -4
  2. package/build/three.cjs +3100 -1537
  3. package/build/three.js +3100 -1537
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +3093 -1538
  6. package/build/three.module.min.js +1 -1
  7. package/examples/jsm/Addons.js +291 -0
  8. package/examples/jsm/controls/FlyControls.js +26 -0
  9. package/examples/jsm/controls/OrbitControls.js +62 -41
  10. package/examples/jsm/controls/TransformControls.js +27 -11
  11. package/examples/jsm/csm/CSMShader.js +53 -48
  12. package/examples/jsm/exporters/GLTFExporter.js +151 -3
  13. package/examples/jsm/exporters/USDZExporter.js +27 -19
  14. package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
  15. package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
  16. package/examples/jsm/helpers/TextureHelper.js +237 -0
  17. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  18. package/examples/jsm/libs/lottie_canvas.module.js +6 -1
  19. package/examples/jsm/libs/opentype.module.js +13 -75
  20. package/examples/jsm/libs/surfaceNet.js +201 -0
  21. package/examples/jsm/lines/LineMaterial.js +16 -33
  22. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  23. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  24. package/examples/jsm/loaders/FBXLoader.js +294 -124
  25. package/examples/jsm/loaders/GLTFLoader.js +83 -6
  26. package/examples/jsm/loaders/LUTImageLoader.js +162 -0
  27. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  28. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  29. package/examples/jsm/loaders/SVGLoader.js +4 -4
  30. package/examples/jsm/loaders/USDZLoader.js +3 -17
  31. package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
  32. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  33. package/examples/jsm/math/Capsule.js +0 -55
  34. package/examples/jsm/math/Octree.js +85 -7
  35. package/examples/jsm/misc/Timer.js +119 -0
  36. package/examples/jsm/misc/TubePainter.js +3 -6
  37. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  38. package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
  39. package/examples/jsm/modifiers/TessellateModifier.js +3 -3
  40. package/examples/jsm/nodes/Nodes.js +16 -12
  41. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  42. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  43. package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
  44. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
  45. package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
  46. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  47. package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
  48. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  49. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  50. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  51. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  52. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
  54. package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
  55. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  56. package/examples/jsm/nodes/code/FunctionNode.js +1 -1
  57. package/examples/jsm/nodes/core/AssignNode.js +72 -0
  58. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  59. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  60. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  61. package/examples/jsm/nodes/core/LightingModel.js +3 -1
  62. package/examples/jsm/nodes/core/Node.js +13 -15
  63. package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
  64. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  65. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  66. package/examples/jsm/nodes/core/NodeUtils.js +7 -9
  67. package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
  68. package/examples/jsm/nodes/core/ParameterNode.js +33 -0
  69. package/examples/jsm/nodes/core/PropertyNode.js +15 -6
  70. package/examples/jsm/nodes/core/StackNode.js +7 -17
  71. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  72. package/examples/jsm/nodes/core/TempNode.js +1 -1
  73. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  74. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  75. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  76. package/examples/jsm/nodes/core/VarNode.js +7 -34
  77. package/examples/jsm/nodes/core/VaryingNode.js +3 -7
  78. package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
  79. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  80. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  81. package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
  82. package/examples/jsm/nodes/display/PassNode.js +182 -0
  83. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  84. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  85. package/examples/jsm/nodes/display/ViewportNode.js +17 -10
  86. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
  87. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
  88. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
  89. package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
  90. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
  91. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
  92. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
  93. package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
  94. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
  95. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
  96. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
  97. package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
  98. package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
  99. package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
  100. package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
  101. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
  102. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
  103. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
  104. package/examples/jsm/nodes/materials/Materials.js +1 -0
  105. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  106. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
  107. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  108. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
  109. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
  110. package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
  111. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  112. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  113. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  114. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  115. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  116. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  117. package/examples/jsm/nodes/math/MathNode.js +2 -0
  118. package/examples/jsm/nodes/math/OperatorNode.js +24 -27
  119. package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
  120. package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
  121. package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
  122. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  123. package/examples/jsm/nodes/utils/JoinNode.js +11 -1
  124. package/examples/jsm/nodes/utils/LoopNode.js +36 -24
  125. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  126. package/examples/jsm/nodes/utils/SplitNode.js +10 -2
  127. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  128. package/examples/jsm/objects/InstancedPoints.js +21 -0
  129. package/examples/jsm/objects/Lensflare.js +20 -0
  130. package/examples/jsm/objects/QuadMesh.js +60 -0
  131. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
  132. package/examples/jsm/objects/Refractor.js +3 -0
  133. package/examples/jsm/objects/Sky.js +5 -3
  134. package/examples/jsm/objects/Water.js +5 -2
  135. package/examples/jsm/objects/Water2.js +3 -0
  136. package/examples/jsm/physics/AmmoPhysics.js +21 -0
  137. package/examples/jsm/physics/RapierPhysics.js +21 -0
  138. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  139. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  140. package/examples/jsm/postprocessing/LUTPass.js +2 -1
  141. package/examples/jsm/postprocessing/OutputPass.js +3 -0
  142. package/examples/jsm/postprocessing/Pass.js +14 -3
  143. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  144. package/examples/jsm/postprocessing/SMAAPass.js +0 -2
  145. package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
  146. package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
  147. package/examples/jsm/renderers/SVGRenderer.js +9 -6
  148. package/examples/jsm/renderers/common/Animation.js +10 -21
  149. package/examples/jsm/renderers/common/Backend.js +19 -3
  150. package/examples/jsm/renderers/common/Background.js +20 -22
  151. package/examples/jsm/renderers/common/Bindings.js +31 -22
  152. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  153. package/examples/jsm/renderers/common/Color4.js +37 -0
  154. package/examples/jsm/renderers/common/Geometries.js +4 -4
  155. package/examples/jsm/renderers/common/Info.js +12 -2
  156. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  157. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  158. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  159. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  160. package/examples/jsm/renderers/common/RenderObject.js +21 -2
  161. package/examples/jsm/renderers/common/RenderObjects.js +5 -3
  162. package/examples/jsm/renderers/common/Renderer.js +137 -37
  163. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  164. package/examples/jsm/renderers/common/Textures.js +8 -37
  165. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  166. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  167. package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
  168. package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
  169. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
  170. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
  171. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  172. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  173. package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
  174. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  175. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  176. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  177. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  178. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  179. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
  180. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  181. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
  182. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  183. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  184. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  185. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  186. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
  187. package/examples/jsm/shaders/AfterimageShader.js +2 -0
  188. package/examples/jsm/shaders/BasicShader.js +2 -0
  189. package/examples/jsm/shaders/BlendShader.js +2 -0
  190. package/examples/jsm/shaders/BokehShader.js +2 -0
  191. package/examples/jsm/shaders/BokehShader2.js +4 -0
  192. package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
  193. package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
  194. package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
  195. package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
  196. package/examples/jsm/shaders/FXAAShader.js +135 -133
  197. package/examples/jsm/shaders/FilmShader.js +1 -1
  198. package/examples/jsm/shaders/FocusShader.js +2 -0
  199. package/examples/jsm/shaders/FreiChenShader.js +2 -0
  200. package/examples/jsm/shaders/GTAOShader.js +424 -0
  201. package/examples/jsm/shaders/GodRaysShader.js +8 -0
  202. package/examples/jsm/shaders/HalftoneShader.js +2 -0
  203. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
  204. package/examples/jsm/shaders/HueSaturationShader.js +2 -0
  205. package/examples/jsm/shaders/KaleidoShader.js +2 -0
  206. package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
  207. package/examples/jsm/shaders/LuminosityShader.js +2 -0
  208. package/examples/jsm/shaders/MMDToonShader.js +2 -0
  209. package/examples/jsm/shaders/MirrorShader.js +2 -0
  210. package/examples/jsm/shaders/NormalMapShader.js +2 -0
  211. package/examples/jsm/shaders/OutputShader.js +8 -5
  212. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  213. package/examples/jsm/shaders/SAOShader.js +7 -3
  214. package/examples/jsm/shaders/SMAAShader.js +6 -0
  215. package/examples/jsm/shaders/SSAOShader.js +8 -3
  216. package/examples/jsm/shaders/SSRShader.js +6 -0
  217. package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
  218. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
  219. package/examples/jsm/shaders/TechnicolorShader.js +2 -0
  220. package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
  221. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
  222. package/examples/jsm/shaders/VelocityShader.js +2 -0
  223. package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
  224. package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
  225. package/examples/jsm/transpiler/AST.js +270 -0
  226. package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
  227. package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
  228. package/examples/jsm/transpiler/TSLEncoder.js +715 -0
  229. package/examples/jsm/transpiler/Transpiler.js +18 -0
  230. package/examples/jsm/utils/SortUtils.js +158 -0
  231. package/examples/jsm/utils/TextureUtils.js +33 -21
  232. package/examples/jsm/webxr/ARButton.js +14 -0
  233. package/examples/jsm/webxr/VRButton.js +24 -9
  234. package/examples/jsm/webxr/XRButton.js +27 -11
  235. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  236. package/package.json +8 -6
  237. package/src/Three.js +1 -0
  238. package/src/constants.js +8 -1
  239. package/src/core/BufferAttribute.js +21 -2
  240. package/src/core/InterleavedBuffer.js +21 -1
  241. package/src/core/Object3D.js +60 -12
  242. package/src/core/UniformsGroup.js +7 -1
  243. package/src/extras/PMREMGenerator.js +7 -1
  244. package/src/extras/curves/LineCurve3.js +4 -0
  245. package/src/loaders/AudioLoader.js +1 -1
  246. package/src/loaders/BufferGeometryLoader.js +0 -7
  247. package/src/loaders/ImageBitmapLoader.js +25 -1
  248. package/src/loaders/MaterialLoader.js +10 -2
  249. package/src/loaders/ObjectLoader.js +49 -0
  250. package/src/materials/Material.js +27 -13
  251. package/src/materials/ShaderMaterial.js +2 -1
  252. package/src/math/Box3.js +35 -18
  253. package/src/math/ColorManagement.js +0 -16
  254. package/src/math/Quaternion.js +5 -4
  255. package/src/math/Sphere.js +2 -0
  256. package/src/math/Triangle.js +17 -5
  257. package/src/math/Vector3.js +11 -12
  258. package/src/objects/BatchedMesh.js +1020 -0
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +6 -7
  261. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  262. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  263. package/src/renderers/WebGLRenderer.js +165 -43
  264. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
  265. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  266. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  267. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
  268. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  269. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  270. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  271. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  272. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
  273. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  274. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  275. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  276. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  277. package/src/renderers/shaders/ShaderChunk.js +4 -0
  278. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  279. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  280. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  281. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  282. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  283. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
  286. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  287. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  288. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  289. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  290. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  291. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  292. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  293. package/src/renderers/webgl/WebGLLights.js +11 -2
  294. package/src/renderers/webgl/WebGLProgram.js +100 -51
  295. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  296. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  297. package/src/renderers/webgl/WebGLState.js +25 -4
  298. package/src/renderers/webgl/WebGLTextures.js +7 -11
  299. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  300. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  301. package/src/renderers/webxr/WebXRManager.js +16 -0
  302. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
  303. package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
@@ -32,9 +32,12 @@ class LoopNode extends Node {
32
32
 
33
33
  for ( let i = 0, l = this.params.length - 1; i < l; i ++ ) {
34
34
 
35
- const prop = this.getVarName( i );
35
+ const param = this.params[ i ];
36
36
 
37
- inputs[ prop ] = expression( prop, 'int' );
37
+ const name = ( param.isNode !== true && param.name ) || this.getVarName( i );
38
+ const type = ( param.isNode !== true && param.type ) || 'int';
39
+
40
+ inputs[ name ] = expression( name, type );
38
41
 
39
42
  }
40
43
 
@@ -73,50 +76,54 @@ class LoopNode extends Node {
73
76
  for ( let i = 0, l = params.length - 1; i < l; i ++ ) {
74
77
 
75
78
  const param = params[ i ];
76
- const property = this.getVarName( i );
77
79
 
78
- let start = null, end = null, direction = null;
80
+ let start = null, end = null, name = null, type = null, condition = null, update = null;
79
81
 
80
82
  if ( param.isNode ) {
81
83
 
84
+ type = 'int';
85
+ name = this.getVarName( i );
82
86
  start = '0';
83
- end = param.build( builder, 'int' );
84
- direction = 'forward';
87
+ end = param.build( builder, type );
88
+ condition = '<';
85
89
 
86
90
  } else {
87
91
 
92
+ type = param.type || 'int';
93
+ name = param.name || this.getVarName( i );
88
94
  start = param.start;
89
95
  end = param.end;
90
- direction = param.direction;
96
+ condition = param.condition;
97
+ update = param.update;
91
98
 
92
99
  if ( typeof start === 'number' ) start = start.toString();
93
- else if ( start && start.isNode ) start = start.build( builder, 'int' );
100
+ else if ( start && start.isNode ) start = start.build( builder, type );
94
101
 
95
102
  if ( typeof end === 'number' ) end = end.toString();
96
- else if ( end && end.isNode ) end = end.build( builder, 'int' );
103
+ else if ( end && end.isNode ) end = end.build( builder, type );
97
104
 
98
105
  if ( start !== undefined && end === undefined ) {
99
106
 
100
107
  start = start + ' - 1';
101
108
  end = '0';
102
- direction = 'backwards';
109
+ condition = '>=';
103
110
 
104
111
  } else if ( end !== undefined && start === undefined ) {
105
112
 
106
113
  start = '0';
107
- direction = 'forward';
114
+ condition = '<';
108
115
 
109
116
  }
110
117
 
111
- if ( direction === undefined ) {
118
+ if ( condition === undefined ) {
112
119
 
113
120
  if ( Number( start ) > Number( end ) ) {
114
121
 
115
- direction = 'backwards';
122
+ condition = '>=';
116
123
 
117
124
  } else {
118
125
 
119
- direction = 'forward';
126
+ condition = '<';
120
127
 
121
128
  }
122
129
 
@@ -124,7 +131,7 @@ class LoopNode extends Node {
124
131
 
125
132
  }
126
133
 
127
- const internalParam = { start, end, direction };
134
+ const internalParam = { start, end, condition };
128
135
 
129
136
  //
130
137
 
@@ -135,22 +142,27 @@ class LoopNode extends Node {
135
142
  let conditionalSnippet = '';
136
143
  let updateSnippet = '';
137
144
 
138
- declarationSnippet += builder.getVar( 'int', property ) + ' = ' + startSnippet;
145
+ if ( ! update ) {
139
146
 
140
- if ( internalParam.direction === 'backwards' ) {
147
+ if ( type === 'int' ) {
141
148
 
142
- conditionalSnippet += property + ' >= ' + endSnippet;
143
- updateSnippet += property + ' --';
149
+ if ( condition.includes( '<' ) ) update = '++';
150
+ else update = '--';
144
151
 
145
- } else {
152
+ } else {
146
153
 
147
- // forward
154
+ if ( condition.includes( '<' ) ) update = '+= 1';
155
+ else update = '-= 1';
148
156
 
149
- conditionalSnippet += property + ' < ' + endSnippet;
150
- updateSnippet += property + ' ++';
157
+ }
151
158
 
152
159
  }
153
160
 
161
+ declarationSnippet += builder.getVar( type, name ) + ' = ' + startSnippet;
162
+
163
+ conditionalSnippet += name + ' ' + condition + ' ' + endSnippet;
164
+ updateSnippet += name + ' ' + update;
165
+
154
166
  const forSnippet = `for ( ${ declarationSnippet }; ${ conditionalSnippet }; ${ updateSnippet } )`;
155
167
 
156
168
  builder.addFlowCode( ( i === 0 ? '\n' : '' ) + builder.tab + forSnippet + ' {\n\n' ).addFlowTab();
@@ -179,7 +191,7 @@ class LoopNode extends Node {
179
191
 
180
192
  export default LoopNode;
181
193
 
182
- export const loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) );
194
+ export const loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).append();
183
195
 
184
196
  addNodeElement( 'loop', ( returns, ...params ) => bypass( returns, loop( ...params ) ) );
185
197
 
@@ -1,9 +1,9 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
2
+ import { float, addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
3
3
 
4
4
  class RemapNode extends Node {
5
5
 
6
- constructor( node, inLowNode, inHighNode, outLowNode, outHighNode ) {
6
+ constructor( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
7
7
 
8
8
  super();
9
9
 
@@ -12,6 +12,8 @@ class SplitNode extends Node {
12
12
  this.node = node;
13
13
  this.components = components;
14
14
 
15
+ this.isSplitNode = true;
16
+
15
17
  }
16
18
 
17
19
  getVectorLength() {
@@ -28,9 +30,15 @@ class SplitNode extends Node {
28
30
 
29
31
  }
30
32
 
33
+ getPrimitiveType( builder ) {
34
+
35
+ return builder.getPrimitiveType( this.node.getNodeType( builder ) );
36
+
37
+ }
38
+
31
39
  getNodeType( builder ) {
32
40
 
33
- return builder.getTypeFromLength( this.components.length );
41
+ return builder.getTypeFromLength( this.components.length, this.getPrimitiveType( builder ) );
34
42
 
35
43
  }
36
44
 
@@ -51,7 +59,7 @@ class SplitNode extends Node {
51
59
 
52
60
  // needed expand the input node
53
61
 
54
- type = builder.getTypeFromLength( this.getVectorLength() );
62
+ type = builder.getTypeFromLength( this.getVectorLength(), this.getPrimitiveType( builder ) );
55
63
 
56
64
  }
57
65
 
@@ -1,13 +1,13 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { add } from '../math/OperatorNode.js';
3
- import { normalWorld } from '../accessors/NormalNode.js';
4
- import { positionWorld } from '../accessors/PositionNode.js';
3
+ import { normalLocal } from '../accessors/NormalNode.js';
4
+ import { positionLocal } from '../accessors/PositionNode.js';
5
5
  import { texture } from '../accessors/TextureNode.js';
6
6
  import { addNodeElement, nodeProxy, float, vec3 } from '../shadernode/ShaderNode.js';
7
7
 
8
8
  class TriplanarTexturesNode extends Node {
9
9
 
10
- constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionWorld, normalNode = normalWorld ) {
10
+ constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ) {
11
11
 
12
12
  super( 'vec4' );
13
13
 
@@ -0,0 +1,21 @@
1
+ import {
2
+ Mesh
3
+ } from 'three';
4
+ import InstancedPointsGeometry from '../geometries/InstancedPointsGeometry.js';
5
+ import InstancedPointsNodeMaterial from '../nodes/materials/InstancedPointsNodeMaterial.js';
6
+
7
+ class InstancedPoints extends Mesh {
8
+
9
+ constructor( geometry = new InstancedPointsGeometry(), material = new InstancedPointsNodeMaterial() ) {
10
+
11
+ super( geometry, material );
12
+
13
+ this.isInstancedPoints = true;
14
+
15
+ this.type = 'InstancedPoints';
16
+
17
+ }
18
+
19
+ }
20
+
21
+ export default InstancedPoints;
@@ -9,6 +9,7 @@ import {
9
9
  Mesh,
10
10
  MeshBasicMaterial,
11
11
  RawShaderMaterial,
12
+ UnsignedByteType,
12
13
  Vector2,
13
14
  Vector3,
14
15
  Vector4
@@ -36,6 +37,8 @@ class Lensflare extends Mesh {
36
37
  const tempMap = new FramebufferTexture( 16, 16 );
37
38
  const occlusionMap = new FramebufferTexture( 16, 16 );
38
39
 
40
+ let currentType = UnsignedByteType;
41
+
39
42
  // material
40
43
 
41
44
  const geometry = Lensflare.Geometry;
@@ -129,6 +132,7 @@ class Lensflare extends Mesh {
129
132
  const shader = LensflareElement.Shader;
130
133
 
131
134
  const material2 = new RawShaderMaterial( {
135
+ name: shader.name,
132
136
  uniforms: {
133
137
  'map': { value: null },
134
138
  'occlusionMap': { value: occlusionMap },
@@ -162,6 +166,20 @@ class Lensflare extends Mesh {
162
166
 
163
167
  renderer.getCurrentViewport( viewport );
164
168
 
169
+ const renderTarget = renderer.getRenderTarget();
170
+ const type = ( renderTarget !== null ) ? renderTarget.texture.type : UnsignedByteType;
171
+
172
+ if ( currentType !== type ) {
173
+
174
+ tempMap.dispose();
175
+ occlusionMap.dispose();
176
+
177
+ tempMap.type = occlusionMap.type = type;
178
+
179
+ currentType = type;
180
+
181
+ }
182
+
165
183
  const invAspect = viewport.w / viewport.z;
166
184
  const halfViewportWidth = viewport.z / 2.0;
167
185
  const halfViewportHeight = viewport.w / 2.0;
@@ -283,6 +301,8 @@ class LensflareElement {
283
301
 
284
302
  LensflareElement.Shader = {
285
303
 
304
+ name: 'LensflareElementShader',
305
+
286
306
  uniforms: {
287
307
 
288
308
  'map': { value: null },
@@ -0,0 +1,60 @@
1
+ import { BufferGeometry, Float32BufferAttribute, Mesh, OrthographicCamera } from 'three';
2
+
3
+ // Helper for passes that need to fill the viewport with a single quad.
4
+
5
+ const _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
6
+
7
+ // https://github.com/mrdoob/three.js/pull/21358
8
+
9
+ class QuadGeometry extends BufferGeometry {
10
+
11
+ constructor( flipY = false ) {
12
+
13
+ super();
14
+
15
+ const uv = flipY === false ? [ 0, - 1, 0, 1, 2, 1 ] : [ 0, 2, 0, 0, 2, 0 ];
16
+
17
+ this.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
18
+ this.setAttribute( 'uv', new Float32BufferAttribute( uv, 2 ) );
19
+
20
+ }
21
+
22
+ }
23
+
24
+ const _geometry = new QuadGeometry();
25
+
26
+ class QuadMesh {
27
+
28
+ constructor( material = null ) {
29
+
30
+ this._mesh = new Mesh( _geometry, material );
31
+
32
+ }
33
+
34
+ dispose() {
35
+
36
+ this._mesh.geometry.dispose();
37
+
38
+ }
39
+
40
+ render( renderer ) {
41
+
42
+ renderer.render( this._mesh, _camera );
43
+
44
+ }
45
+
46
+ get material() {
47
+
48
+ return this._mesh.material;
49
+
50
+ }
51
+
52
+ set material( value ) {
53
+
54
+ this._mesh.material = value;
55
+
56
+ }
57
+
58
+ }
59
+
60
+ export default QuadMesh;
@@ -111,6 +111,7 @@ class ReflectorForSSRPass extends Mesh {
111
111
  const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, parameters );
112
112
 
113
113
  const material = new ShaderMaterial( {
114
+ name: ( shader.name !== undefined ) ? shader.name : 'unspecified',
114
115
  transparent: useDepthTexture,
115
116
  defines: Object.assign( {}, ReflectorForSSRPass.ReflectorShader.defines, {
116
117
  useDepthTexture
@@ -251,6 +252,8 @@ class ReflectorForSSRPass extends Mesh {
251
252
 
252
253
  ReflectorForSSRPass.ReflectorShader = {
253
254
 
255
+ name: 'ReflectorShader',
256
+
254
257
  defines: {
255
258
  DISTANCE_ATTENUATION: true,
256
259
  FRESNEL: true,
@@ -51,6 +51,7 @@ class Refractor extends Mesh {
51
51
  // material
52
52
 
53
53
  this.material = new ShaderMaterial( {
54
+ name: ( shader.name !== undefined ) ? shader.name : 'unspecified',
54
55
  uniforms: UniformsUtils.clone( shader.uniforms ),
55
56
  vertexShader: shader.vertexShader,
56
57
  fragmentShader: shader.fragmentShader,
@@ -261,6 +262,8 @@ class Refractor extends Mesh {
261
262
 
262
263
  Refractor.RefractorShader = {
263
264
 
265
+ name: 'RefractorShader',
266
+
264
267
  uniforms: {
265
268
 
266
269
  'color': {
@@ -28,10 +28,10 @@ class Sky extends Mesh {
28
28
  const shader = Sky.SkyShader;
29
29
 
30
30
  const material = new ShaderMaterial( {
31
- name: 'SkyShader',
32
- fragmentShader: shader.fragmentShader,
33
- vertexShader: shader.vertexShader,
31
+ name: shader.name,
34
32
  uniforms: UniformsUtils.clone( shader.uniforms ),
33
+ vertexShader: shader.vertexShader,
34
+ fragmentShader: shader.fragmentShader,
35
35
  side: BackSide,
36
36
  depthWrite: false
37
37
  } );
@@ -46,6 +46,8 @@ class Sky extends Mesh {
46
46
 
47
47
  Sky.SkyShader = {
48
48
 
49
+ name: 'SkyShader',
50
+
49
51
  uniforms: {
50
52
  'turbidity': { value: 2 },
51
53
  'rayleigh': { value: 1 },
@@ -67,6 +67,8 @@ class Water extends Mesh {
67
67
 
68
68
  const mirrorShader = {
69
69
 
70
+ name: 'MirrorShader',
71
+
70
72
  uniforms: UniformsUtils.merge( [
71
73
  UniformsLib[ 'fog' ],
72
74
  UniformsLib[ 'lights' ],
@@ -188,9 +190,10 @@ class Water extends Mesh {
188
190
  };
189
191
 
190
192
  const material = new ShaderMaterial( {
191
- fragmentShader: mirrorShader.fragmentShader,
192
- vertexShader: mirrorShader.vertexShader,
193
+ name: mirrorShader.name,
193
194
  uniforms: UniformsUtils.clone( mirrorShader.uniforms ),
195
+ vertexShader: mirrorShader.vertexShader,
196
+ fragmentShader: mirrorShader.fragmentShader,
194
197
  lights: true,
195
198
  side: side,
196
199
  fog: fog
@@ -88,6 +88,7 @@ class Water extends Mesh {
88
88
  // material
89
89
 
90
90
  this.material = new ShaderMaterial( {
91
+ name: shader.name,
91
92
  uniforms: UniformsUtils.merge( [
92
93
  UniformsLib[ 'fog' ],
93
94
  shader.uniforms
@@ -205,6 +206,8 @@ class Water extends Mesh {
205
206
 
206
207
  Water.WaterShader = {
207
208
 
209
+ name: 'WaterShader',
210
+
208
211
  uniforms: {
209
212
 
210
213
  'color': {
@@ -57,6 +57,26 @@ async function AmmoPhysics() {
57
57
  const meshes = [];
58
58
  const meshMap = new WeakMap();
59
59
 
60
+ function addScene( scene ) {
61
+
62
+ scene.traverse( function ( child ) {
63
+
64
+ if ( child.isMesh ) {
65
+
66
+ const physics = child.userData.physics;
67
+
68
+ if ( physics ) {
69
+
70
+ addMesh( child, physics.mass );
71
+
72
+ }
73
+
74
+ }
75
+
76
+ } );
77
+
78
+ }
79
+
60
80
  function addMesh( mesh, mass = 0 ) {
61
81
 
62
82
  const shape = getShape( mesh.geometry );
@@ -245,6 +265,7 @@ async function AmmoPhysics() {
245
265
  setInterval( step, 1000 / frameRate );
246
266
 
247
267
  return {
268
+ addScene: addScene,
248
269
  addMesh: addMesh,
249
270
  setMeshPosition: setMeshPosition
250
271
  // addCompoundMesh
@@ -55,6 +55,26 @@ async function RapierPhysics() {
55
55
  const _quaternion = new Quaternion();
56
56
  const _matrix = new Matrix4();
57
57
 
58
+ function addScene( scene ) {
59
+
60
+ scene.traverse( function ( child ) {
61
+
62
+ if ( child.isMesh ) {
63
+
64
+ const physics = child.userData.physics;
65
+
66
+ if ( physics ) {
67
+
68
+ addMesh( child, physics.mass, physics.restitution );
69
+
70
+ }
71
+
72
+ }
73
+
74
+ } );
75
+
76
+ }
77
+
58
78
  function addMesh( mesh, mass = 0, restitution = 0 ) {
59
79
 
60
80
  const shape = getCollider( mesh.geometry );
@@ -189,6 +209,7 @@ async function RapierPhysics() {
189
209
  setInterval( step, 1000 / frameRate );
190
210
 
191
211
  return {
212
+ addScene: addScene,
192
213
  addMesh: addMesh,
193
214
  setMeshPosition: setMeshPosition,
194
215
  setMeshVelocity: setMeshVelocity
@@ -26,7 +26,6 @@ class BokehPass extends Pass {
26
26
  this.camera = camera;
27
27
 
28
28
  const focus = ( params.focus !== undefined ) ? params.focus : 1.0;
29
- const aspect = ( params.aspect !== undefined ) ? params.aspect : camera.aspect;
30
29
  const aperture = ( params.aperture !== undefined ) ? params.aperture : 0.025;
31
30
  const maxblur = ( params.maxblur !== undefined ) ? params.maxblur : 1.0;
32
31
 
@@ -54,7 +53,7 @@ class BokehPass extends Pass {
54
53
  bokehUniforms[ 'tDepth' ].value = this.renderTargetDepth.texture;
55
54
 
56
55
  bokehUniforms[ 'focus' ].value = focus;
57
- bokehUniforms[ 'aspect' ].value = aspect;
56
+ bokehUniforms[ 'aspect' ].value = camera.aspect;
58
57
  bokehUniforms[ 'aperture' ].value = aperture;
59
58
  bokehUniforms[ 'maxblur' ].value = maxblur;
60
59
  bokehUniforms[ 'nearClip' ].value = camera.near;
@@ -120,6 +119,8 @@ class BokehPass extends Pass {
120
119
 
121
120
  setSize( width, height ) {
122
121
 
122
+ this.materialBokeh.uniforms[ 'aspect' ].value = width / height;
123
+
123
124
  this.renderTargetDepth.setSize( width, height );
124
125
 
125
126
  }