super-three 0.152.0 → 0.154.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/build/three.cjs +778 -557
  2. package/build/three.js +778 -557
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +769 -539
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  7. package/examples/jsm/capabilities/WebGPU.js +15 -1
  8. package/examples/jsm/controls/ArcballControls.js +2 -1
  9. package/examples/jsm/controls/FlyControls.js +25 -9
  10. package/examples/jsm/controls/OrbitControls.js +5 -1
  11. package/examples/jsm/csm/CSM.js +1 -3
  12. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  13. package/examples/jsm/effects/OutlineEffect.js +1 -1
  14. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  15. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  16. package/examples/jsm/exporters/GLTFExporter.js +74 -2
  17. package/examples/jsm/exporters/USDZExporter.js +170 -129
  18. package/examples/jsm/helpers/ViewHelper.js +1 -1
  19. package/examples/jsm/lines/LineMaterial.js +1 -1
  20. package/examples/jsm/loaders/3DMLoader.js +1 -1
  21. package/examples/jsm/loaders/3MFLoader.js +5 -1
  22. package/examples/jsm/loaders/AMFLoader.js +5 -1
  23. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  24. package/examples/jsm/loaders/DRACOLoader.js +2 -0
  25. package/examples/jsm/loaders/FBXLoader.js +9 -2
  26. package/examples/jsm/loaders/GLTFLoader.js +230 -94
  27. package/examples/jsm/loaders/KTX2Loader.js +106 -47
  28. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  29. package/examples/jsm/loaders/MMDLoader.js +40 -13
  30. package/examples/jsm/loaders/PCDLoader.js +25 -10
  31. package/examples/jsm/loaders/PDBLoader.js +7 -2
  32. package/examples/jsm/loaders/PLYLoader.js +30 -8
  33. package/examples/jsm/loaders/STLLoader.js +8 -3
  34. package/examples/jsm/loaders/VRMLLoader.js +55 -7
  35. package/examples/jsm/loaders/VTKLoader.js +12 -4
  36. package/examples/jsm/loaders/XYZLoader.js +9 -3
  37. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  38. package/examples/jsm/math/Lut.js +5 -4
  39. package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
  40. package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
  41. package/examples/jsm/misc/VolumeSlice.js +3 -1
  42. package/examples/jsm/nodes/Nodes.js +22 -16
  43. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  44. package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
  45. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  46. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  47. package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
  48. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  49. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
  50. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  51. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
  52. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  53. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  54. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  55. package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
  56. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  57. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  58. package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  60. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  61. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  62. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  63. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  64. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  65. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  66. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  67. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  68. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  69. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  70. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  71. package/examples/jsm/nodes/core/Node.js +13 -16
  72. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  73. package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
  74. package/examples/jsm/nodes/core/NodeUtils.js +10 -0
  75. package/examples/jsm/nodes/core/PropertyNode.js +6 -2
  76. package/examples/jsm/nodes/core/StackNode.js +8 -1
  77. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  78. package/examples/jsm/nodes/core/VarNode.js +1 -3
  79. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  82. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  83. package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
  84. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  85. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  86. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
  87. package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
  88. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  89. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  90. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  91. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  92. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  93. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  94. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  95. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  96. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  97. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  98. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
  99. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  100. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  101. package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
  102. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
  103. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
  105. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
  106. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  107. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  108. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  111. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  112. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  113. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  114. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  115. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  116. package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
  117. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  118. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  119. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  120. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  121. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  122. package/examples/jsm/nodes/math/MathNode.js +6 -0
  123. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  124. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  125. package/examples/jsm/nodes/shadernode/ShaderNode.js +60 -33
  126. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
  127. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  128. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  129. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  130. package/examples/jsm/objects/Lensflare.js +3 -4
  131. package/examples/jsm/objects/MarchingCubes.js +5 -1
  132. package/examples/jsm/objects/Reflector.js +4 -1
  133. package/examples/jsm/objects/Refractor.js +1 -1
  134. package/examples/jsm/objects/Sky.js +1 -1
  135. package/examples/jsm/objects/Water.js +2 -1
  136. package/examples/jsm/objects/Water2.js +1 -1
  137. package/examples/jsm/offscreen/scene.js +1 -0
  138. package/examples/jsm/physics/RapierPhysics.js +93 -133
  139. package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
  140. package/examples/jsm/postprocessing/BloomPass.js +7 -2
  141. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  142. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  143. package/examples/jsm/postprocessing/EffectComposer.js +4 -1
  144. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  145. package/examples/jsm/postprocessing/OutlinePass.js +8 -9
  146. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  147. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  148. package/examples/jsm/postprocessing/SAOPass.js +4 -2
  149. package/examples/jsm/postprocessing/SMAAPass.js +5 -2
  150. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
  151. package/examples/jsm/postprocessing/SSAOPass.js +4 -2
  152. package/examples/jsm/postprocessing/SSRPass.js +3 -1
  153. package/examples/jsm/postprocessing/SavePass.js +5 -2
  154. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  155. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  156. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  157. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
  158. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
  159. package/examples/jsm/renderers/common/Attributes.js +75 -0
  160. package/examples/jsm/renderers/common/Backend.js +162 -0
  161. package/examples/jsm/renderers/common/Background.js +134 -0
  162. package/examples/jsm/renderers/common/Binding.js +11 -0
  163. package/examples/jsm/renderers/common/Bindings.js +169 -0
  164. package/examples/jsm/renderers/common/Buffer.js +38 -0
  165. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  166. package/examples/jsm/renderers/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
  167. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  168. package/examples/jsm/renderers/common/Constants.js +14 -0
  169. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  170. package/examples/jsm/renderers/common/DataMap.js +54 -0
  171. package/examples/jsm/renderers/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
  172. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  173. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  174. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  175. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  176. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  177. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  178. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +2 -39
  179. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  180. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  181. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  182. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  183. package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
  184. package/examples/jsm/renderers/common/Renderer.js +864 -0
  185. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  186. package/examples/jsm/renderers/common/Sampler.js +18 -0
  187. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  188. package/examples/jsm/renderers/common/Textures.js +206 -0
  189. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  190. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  191. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  192. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
  193. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  194. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  195. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  196. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  197. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  198. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  199. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  200. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
  201. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
  202. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  203. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  204. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  205. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  206. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
  207. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
  208. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
  209. package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
  210. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  211. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  212. package/examples/jsm/shaders/BlendShader.js +1 -2
  213. package/examples/jsm/shaders/BokehShader2.js +3 -0
  214. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  215. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  216. package/examples/jsm/shaders/CopyShader.js +4 -2
  217. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  218. package/examples/jsm/shaders/ExposureShader.js +44 -0
  219. package/examples/jsm/shaders/FilmShader.js +2 -0
  220. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  221. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  222. package/examples/jsm/shaders/OutputShader.js +61 -0
  223. package/examples/jsm/shaders/RGBShiftShader.js +2 -0
  224. package/examples/jsm/shaders/SepiaShader.js +2 -0
  225. package/examples/jsm/shaders/ToonShader.js +13 -5
  226. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  227. package/examples/jsm/shaders/VignetteShader.js +2 -0
  228. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  229. package/examples/jsm/utils/BufferGeometryUtils.js +17 -1
  230. package/examples/jsm/utils/TextureUtils.js +86 -0
  231. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  232. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  233. package/examples/jsm/webxr/XRPlanes.js +100 -0
  234. package/package.json +3 -1
  235. package/src/Three.Legacy.js +0 -228
  236. package/src/audio/PositionalAudio.js +8 -0
  237. package/src/cameras/Camera.js +5 -0
  238. package/src/cameras/CubeCamera.js +76 -13
  239. package/src/cameras/OrthographicCamera.js +1 -1
  240. package/src/cameras/PerspectiveCamera.js +1 -1
  241. package/src/constants.js +13 -1
  242. package/src/core/BufferAttribute.js +3 -25
  243. package/src/core/BufferGeometry.js +1 -8
  244. package/src/core/Object3D.js +1 -1
  245. package/src/extras/core/Curve.js +1 -1
  246. package/src/loaders/CubeTextureLoader.js +2 -0
  247. package/src/loaders/Loader.js +2 -0
  248. package/src/loaders/MaterialLoader.js +5 -0
  249. package/src/loaders/ObjectLoader.js +1 -0
  250. package/src/materials/Material.js +13 -1
  251. package/src/materials/MeshPhysicalMaterial.js +32 -6
  252. package/src/math/Color.js +16 -11
  253. package/src/math/Frustum.js +16 -2
  254. package/src/math/MathUtils.js +16 -0
  255. package/src/math/Matrix3.js +26 -6
  256. package/src/math/Matrix4.js +74 -19
  257. package/src/objects/InstancedMesh.js +3 -0
  258. package/src/objects/Mesh.js +14 -10
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +36 -8
  261. package/src/renderers/WebGLRenderer.js +126 -21
  262. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  263. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  264. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  265. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  266. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  267. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
  268. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
  269. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
  270. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
  271. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
  272. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  273. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
  275. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
  276. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
  277. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
  278. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
  279. package/src/renderers/shaders/ShaderChunk.js +10 -6
  280. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  283. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  286. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  287. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  288. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  289. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  290. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  291. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
  292. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  293. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  294. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  295. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  296. package/src/renderers/shaders/ShaderLib.js +4 -1
  297. package/src/renderers/shaders/UniformsLib.js +2 -0
  298. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  299. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  300. package/src/renderers/webgl/WebGLInfo.js +0 -1
  301. package/src/renderers/webgl/WebGLMaterials.js +18 -0
  302. package/src/renderers/webgl/WebGLObjects.js +23 -3
  303. package/src/renderers/webgl/WebGLProgram.js +43 -5
  304. package/src/renderers/webgl/WebGLPrograms.js +19 -7
  305. package/src/renderers/webgl/WebGLTextures.js +19 -1
  306. package/src/renderers/webvr/WebVRManager.js +12 -0
  307. package/src/renderers/webxr/WebXRManager.js +39 -99
  308. package/src/scenes/Scene.js +0 -14
  309. package/src/textures/DepthTexture.js +22 -0
  310. package/src/textures/FramebufferTexture.js +1 -3
  311. package/src/textures/Source.js +4 -0
  312. package/src/textures/Texture.js +1 -1
  313. package/examples/jsm/exporters/ColladaExporter.js +0 -725
  314. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  315. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  316. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
  317. package/examples/jsm/objects/LightningStorm.js +0 -245
  318. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
  319. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
  320. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
  321. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  322. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
  323. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  324. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  325. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  326. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
  327. package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
  328. package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
  329. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
  330. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
  331. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
  332. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  333. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  334. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -38
  335. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  336. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
  337. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  338. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  339. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -0,0 +1,864 @@
