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
@@ -1,9 +1,6 @@
1
1
  import TextureNode from './TextureNode.js';
2
- import UniformNode from '../core/UniformNode.js';
3
2
  import { reflectVector } from './ReflectVectorNode.js';
4
3
  import { addNodeClass } from '../core/Node.js';
5
- import { colorSpaceToLinear } from '../display/ColorSpaceNode.js';
6
- import { expression } from '../code/ExpressionNode.js';
7
4
  import { addNodeElement, nodeProxy, vec3 } from '../shadernode/ShaderNode.js';
8
5
 
9
6
  class CubeTextureNode extends TextureNode {
@@ -30,80 +27,15 @@ class CubeTextureNode extends TextureNode {
30
27
 
31
28
  setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode
32
29
 
33
- generate( builder, output ) {
30
+ setupUV( builder, uvNode ) {
34
31
 
35
- const { uvNode, levelNode } = builder.getNodeProperties( this );
32
+ return vec3( uvNode.x.negate(), uvNode.yz );
36
33
 
37
- const texture = this.value;
38
-
39
- if ( ! texture || texture.isCubeTexture !== true ) {
40
-
41
- throw new Error( 'CubeTextureNode: Need a three.js cube texture.' );
42
-
43
- }
44
-
45
- const textureProperty = UniformNode.prototype.generate.call( this, builder, 'cubeTexture' );
46
-
47
- if ( output === 'sampler' ) {
48
-
49
- return textureProperty + '_sampler';
50
-
51
- } else if ( builder.isReference( output ) ) {
52
-
53
- return textureProperty;
54
-
55
- } else {
56
-
57
- const nodeType = this.getNodeType( builder );
58
- const nodeData = builder.getDataFromNode( this );
59
-
60
- let propertyName = nodeData.propertyName;
61
-
62
- if ( propertyName === undefined ) {
63
-
64
- const cubeUV = vec3( uvNode.x.negate(), uvNode.yz );
65
- const uvSnippet = cubeUV.build( builder, 'vec3' );
66
-
67
- const nodeVar = builder.getVarFromNode( this, 'vec4' );
68
-
69
- propertyName = builder.getPropertyName( nodeVar );
70
-
71
- let snippet = null;
72
-
73
- if ( levelNode && levelNode.isNode === true ) {
74
-
75
- const levelSnippet = levelNode.build( builder, 'float' );
76
-
77
- snippet = builder.getTextureLevel( this, textureProperty, uvSnippet, levelSnippet );
78
-
79
- } else {
80
-
81
- snippet = builder.getTexture( this, textureProperty, uvSnippet );
82
-
83
- }
84
-
85
- builder.addLineFlowCode( `${propertyName} = ${snippet}` );
86
-
87
- if ( builder.context.tempWrite !== false ) {
88
-
89
- nodeData.snippet = snippet;
90
- nodeData.propertyName = propertyName;
91
-
92
- }
93
-
94
- }
95
-
96
- let snippet = propertyName;
97
-
98
- if ( builder.needsColorSpaceToLinear( this.value ) ) {
99
-
100
- snippet = colorSpaceToLinear( expression( snippet, nodeType ), this.value.colorSpace ).setup( builder ).build( builder, nodeType );
101
-
102
- }
34
+ }
103
35
 
104
- return builder.format( snippet, 'vec4', output );
36
+ generateUV( builder, cubeUV ) {
105
37
 
106
- }
38
+ return cubeUV.build( builder, 'vec3' );
107
39
 
108
40
  }
109
41
 
@@ -17,7 +17,7 @@ class InstanceNode extends Node {
17
17
 
18
18
  }
19
19
 
20
- setup( builder ) {
20
+ setup( /*builder*/ ) {
21
21
 
22
22
  let instanceMatrixNode = this.instanceMatrixNode;
23
23
 
@@ -57,8 +57,8 @@ class InstanceNode extends Node {
57
57
 
58
58
  // ASSIGNS
59
59
 
60
- builder.stack.assign( positionLocal, instancePosition );
61
- builder.stack.assign( normalLocal, instanceNormal );
60
+ positionLocal.assign( instancePosition );
61
+ normalLocal.assign( instanceNormal );
62
62
 
63
63
  }
64
64
 
@@ -0,0 +1,21 @@
1
+ import MaterialNode from './MaterialNode.js';
2
+ import { addNodeClass } from '../core/Node.js';
3
+ import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
+
5
+ class InstancedPointsMaterialNode extends MaterialNode {
6
+
7
+ setup( /*builder*/ ) {
8
+
9
+ return this.getFloat( this.scope );
10
+
11
+ }
12
+
13
+ }
14
+
15
+ InstancedPointsMaterialNode.POINT_WIDTH = 'pointWidth';
16
+
17
+ export default InstancedPointsMaterialNode;
18
+
19
+ export const materialPointWidth = nodeImmutable( InstancedPointsMaterialNode, InstancedPointsMaterialNode.POINT_WIDTH );
20
+
21
+ addNodeClass( 'InstancedPointsMaterialNode', InstancedPointsMaterialNode );
@@ -1,6 +1,7 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { reference } from './ReferenceNode.js';
3
3
  import { materialReference } from './MaterialReferenceNode.js';
4
+ import { normalView } from './NormalNode.js';
4
5
  import { nodeImmutable, float } from '../shadernode/ShaderNode.js';
5
6
 
6
7
  const _propertyCache = new Map();
@@ -45,7 +46,7 @@ class MaterialNode extends Node {
45
46
 
46
47
  getTexture( property ) {
47
48
 
48
- return this.getCache( property, 'texture' );
49
+ return this.getCache( property === 'map' ? 'map' : property + 'Map', 'texture' );
49
50
 
50
51
  }
51
52
 
@@ -56,17 +57,9 @@ class MaterialNode extends Node {
56
57
 
57
58
  let node = null;
58
59
 
59
- if ( scope === MaterialNode.ALPHA_TEST || scope === MaterialNode.SHININESS || scope === MaterialNode.REFLECTIVITY || scope === MaterialNode.ROTATION || scope === MaterialNode.IRIDESCENCE || scope === MaterialNode.IRIDESCENCE_IOR ) {
60
+ if ( scope === MaterialNode.COLOR ) {
60
61
 
61
- node = this.getFloat( scope );
62
-
63
- } else if ( scope === MaterialNode.SPECULAR_COLOR ) {
64
-
65
- node = this.getColor( 'specular' );
66
-
67
- } else if ( scope === MaterialNode.COLOR ) {
68
-
69
- const colorNode = this.getColor( 'color' );
62
+ const colorNode = this.getColor( scope );
70
63
 
71
64
  if ( material.map && material.map.isTexture === true ) {
72
65
 
@@ -80,11 +73,11 @@ class MaterialNode extends Node {
80
73
 
81
74
  } else if ( scope === MaterialNode.OPACITY ) {
82
75
 
83
- const opacityNode = this.getFloat( 'opacity' );
76
+ const opacityNode = this.getFloat( scope );
84
77
 
85
78
  if ( material.alphaMap && material.alphaMap.isTexture === true ) {
86
79
 
87
- node = opacityNode.mul( this.getTexture( 'alphaMap' ) );
80
+ node = opacityNode.mul( this.getTexture( 'alpha' ) );
88
81
 
89
82
  } else {
90
83
 
@@ -96,7 +89,7 @@ class MaterialNode extends Node {
96
89
 
97
90
  if ( material.specularMap && material.specularMap.isTexture === true ) {
98
91
 
99
- node = this.getTexture( 'specularMap' ).r;
92
+ node = this.getTexture( scope ).r;
100
93
 
101
94
  } else {
102
95
 
@@ -104,13 +97,13 @@ class MaterialNode extends Node {
104
97
 
105
98
  }
106
99
 
107
- } else if ( scope === MaterialNode.ROUGHNESS ) {
100
+ } else if ( scope === MaterialNode.ROUGHNESS ) { // TODO: cleanup similar branches
108
101
 
109
- const roughnessNode = this.getFloat( 'roughness' );
102
+ const roughnessNode = this.getFloat( scope );
110
103
 
111
104
  if ( material.roughnessMap && material.roughnessMap.isTexture === true ) {
112
105
 
113
- node = roughnessNode.mul( this.getTexture( 'roughnessMap' ).g );
106
+ node = roughnessNode.mul( this.getTexture( scope ).g );
114
107
 
115
108
  } else {
116
109
 
@@ -120,11 +113,11 @@ class MaterialNode extends Node {
120
113
 
121
114
  } else if ( scope === MaterialNode.METALNESS ) {
122
115
 
123
- const metalnessNode = this.getFloat( 'metalness' );
116
+ const metalnessNode = this.getFloat( scope );
124
117
 
125
118
  if ( material.metalnessMap && material.metalnessMap.isTexture === true ) {
126
119
 
127
- node = metalnessNode.mul( this.getTexture( 'metalnessMap' ).b );
120
+ node = metalnessNode.mul( this.getTexture( scope ).b );
128
121
 
129
122
  } else {
130
123
 
@@ -134,11 +127,11 @@ class MaterialNode extends Node {
134
127
 
135
128
  } else if ( scope === MaterialNode.EMISSIVE ) {
136
129
 
137
- const emissiveNode = this.getColor( 'emissive' );
130
+ const emissiveNode = this.getColor( scope );
138
131
 
139
132
  if ( material.emissiveMap && material.emissiveMap.isTexture === true ) {
140
133
 
141
- node = emissiveNode.mul( this.getTexture( 'emissiveMap' ) );
134
+ node = emissiveNode.mul( this.getTexture( scope ) );
142
135
 
143
136
  } else {
144
137
 
@@ -146,13 +139,29 @@ class MaterialNode extends Node {
146
139
 
147
140
  }
148
141
 
142
+ } else if ( scope === MaterialNode.NORMAL ) {
143
+
144
+ if ( material.normalMap ) {
145
+
146
+ node = this.getTexture( 'normal' ).normalMap( this.getCache( 'normalScale', 'vec2' ) );
147
+
148
+ } else if ( material.bumpMap ) {
149
+
150
+ node = this.getTexture( 'bump' ).r.bumpMap( this.getFloat( 'bumpScale' ) );
151
+
152
+ } else {
153
+
154
+ node = normalView;
155
+
156
+ }
157
+
149
158
  } else if ( scope === MaterialNode.CLEARCOAT ) {
150
159
 
151
- const clearcoatNode = this.getFloat( 'clearcoat' );
160
+ const clearcoatNode = this.getFloat( scope );
152
161
 
153
162
  if ( material.clearcoatMap && material.clearcoatMap.isTexture === true ) {
154
163
 
155
- node = clearcoatNode.mul( this.getTexture( 'clearcoatMap' ).r );
164
+ node = clearcoatNode.mul( this.getTexture( scope ).r );
156
165
 
157
166
  } else {
158
167
 
@@ -162,11 +171,11 @@ class MaterialNode extends Node {
162
171
 
163
172
  } else if ( scope === MaterialNode.CLEARCOAT_ROUGHNESS ) {
164
173
 
165
- const clearcoatRoughnessNode = this.getFloat( 'clearcoatRoughness' );
174
+ const clearcoatRoughnessNode = this.getFloat( scope );
166
175
 
167
176
  if ( material.clearcoatRoughnessMap && material.clearcoatRoughnessMap.isTexture === true ) {
168
177
 
169
- node = clearcoatRoughnessNode.mul( this.getTexture( 'clearcoatRoughnessMap' ).r );
178
+ node = clearcoatRoughnessNode.mul( this.getTexture( scope ).r );
170
179
 
171
180
  } else {
172
181
 
@@ -174,13 +183,25 @@ class MaterialNode extends Node {
174
183
 
175
184
  }
176
185
 
186
+ } else if ( scope === MaterialNode.CLEARCOAT_NORMAL ) {
187
+
188
+ if ( material.clearcoatNormalMap ) {
189
+
190
+ node = this.getTexture( scope ).normalMap( this.getCache( scope + 'Scale', 'vec2' ) );
191
+
192
+ } else {
193
+
194
+ node = normalView;
195
+
196
+ }
197
+
177
198
  } else if ( scope === MaterialNode.SHEEN ) {
178
199
 
179
200
  const sheenNode = this.getColor( 'sheenColor' ).mul( this.getFloat( 'sheen' ) ); // Move this mul() to CPU
180
201
 
181
202
  if ( material.sheenColorMap && material.sheenColorMap.isTexture === true ) {
182
203
 
183
- node = sheenNode.mul( this.getTexture( 'sheenColorMap' ).rgb );
204
+ node = sheenNode.mul( this.getTexture( 'sheenColor' ).rgb );
184
205
 
185
206
  } else {
186
207
 
@@ -190,11 +211,11 @@ class MaterialNode extends Node {
190
211
 
191
212
  } else if ( scope === MaterialNode.SHEEN_ROUGHNESS ) {
192
213
 
193
- const sheenRoughnessNode = this.getFloat( 'sheenRoughness' );
214
+ const sheenRoughnessNode = this.getFloat( scope );
194
215
 
195
216
  if ( material.sheenRoughnessMap && material.sheenRoughnessMap.isTexture === true ) {
196
217
 
197
- node = sheenRoughnessNode.mul( this.getTexture( 'sheenRoughnessMap' ).a );
218
+ node = sheenRoughnessNode.mul( this.getTexture( scope ).a );
198
219
 
199
220
  } else {
200
221
 
@@ -212,7 +233,7 @@ class MaterialNode extends Node {
212
233
 
213
234
  const iridescenceThicknessMinimum = reference( 0, 'float', material.iridescenceThicknessRange );
214
235
 
215
- node = iridescenceThicknessMaximum.sub( iridescenceThicknessMinimum ).mul( this.getTexture( 'iridescenceThicknessMap' ).g ).add( iridescenceThicknessMinimum );
236
+ node = iridescenceThicknessMaximum.sub( iridescenceThicknessMinimum ).mul( this.getTexture( scope ).g ).add( iridescenceThicknessMinimum );
216
237
 
217
238
  } else {
218
239
 
@@ -224,7 +245,7 @@ class MaterialNode extends Node {
224
245
 
225
246
  const outputType = this.getNodeType( builder );
226
247
 
227
- node = materialReference( scope, outputType );
248
+ node = this.getCache( scope, outputType );
228
249
 
229
250
  }
230
251
 
@@ -238,13 +259,15 @@ MaterialNode.ALPHA_TEST = 'alphaTest';
238
259
  MaterialNode.COLOR = 'color';
239
260
  MaterialNode.OPACITY = 'opacity';
240
261
  MaterialNode.SHININESS = 'shininess';
241
- MaterialNode.SPECULAR = 'specular';
262
+ MaterialNode.SPECULAR_COLOR = 'specular';
242
263
  MaterialNode.SPECULAR_STRENGTH = 'specularStrength';
243
264
  MaterialNode.REFLECTIVITY = 'reflectivity';
244
265
  MaterialNode.ROUGHNESS = 'roughness';
245
266
  MaterialNode.METALNESS = 'metalness';
267
+ MaterialNode.NORMAL = 'normal';
246
268
  MaterialNode.CLEARCOAT = 'clearcoat';
247
269
  MaterialNode.CLEARCOAT_ROUGHNESS = 'clearcoatRoughness';
270
+ MaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal';
248
271
  MaterialNode.EMISSIVE = 'emissive';
249
272
  MaterialNode.ROTATION = 'rotation';
250
273
  MaterialNode.SHEEN = 'sheen';
@@ -252,6 +275,12 @@ MaterialNode.SHEEN_ROUGHNESS = 'sheenRoughness';
252
275
  MaterialNode.IRIDESCENCE = 'iridescence';
253
276
  MaterialNode.IRIDESCENCE_IOR = 'iridescenceIOR';
254
277
  MaterialNode.IRIDESCENCE_THICKNESS = 'iridescenceThickness';
278
+ MaterialNode.LINE_SCALE = 'scale';
279
+ MaterialNode.LINE_DASH_SIZE = 'dashSize';
280
+ MaterialNode.LINE_GAP_SIZE = 'gapSize';
281
+ MaterialNode.LINE_WIDTH = 'linewidth';
282
+ MaterialNode.LINE_DASH_OFFSET = 'dashOffset';
283
+ MaterialNode.POINT_WIDTH = 'pointWidth';
255
284
 
256
285
  export default MaterialNode;
257
286
 
@@ -265,13 +294,21 @@ export const materialSpecularStrength = nodeImmutable( MaterialNode, MaterialNod
265
294
  export const materialReflectivity = nodeImmutable( MaterialNode, MaterialNode.REFLECTIVITY );
266
295
  export const materialRoughness = nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
267
296
  export const materialMetalness = nodeImmutable( MaterialNode, MaterialNode.METALNESS );
297
+ export const materialNormal = nodeImmutable( MaterialNode, MaterialNode.NORMAL );
268
298
  export const materialClearcoat = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT );
269
299
  export const materialClearcoatRoughness = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_ROUGHNESS );
300
+ export const materialClearcoatNormal = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_NORMAL );
270
301
  export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
271
302
  export const materialSheen = nodeImmutable( MaterialNode, MaterialNode.SHEEN );
272
303
  export const materialSheenRoughness = nodeImmutable( MaterialNode, MaterialNode.SHEEN_ROUGHNESS );
273
304
  export const materialIridescence = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE );
274
305
  export const materialIridescenceIOR = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_IOR );
275
306
  export const materialIridescenceThickness = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_THICKNESS );
307
+ export const materialLineScale = nodeImmutable( MaterialNode, MaterialNode.LINE_SCALE );
308
+ export const materialLineDashSize = nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_SIZE );
309
+ export const materialLineGapSize = nodeImmutable( MaterialNode, MaterialNode.LINE_GAP_SIZE );
310
+ export const materialLineWidth = nodeImmutable( MaterialNode, MaterialNode.LINE_WIDTH );
311
+ export const materialLineDashOffset = nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_OFFSET );
312
+ export const materialPointWidth = nodeImmutable( MaterialNode, MaterialNode.POINT_WIDTH );
276
313
 
277
314
  addNodeClass( 'MaterialNode', MaterialNode );
@@ -1,5 +1,6 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
- import { NodeUpdateType } from '../core/constants.js';
2
+ //import { renderGroup } from '../core/UniformGroupNode.js';
3
+ //import { NodeUpdateType } from '../core/constants.js';
3
4
  import { addNodeClass } from '../core/Node.js';
4
5
  import { nodeObject } from '../shadernode/ShaderNode.js';
5
6
 
@@ -11,10 +12,18 @@ class MaterialReferenceNode extends ReferenceNode {
11
12
 
12
13
  this.material = material;
13
14
 
14
- this.updateType = NodeUpdateType.RENDER;
15
+ //this.updateType = NodeUpdateType.RENDER;
15
16
 
16
17
  }
17
18
 
19
+ /*setNodeType( node ) {
20
+
21
+ super.setNodeType( node );
22
+
23
+ this.node.groupNode = renderGroup;
24
+
25
+ }*/
26
+
18
27
  updateReference( frame ) {
19
28
 
20
29
  this.reference = this.material !== null ? this.material : frame.material;
@@ -1,6 +1,5 @@
1
1
  import Object3DNode from './Object3DNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
- import { label } from '../core/ContextNode.js';
4
3
  import { nodeImmutable } from '../shadernode/ShaderNode.js';
5
4
 
6
5
  class ModelNode extends Object3DNode {
@@ -24,7 +23,7 @@ class ModelNode extends Object3DNode {
24
23
  export default ModelNode;
25
24
 
26
25
  export const modelDirection = nodeImmutable( ModelNode, ModelNode.DIRECTION );
27
- export const modelViewMatrix = label( nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX ), 'modelViewMatrix' );
26
+ export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX ).label( 'modelViewMatrix' ).temp( 'ModelViewMatrix' );
28
27
  export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
29
28
  export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
30
29
  export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
@@ -4,10 +4,11 @@ import { cameraProjectionMatrix } from './CameraNode.js';
4
4
  import { modelViewMatrix } from './ModelNode.js';
5
5
  import { positionLocal } from './PositionNode.js';
6
6
  import { nodeProxy } from '../shadernode/ShaderNode.js';
7
+ import { varying } from '../core/VaryingNode.js';
7
8
 
8
9
  class ModelViewProjectionNode extends TempNode {
9
10
 
10
- constructor( positionNode = positionLocal ) {
11
+ constructor( positionNode = null ) {
11
12
 
12
13
  super( 'vec4' );
13
14
 
@@ -15,9 +16,17 @@ class ModelViewProjectionNode extends TempNode {
15
16
 
16
17
  }
17
18
 
18
- setup() {
19
+ setup( builder ) {
19
20
 
20
- return cameraProjectionMatrix.mul( modelViewMatrix ).mul( this.positionNode );
21
+ if ( builder.shaderStage === 'fragment' ) {
22
+
23
+ return varying( builder.context.mvp );
24
+
25
+ }
26
+
27
+ const position = this.positionNode || positionLocal;
28
+
29
+ return cameraProjectionMatrix.mul( modelViewMatrix ).mul( position );
21
30
 
22
31
  }
23
32