1
+ import Animation from './Animation.js';
2
+ import RenderObjects from './RenderObjects.js';
3
+ import Attributes from './Attributes.js';
4
+ import Geometries from './Geometries.js';
5
+ import Info from './Info.js';
6
+ import Pipelines from './Pipelines.js';
7
+ import Bindings from './Bindings.js';
8
+ import RenderLists from './RenderLists.js';
9
+ import RenderContexts from './RenderContexts.js';
10
+ import Textures from './Textures.js';
11
+ import Background from './Background.js';
12
+ import Nodes from './nodes/Nodes.js';
13
+ import { Frustum, Matrix4, Vector2, Vector3, Vector4, Color, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping } from 'three';
14
+
15
+ const _drawingBufferSize = new Vector2();
16
+ const _screen = new Vector4();
17
+ const _frustum = new Frustum();
18
+ const _projScreenMatrix = new Matrix4();
19
+ const _vector3 = new Vector3();
20
+
21
+ class Renderer {
22
+
23
+ constructor( backend ) {
24
+
25
+ this.isRenderer = true;
26
+
27
+ // public
28
+
29
+ this.domElement = backend.getDomElement();
30
+
31
+ this.backend = backend;
32
+
33
+ this.autoClear = true;
34
+ this.autoClearColor = true;
35
+ this.autoClearDepth = true;
36
+ this.autoClearStencil = true;
37
+
38
+ this.outputColorSpace = SRGBColorSpace;
39
+
40
+ this.toneMapping = NoToneMapping;
41
+ this.toneMappingExposure = 1.0;
42
+
43
+ this.sortObjects = true;
44
+
45
+ this.depth = true;
46
+ this.stencil = true;
47
+
48
+ // internals
49
+
50
+ this._pixelRatio = 1;
51
+ this._width = this.domElement.width;
52
+ this._height = this.domElement.height;
53
+
54
+ this._viewport = new Vector4( 0, 0, this._width, this._height );
55
+ this._scissor = new Vector4( 0, 0, this._width, this._height );
56
+ this._scissorTest = false;
57
+
58
+ this._info = null;
59
+ this._properties = null;
60
+ this._attributes = null;
61
+ this._geometries = null;
62
+ this._nodes = null;
63
+ this._bindings = null;
64
+ this._objects = null;
65
+ this._pipelines = null;
66
+ this._renderLists = null;
67
+ this._renderContexts = null;
68
+ this._textures = null;
69
+ this._background = null;
70
+
71
+ this._animation = new Animation();
72
+
73
+ this._currentRenderContext = null;
74
+ this._lastRenderContext = null;
75
+
76
+ this._opaqueSort = null;
77
+ this._transparentSort = null;
78
+
79
+ this._clearAlpha = 1;
80
+ this._clearColor = new Color( 0x000000 );
81
+ this._clearDepth = 1;
82
+ this._clearStencil = 0;
83
+
84
+ this._renderTarget = null;
85
+ this._currentActiveCubeFace = 0;
86
+
87
+ this._initialized = false;
88
+ this._initPromise = null;
89
+
90
+ // backwards compatibility
91
+
92
+ this.shadowMap = {
93
+ enabled: false,
94
+ type: null
95
+ };
96
+
97
+ this.xr = {
98
+ enabled: false
99
+ };
100
+
101
+ }
102
+
103
+ async init() {
104
+
105
+ if ( this._initialized ) {
106
+
107
+ throw new Error( 'Renderer: Backend has already been initialized.' );
108
+
109
+ }
110
+
111
+ if ( this._initPromise !== null ) {
112
+
113
+ return this._initPromise;
114
+
115
+ }
116
+
117
+ this._initPromise = new Promise( async ( resolve, reject ) => {
118
+
119
+ const backend = this.backend;
120
+
121
+ try {
122
+
123
+ await backend.init( this );
124
+
125
+ } catch ( error ) {
126
+
127
+ reject( error );
128
+ return;
129
+
130
+ }
131
+
132
+ this._info = new Info();
133
+ this._nodes = new Nodes( this, backend );
134
+ this._attributes = new Attributes( backend );
135
+ this._background = new Background( this, this._nodes );
136
+ this._geometries = new Geometries( this._attributes, this._info );
137
+ this._textures = new Textures( backend, this._info );
138
+ this._pipelines = new Pipelines( backend, this._nodes );
139
+ this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this._info );
140
+ this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._info );
141
+ this._renderLists = new RenderLists();
142
+ this._renderContexts = new RenderContexts();
143
+
144
+ //
145
+
146
+ this._animation.setNodes( this._nodes );
147
+ this._animation.start();
148
+
149
+ this._initialized = true;
150
+
151
+ resolve();
152
+
153
+ } );
154
+
155
+ return this._initPromise;
156
+
157
+ }
158
+
159
+ get coordinateSystem() {
160
+
161
+ return this.backend.coordinateSystem;
162
+
163
+ }
164
+
165
+ async compile( /*scene, camera*/ ) {
166
+
167
+ console.warn( 'THREE.Renderer: .compile() is not implemented yet.' );
168
+
169
+ }
170
+
171
+ async render( scene, camera ) {
172
+
173
+ if ( this._initialized === false ) await this.init();
174
+
175
+ // preserve render tree
176
+
177
+ const nodeFrame = this._nodes.nodeFrame;
178
+
179
+ const previousRenderId = nodeFrame.renderId;
180
+ const previousRenderState = this._currentRenderContext;
181
+
182
+ //
183
+
184
+ const renderContext = this._renderContexts.get( scene, camera );
185
+ const renderTarget = this._renderTarget;
186
+ const activeCubeFace = this._activeCubeFace;
187
+
188
+ this._currentRenderContext = renderContext;
189
+
190
+ nodeFrame.renderId ++;
191
+
192
+ //
193
+
194
+ const coordinateSystem = this.coordinateSystem;
195
+
196
+ if ( camera.coordinateSystem !== coordinateSystem ) {
197
+
198
+ camera.coordinateSystem = coordinateSystem;
199
+
200
+ camera.updateProjectionMatrix();
201
+
202
+ }
203
+
204
+ //
205
+
206
+ if ( this._animation.isAnimating === false ) nodeFrame.update();
207
+
208
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
209
+
210
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
211
+
212
+ if ( this._info.autoReset === true ) this._info.reset();
213
+
214
+ this._info.render.frame ++;
215
+
216
+ //
217
+
218
+ let viewport = this._viewport;
219
+ let scissor = this._scissor;
220
+ let pixelRatio = this._pixelRatio;
221
+
222
+ if ( renderTarget !== null ) {
223
+
224
+ viewport = renderTarget.viewport;
225
+ scissor = renderTarget.scissor;
226
+ pixelRatio = 1;
227
+
228
+ }
229
+
230
+ this.getDrawingBufferSize( _drawingBufferSize );
231
+
232
+ _screen.set( 0, 0, _drawingBufferSize.width, _drawingBufferSize.height );
233
+
234
+ const minDepth = ( viewport.minDepth === undefined ) ? 0 : viewport.minDepth;
235
+ const maxDepth = ( viewport.maxDepth === undefined ) ? 1 : viewport.maxDepth;
236
+
237
+ renderContext.viewportValue.copy( viewport ).multiplyScalar( pixelRatio ).floor();
238
+ renderContext.viewportValue.minDepth = minDepth;
239
+ renderContext.viewportValue.maxDepth = maxDepth;
240
+ renderContext.viewport = renderContext.viewportValue.equals( _screen ) === false;
241
+
242
+ renderContext.scissorValue.copy( scissor ).multiplyScalar( pixelRatio ).floor();
243
+ renderContext.scissor = this._scissorTest && renderContext.scissorValue.equals( _screen ) === false;
244
+
245
+ renderContext.depth = this.depth;
246
+ renderContext.stencil = this.stencil;
247
+
248
+ //
249
+
250
+ _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
251
+ _frustum.setFromProjectionMatrix( _projScreenMatrix, coordinateSystem );
252
+
253
+ const renderList = this._renderLists.get( scene, camera );
254
+ renderList.init();
255
+
256
+ this._projectObject( scene, camera, 0, renderList );
257
+
258
+ renderList.finish();
259
+
260
+ if ( this.sortObjects === true ) {
261
+
262
+ renderList.sort( this._opaqueSort, this._transparentSort );
263
+
264
+ }
265
+
266
+ //
267
+
268
+ if ( renderTarget !== null ) {
269
+
270
+ this._textures.updateRenderTarget( renderTarget );
271
+
272
+ const renderTargetData = this._textures.get( renderTarget );
273
+
274
+ renderContext.texture = renderTargetData.texture;
275
+ renderContext.depthTexture = renderTargetData.depthTexture;
276
+
277
+ } else {
278
+
279
+ renderContext.texture = null;
280
+ renderContext.depthTexture = null;
281
+
282
+ }
283
+
284
+ renderContext.activeCubeFace = activeCubeFace;
285
+
286
+ //
287
+
288
+ this._nodes.updateScene( scene );
289
+
290
+ //
291
+
292
+ this._background.update( scene, renderList, renderContext );
293
+
294
+ //
295
+
296
+ this.backend.beginRender( renderContext );
297
+
298
+ // process render lists
299
+
300
+ const opaqueObjects = renderList.opaque;
301
+ const transparentObjects = renderList.transparent;
302
+ const lightsNode = renderList.lightsNode;
303
+
304
+ if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, scene, lightsNode );
305
+ if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, scene, lightsNode );
306
+
307
+ // finish render pass
308
+
309
+ this.backend.finishRender( renderContext );
310
+
311
+ // restore render tree
312
+
313
+ nodeFrame.renderId = previousRenderId;
314
+ this._currentRenderContext = previousRenderState;
315
+
316
+ this._lastRenderContext = renderContext;
317
+
318
+ }
319
+
320
+ setAnimationLoop( callback ) {
321
+
322
+ if ( this._initialized === false ) this.init();
323
+
324
+ const animation = this._animation;
325
+
326
+ animation.setAnimationLoop( callback );
327
+
328
+ ( callback === null ) ? animation.stop() : animation.start();
329
+
330
+ }
331
+
332
+ async getArrayBuffer( attribute ) {
333
+
334
+ return await this.backend.getArrayBuffer( attribute );
335
+
336
+ }
337
+
338
+ getContext() {
339
+
340
+ return this._context;
341
+
342
+ }
343
+
344
+ getPixelRatio() {
345
+
346
+ return this._pixelRatio;
347
+
348
+ }
349
+
350
+ getDrawingBufferSize( target ) {
351
+
352
+ return target.set( this._width * this._pixelRatio, this._height * this._pixelRatio ).floor();
353
+
354
+ }
355
+
356
+ getSize( target ) {
357
+
358
+ return target.set( this._width, this._height );
359
+
360
+ }
361
+
362
+ setPixelRatio( value = 1 ) {
363
+
364
+ this._pixelRatio = value;
365
+
366
+ this.setSize( this._width, this._height, false );
367
+
368
+ }
369
+
370
+ setDrawingBufferSize( width, height, pixelRatio ) {
371
+
372
+ this._width = width;
373
+ this._height = height;
374
+
375
+ this._pixelRatio = pixelRatio;
376
+
377
+ this.domElement.width = Math.floor( width * pixelRatio );
378
+ this.domElement.height = Math.floor( height * pixelRatio );
379
+
380
+ this.setViewport( 0, 0, width, height );
381
+
382
+ if ( this._initialized ) this.backend.updateSize();
383
+
384
+ }
385
+
386
+ setSize( width, height, updateStyle = true ) {
387
+
388
+ this._width = width;
389
+ this._height = height;
390
+
391
+ this.domElement.width = Math.floor( width * this._pixelRatio );
392
+ this.domElement.height = Math.floor( height * this._pixelRatio );
393
+
394
+ if ( updateStyle === true ) {
395
+
396
+ this.domElement.style.width = width + 'px';
397
+ this.domElement.style.height = height + 'px';
398
+
399
+ }
400
+
401
+ this.setViewport( 0, 0, width, height );
402
+
403
+ if ( this._initialized ) this.backend.updateSize();
404
+
405
+ }
406
+
407
+ setOpaqueSort( method ) {
408
+
409
+ this._opaqueSort = method;
410
+
411
+ }
412
+
413
+ setTransparentSort( method ) {
414
+
415
+ this._transparentSort = method;
416
+
417
+ }
418
+
419
+ getScissor( target ) {
420
+
421
+ const scissor = this._scissor;
422
+
423
+ target.x = scissor.x;
424
+ target.y = scissor.y;
425
+ target.width = scissor.width;
426
+ target.height = scissor.height;
427
+
428
+ return target;
429
+
430
+ }
431
+
432
+ setScissor( x, y, width, height ) {
433
+
434
+ const scissor = this._scissor;
435
+
436
+ if ( x.isVector4 ) {
437
+
438
+ scissor.copy( x );
439
+
440
+ } else {
441
+
442
+ scissor.set( x, y, width, height );
443
+
444
+ }
445
+
446
+ }
447
+
448
+ getScissorTest() {
449
+
450
+ return this._scissorTest;
451
+
452
+ }
453
+
454
+ setScissorTest( boolean ) {
455
+
456
+ this._scissorTest = boolean;
457
+
458
+ }
459
+
460
+ getViewport( target ) {
461
+
462
+ return target.copy( this._viewport );
463
+
464
+ }
465
+
466
+ setViewport( x, y, width, height, minDepth = 0, maxDepth = 1 ) {
467
+
468
+ const viewport = this._viewport;
469
+
470
+ if ( x.isVector4 ) {
471
+
472
+ viewport.copy( x );
473
+
474
+ } else {
475
+
476
+ viewport.set( x, y, width, height );
477
+
478
+ }
479
+
480
+ viewport.minDepth = minDepth;
481
+ viewport.maxDepth = maxDepth;
482
+
483
+ }
484
+
485
+ getClearColor( target ) {
486
+
487
+ return target.copy( this._clearColor );
488
+
489
+ }
490
+
491
+ setClearColor( color, alpha = 1 ) {
492
+
493
+ this._clearColor.set( color );
494
+ this._clearAlpha = alpha;
495
+
496
+ }
497
+
498
+ getClearAlpha() {
499
+
500
+ return this._clearAlpha;
501
+
502
+ }
503
+
504
+ setClearAlpha( alpha ) {
505
+
506
+ this._clearAlpha = alpha;
507
+
508
+ }
509
+
510
+ getClearDepth() {
511
+
512
+ return this._clearDepth;
513
+
514
+ }
515
+
516
+ setClearDepth( depth ) {
517
+
518
+ this._clearDepth = depth;
519
+
520
+ }
521
+
522
+ getClearStencil() {
523
+
524
+ return this._clearStencil;
525
+
526
+ }
527
+
528
+ setClearStencil( stencil ) {
529
+
530
+ this._clearStencil = stencil;
531
+
532
+ }
533
+
534
+ clear( color = true, depth = true, stencil = true ) {
535
+
536
+ const renderContext = this._currentRenderContext || this._lastRenderContext;
537
+
538
+ if ( renderContext ) this.backend.clear( renderContext, color, depth, stencil );
539
+
540
+ }
541
+
542
+ clearColor() {
543
+
544
+ this.clear( true, false, false );
545
+
546
+ }
547
+
548
+ clearDepth() {
549
+
550
+ this.clear( false, true, false );
551
+
552
+ }
553
+
554
+ clearStencil() {
555
+
556
+ this.clear( false, false, true );
557
+
558
+ }
559
+
560
+ dispose() {
561
+
562
+ this._objects.dispose();
563
+ this._properties.dispose();
564
+ this._pipelines.dispose();
565
+ this._nodes.dispose();
566
+ this._bindings.dispose();
567
+ this._info.dispose();
568
+ this._renderLists.dispose();
569
+ this._renderContexts.dispose();
570
+ this._textures.dispose();
571
+
572
+ this.setRenderTarget( null );
573
+ this.setAnimationLoop( null );
574
+
575
+ }
576
+
577
+ setRenderTarget( renderTarget, activeCubeFace = 0 ) {
578
+
579
+ this._renderTarget = renderTarget;
580
+ this._activeCubeFace = activeCubeFace;
581
+
582
+ }
583
+
584
+ async compute( computeNodes ) {
585
+
586
+ if ( this._initialized === false ) await this.init();
587
+
588
+ const backend = this.backend;
589
+ const pipelines = this._pipelines;
590
+ const computeGroup = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];
591
+
592
+ backend.beginCompute( computeGroup );
593
+
594
+ for ( const computeNode of computeGroup ) {
595
+
596
+ // onInit
597
+
598
+ if ( pipelines.has( computeNode ) === false ) {
599
+
600
+ computeNode.onInit( { renderer: this } );
601
+
602
+ }
603
+
604
+ this._nodes.updateForCompute( computeNode );
605
+ this._bindings.updateForCompute( computeNode );
606
+
607
+ const computePipeline = pipelines.getForCompute( computeNode );
608
+ const computeBindings = this._bindings.getForCompute( computeNode );
609
+
610
+ backend.compute( computeGroup, computeNode, computeBindings, computePipeline );
611
+
612
+ }
613
+
614
+ backend.finishCompute( computeGroup );
615
+
616
+ }
617
+
618
+ getRenderTarget() {
619
+
620
+ return this._renderTarget;
621
+
622
+ }
623
+
624
+ hasFeature( name ) {
625
+
626
+ return this.backend.hasFeature( name );
627
+
628
+ }
629
+
630
+ copyFramebufferToTexture( framebufferTexture ) {
631
+
632
+ const renderContext = this._currentRenderContext || this._lastRenderContext;
633
+
634
+ this._textures.updateTexture( framebufferTexture );
635
+
636
+ this.backend.copyFramebufferToTexture( framebufferTexture, renderContext );
637
+
638
+ }
639
+
640
+ readRenderTargetPixelsAsync( renderTarget, x, y, width, height ) {
641
+
642
+ return this.backend.copyTextureToBuffer( renderTarget.texture, x, y, width, height );
643
+
644
+ }
645
+
646
+ _projectObject( object, camera, groupOrder, renderList ) {
647
+
648
+ if ( object.visible === false ) return;
649
+
650
+ const visible = object.layers.test( camera.layers );
651
+
652
+ if ( visible ) {
653
+
654
+ if ( object.isGroup ) {
655
+
656
+ groupOrder = object.renderOrder;
657
+
658
+ } else if ( object.isLOD ) {
659
+
660
+ if ( object.autoUpdate === true ) object.update( camera );
661
+
662
+ } else if ( object.isLight ) {
663
+
664
+ renderList.pushLight( object );
665
+
666
+ } else if ( object.isSprite ) {
667
+
668
+ if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {
669
+
670
+ if ( this.sortObjects === true ) {
671
+
672
+ _vector3.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
673
+
674
+ }
675
+
676
+ const geometry = object.geometry;
677
+ const material = object.material;
678
+
679
+ if ( material.visible ) {
680
+
681
+ renderList.push( object, geometry, material, groupOrder, _vector3.z, null );
682
+
683
+ }
684
+
685
+ }
686
+
687
+ } else if ( object.isLineLoop ) {
688
+
689
+ console.error( 'THREE.Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.' );
690
+
691
+ } else if ( object.isMesh || object.isLine || object.isPoints ) {
692
+
693
+ if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
694
+
695
+ const geometry = object.geometry;
696
+ const material = object.material;
697
+
698
+ if ( this.sortObjects === true ) {
699
+
700
+ if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
701
+
702
+ _vector3
703
+ .copy( geometry.boundingSphere.center )
704
+ .applyMatrix4( object.matrixWorld )
705
+ .applyMatrix4( _projScreenMatrix );
706
+
707
+ }
708
+
709
+ if ( Array.isArray( material ) ) {
710
+
711
+ const groups = geometry.groups;
712
+
713
+ for ( let i = 0, l = groups.length; i < l; i ++ ) {
714
+
715
+ const group = groups[ i ];
716
+ const groupMaterial = material[ group.materialIndex ];
717
+
718
+ if ( groupMaterial && groupMaterial.visible ) {
719
+
720
+ renderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );
721
+
722
+ }
723
+
724
+ }
725
+
726
+ } else if ( material.visible ) {
727
+
728
+ renderList.push( object, geometry, material, groupOrder, _vector3.z, null );
729
+
730
+ }
731
+
732
+ }
733
+
734
+ }
735
+
736
+ }
737
+
738
+ const children = object.children;
739
+
740
+ for ( let i = 0, l = children.length; i < l; i ++ ) {
741
+
742
+ this._projectObject( children[ i ], camera, groupOrder, renderList );
743
+
744
+ }
745
+
746
+ }
747
+
748
+ _renderObjects( renderList, camera, scene, lightsNode ) {
749
+
750
+ // process renderable objects
751
+
752
+ for ( let i = 0, il = renderList.length; i < il; i ++ ) {
753
+
754
+ const renderItem = renderList[ i ];
755
+
756
+ // @TODO: Add support for multiple materials per object. This will require to extract
757
+ // the material from the renderItem object and pass it with its group data to _renderObject().
758
+
759
+ const { object, geometry, material, group } = renderItem;
760
+
761
+ if ( camera.isArrayCamera ) {
762
+
763
+ const cameras = camera.cameras;
764
+
765
+ for ( let j = 0, jl = cameras.length; j < jl; j ++ ) {
766
+
767
+ const camera2 = cameras[ j ];
768
+
769
+ if ( object.layers.test( camera2.layers ) ) {
770
+
771
+ const vp = camera2.viewport;
772
+ const minDepth = ( vp.minDepth === undefined ) ? 0 : vp.minDepth;
773
+ const maxDepth = ( vp.maxDepth === undefined ) ? 1 : vp.maxDepth;
774
+
775
+ const viewportValue = this._currentRenderContext.viewportValue;
776
+ viewportValue.copy( vp ).multiplyScalar( this._pixelRatio ).floor();
777
+ viewportValue.minDepth = minDepth;
778
+ viewportValue.maxDepth = maxDepth;
779
+
780
+ this.backend.updateViewport( this._currentRenderContext );
781
+
782
+ this._renderObject( object, scene, camera2, geometry, material, group, lightsNode );
783
+
784
+ }
785
+
786
+ }
787
+
788
+ } else {
789
+
790
+ this._renderObject( object, scene, camera, geometry, material, group, lightsNode );
791
+
792
+ }
793
+
794
+ }
795
+
796
+ }
797
+
798
+ _renderObject( object, scene, camera, geometry, material, group, lightsNode ) {
799
+
800
+ material = scene.overrideMaterial !== null ? scene.overrideMaterial : material;
801
+
802
+ //
803
+
804
+ object.onBeforeRender( this, scene, camera, geometry, material, group );
805
+
806
+ //
807
+
808
+ object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
809
+ object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
810
+
811
+ //
812
+
813
+ material.onBeforeRender( this, scene, camera, geometry, material, group );
814
+
815
+ //
816
+
817
+ if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
818
+
819
+ material.side = BackSide;
820
+ this._renderObjectDirect( object, scene, camera, geometry, material, group, lightsNode, 'backSide' ); // create backSide pass id
821
+
822
+ material.side = FrontSide;
823
+ this._renderObjectDirect( object, scene, camera, geometry, material, group, lightsNode ); // use default pass id
824
+
825
+ material.side = DoubleSide;
826
+
827
+ } else {
828
+
829
+ this._renderObjectDirect( object, scene, camera, geometry, material, group, lightsNode );
830
+
831
+ }
832
+
833
+ //
834
+
835
+ object.onAfterRender( this, scene, camera, geometry, material, group );
836
+
837
+ }
838
+
839
+ _renderObjectDirect( object, scene, camera, geometry, material, group, lightsNode, passId ) {
840
+
841
+ //
842
+
843
+ const renderObject = this._objects.get( object, material, scene, camera, lightsNode, passId );
844
+ renderObject.context = this._currentRenderContext;
845
+
846
+ //
847
+
848
+ this._nodes.updateBefore( renderObject );
849
+
850
+ //
851
+
852
+ this._nodes.updateForRender( renderObject );
853
+ this._geometries.update( renderObject );
854
+ this._bindings.updateForRender( renderObject );
855
+
856
+ //
857
+
858
+ this.backend.draw( renderObject, this._info );
859
+
860
+ }
861
+
862
+ }
863
+
864
+ export default Renderer;