@plastic-software/three 0.182.0 → 0.183.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 (299) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.cjs +11521 -10878
  3. package/build/three.core.js +11732 -11340
  4. package/build/three.core.min.js +2 -2
  5. package/build/three.module.js +510 -263
  6. package/build/three.module.min.js +2 -2
  7. package/build/three.tsl.js +7 -11
  8. package/build/three.tsl.min.js +2 -2
  9. package/build/three.webgpu.js +3072 -2607
  10. package/build/three.webgpu.min.js +2 -2
  11. package/build/three.webgpu.nodes.js +3071 -2607
  12. package/build/three.webgpu.nodes.min.js +2 -2
  13. package/examples/jsm/Addons.js +0 -3
  14. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  15. package/examples/jsm/controls/ArcballControls.js +3 -3
  16. package/examples/jsm/controls/OrbitControls.js +103 -0
  17. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  18. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  19. package/examples/jsm/environments/RoomEnvironment.js +1 -0
  20. package/examples/jsm/exporters/EXRExporter.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  22. package/examples/jsm/exporters/USDZExporter.js +22 -3
  23. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  24. package/examples/jsm/helpers/ViewHelper.js +67 -8
  25. package/examples/jsm/inspector/Inspector.js +21 -5
  26. package/examples/jsm/inspector/tabs/Console.js +39 -5
  27. package/examples/jsm/inspector/tabs/Parameters.js +16 -0
  28. package/examples/jsm/inspector/ui/Style.js +25 -1
  29. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  30. package/examples/jsm/lines/LineMaterial.js +6 -0
  31. package/examples/jsm/loaders/3MFLoader.js +2 -2
  32. package/examples/jsm/loaders/AMFLoader.js +2 -2
  33. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  34. package/examples/jsm/loaders/EXRLoader.js +5 -5
  35. package/examples/jsm/loaders/FBXLoader.js +2 -2
  36. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  37. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  38. package/examples/jsm/loaders/KMZLoader.js +5 -5
  39. package/examples/jsm/loaders/KTX2Loader.js +5 -5
  40. package/examples/jsm/loaders/LWOLoader.js +7 -39
  41. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  42. package/examples/jsm/loaders/PCDLoader.js +3 -2
  43. package/examples/jsm/loaders/USDLoader.js +100 -40
  44. package/examples/jsm/loaders/UltraHDRLoader.js +182 -30
  45. package/examples/jsm/loaders/VRMLLoader.js +77 -0
  46. package/examples/jsm/loaders/VTKLoader.js +37 -24
  47. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  48. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  49. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  50. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  51. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  52. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  53. package/examples/jsm/objects/LensflareMesh.js +1 -1
  54. package/examples/jsm/objects/Sky.js +76 -4
  55. package/examples/jsm/objects/SkyMesh.js +114 -7
  56. package/examples/jsm/objects/Water.js +4 -3
  57. package/examples/jsm/objects/Water2.js +5 -3
  58. package/examples/jsm/objects/WaterMesh.js +5 -7
  59. package/examples/jsm/physics/JoltPhysics.js +7 -5
  60. package/examples/jsm/physics/RapierPhysics.js +6 -4
  61. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  62. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  63. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  64. package/examples/jsm/renderers/SVGRenderer.js +2 -2
  65. package/examples/jsm/shaders/GTAOShader.js +19 -6
  66. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  67. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  68. package/examples/jsm/shaders/SAOShader.js +17 -4
  69. package/examples/jsm/shaders/SSAOShader.js +11 -1
  70. package/examples/jsm/shaders/SSRShader.js +6 -5
  71. package/examples/jsm/shaders/VignetteShader.js +1 -1
  72. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  73. package/examples/jsm/tsl/display/AnaglyphPassNode.js +456 -16
  74. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  75. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  76. package/examples/jsm/tsl/display/BloomNode.js +5 -5
  77. package/examples/jsm/tsl/display/CRT.js +150 -0
  78. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  81. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  82. package/examples/jsm/tsl/display/GTAONode.js +2 -2
  83. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  84. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  85. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  86. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  87. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  88. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  89. package/examples/jsm/tsl/display/PixelationPassNode.js +5 -5
  90. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  91. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  92. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  94. package/examples/jsm/tsl/display/SSGINode.js +2 -2
  95. package/examples/jsm/tsl/display/SSRNode.js +7 -7
  96. package/examples/jsm/tsl/display/SSSNode.js +2 -2
  97. package/examples/jsm/tsl/display/Shape.js +29 -0
  98. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  99. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  100. package/examples/jsm/tsl/display/TRAANode.js +9 -12
  101. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  102. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  103. package/examples/jsm/tsl/math/Bayer.js +40 -1
  104. package/examples/jsm/utils/LDrawUtils.js +1 -1
  105. package/package.json +11 -19
  106. package/src/Three.Core.js +1 -1
  107. package/src/Three.TSL.js +5 -9
  108. package/src/Three.WebGPU.Nodes.js +2 -0
  109. package/src/Three.WebGPU.js +3 -0
  110. package/src/Three.js +1 -0
  111. package/src/animation/AnimationAction.js +1 -1
  112. package/src/animation/AnimationClip.js +1 -1
  113. package/src/animation/AnimationMixer.js +6 -0
  114. package/src/animation/KeyframeTrack.js +46 -7
  115. package/src/animation/PropertyMixer.js +4 -4
  116. package/src/audio/Audio.js +1 -1
  117. package/src/audio/AudioListener.js +5 -3
  118. package/src/cameras/Camera.js +32 -2
  119. package/src/cameras/CubeCamera.js +20 -0
  120. package/src/constants.js +30 -1
  121. package/src/core/Clock.js +7 -0
  122. package/src/core/Object3D.js +56 -4
  123. package/src/core/RenderTarget.js +3 -4
  124. package/src/extras/PMREMGenerator.js +4 -8
  125. package/src/geometries/TorusGeometry.js +8 -3
  126. package/src/helpers/CameraHelper.js +3 -0
  127. package/src/helpers/DirectionalLightHelper.js +4 -1
  128. package/src/helpers/HemisphereLightHelper.js +3 -0
  129. package/src/helpers/PointLightHelper.js +0 -24
  130. package/src/helpers/SpotLightHelper.js +3 -0
  131. package/src/lights/LightShadow.js +15 -3
  132. package/src/lights/webgpu/IESSpotLight.js +2 -1
  133. package/src/loaders/Cache.js +28 -0
  134. package/src/loaders/FileLoader.js +1 -1
  135. package/src/loaders/ImageBitmapLoader.js +8 -3
  136. package/src/loaders/Loader.js +6 -0
  137. package/src/loaders/ObjectLoader.js +18 -1
  138. package/src/materials/MeshLambertMaterial.js +9 -0
  139. package/src/materials/MeshPhongMaterial.js +9 -0
  140. package/src/materials/nodes/Line2NodeMaterial.js +5 -5
  141. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -0
  142. package/src/materials/nodes/NodeMaterial.js +15 -24
  143. package/src/materials/nodes/manager/NodeMaterialObserver.js +9 -3
  144. package/src/math/Line3.js +3 -5
  145. package/src/math/MathUtils.js +10 -10
  146. package/src/math/Matrix4.js +35 -26
  147. package/src/math/Quaternion.js +3 -29
  148. package/src/math/Vector3.js +3 -3
  149. package/src/math/interpolants/BezierInterpolant.js +108 -0
  150. package/src/nodes/Nodes.js +87 -68
  151. package/src/nodes/TSL.js +2 -5
  152. package/src/nodes/accessors/Arrays.js +1 -1
  153. package/src/nodes/accessors/Bitangent.js +5 -5
  154. package/src/nodes/accessors/BufferAttributeNode.js +1 -1
  155. package/src/nodes/accessors/Camera.js +149 -28
  156. package/src/nodes/accessors/InstanceNode.js +105 -40
  157. package/src/nodes/accessors/Normal.js +9 -9
  158. package/src/nodes/accessors/Position.js +34 -2
  159. package/src/nodes/accessors/SceneProperties.js +53 -0
  160. package/src/nodes/accessors/SkinningNode.js +12 -24
  161. package/src/nodes/accessors/StorageBufferNode.js +0 -19
  162. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  163. package/src/nodes/accessors/Tangent.js +3 -3
  164. package/src/nodes/accessors/Texture3DNode.js +6 -34
  165. package/src/nodes/accessors/TextureNode.js +58 -22
  166. package/src/nodes/accessors/UniformArrayNode.js +2 -0
  167. package/src/nodes/core/MRTNode.js +48 -2
  168. package/src/nodes/core/Node.js +29 -3
  169. package/src/nodes/core/NodeBuilder.js +115 -40
  170. package/src/nodes/core/NodeError.js +28 -0
  171. package/src/nodes/core/NodeUtils.js +5 -3
  172. package/src/nodes/core/OutputStructNode.js +12 -10
  173. package/src/nodes/core/ParameterNode.js +2 -1
  174. package/src/nodes/core/StackNode.js +9 -8
  175. package/src/nodes/core/StackTrace.js +139 -0
  176. package/src/nodes/core/StructNode.js +15 -0
  177. package/src/nodes/core/SubBuildNode.js +1 -1
  178. package/src/nodes/core/UniformNode.js +2 -1
  179. package/src/nodes/core/VarNode.js +1 -1
  180. package/src/nodes/core/VaryingNode.js +1 -18
  181. package/src/nodes/display/BlendModes.js +0 -64
  182. package/src/nodes/display/ColorAdjustment.js +17 -0
  183. package/src/nodes/display/ColorSpaceNode.js +3 -3
  184. package/src/nodes/display/NormalMapNode.js +2 -2
  185. package/src/nodes/display/PassNode.js +21 -2
  186. package/src/nodes/display/RenderOutputNode.js +3 -3
  187. package/src/nodes/display/ScreenNode.js +2 -1
  188. package/src/nodes/display/ToneMappingNode.js +1 -1
  189. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  190. package/src/nodes/display/ViewportDepthNode.js +52 -4
  191. package/src/nodes/display/ViewportTextureNode.js +21 -4
  192. package/src/nodes/fog/Fog.js +18 -35
  193. package/src/nodes/functions/PhysicalLightingModel.js +25 -3
  194. package/src/nodes/geometry/RangeNode.js +4 -2
  195. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  196. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  197. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  198. package/src/nodes/lighting/PointShadowNode.js +24 -12
  199. package/src/nodes/lighting/ShadowFilterNode.js +15 -43
  200. package/src/nodes/lighting/ShadowNode.js +54 -32
  201. package/src/nodes/math/ConditionalNode.js +2 -2
  202. package/src/nodes/math/MathNode.js +3 -40
  203. package/src/nodes/math/OperatorNode.js +2 -1
  204. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  205. package/src/nodes/tsl/TSLCore.js +13 -10
  206. package/src/nodes/utils/DebugNode.js +11 -11
  207. package/src/nodes/utils/JoinNode.js +2 -2
  208. package/src/nodes/utils/LoopNode.js +1 -1
  209. package/src/nodes/utils/MemberNode.js +1 -1
  210. package/src/nodes/utils/RTTNode.js +1 -1
  211. package/src/nodes/utils/ReflectorNode.js +2 -3
  212. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  213. package/src/nodes/utils/UVUtils.js +4 -2
  214. package/src/objects/BatchedMesh.js +22 -12
  215. package/src/objects/InstancedMesh.js +11 -0
  216. package/src/renderers/WebGLRenderer.js +34 -60
  217. package/src/renderers/common/Backend.js +21 -0
  218. package/src/renderers/common/Background.js +7 -4
  219. package/src/renderers/common/BindGroup.js +1 -9
  220. package/src/renderers/common/Bindings.js +20 -5
  221. package/src/renderers/common/BlendMode.js +143 -0
  222. package/src/renderers/common/BundleGroup.js +1 -1
  223. package/src/renderers/common/CubeRenderTarget.js +50 -6
  224. package/src/renderers/common/Geometries.js +17 -3
  225. package/src/renderers/common/Lighting.js +5 -21
  226. package/src/renderers/common/Pipelines.js +4 -4
  227. package/src/renderers/common/PostProcessing.js +8 -206
  228. package/src/renderers/common/RenderBundles.js +2 -1
  229. package/src/renderers/common/RenderContext.js +16 -0
  230. package/src/renderers/common/RenderContexts.js +33 -56
  231. package/src/renderers/common/RenderLists.js +2 -1
  232. package/src/renderers/common/RenderObject.js +2 -3
  233. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  234. package/src/renderers/common/RenderObjects.js +18 -2
  235. package/src/renderers/common/RenderPipeline.js +203 -17
  236. package/src/renderers/common/Renderer.js +207 -40
  237. package/src/renderers/common/Sampler.js +4 -4
  238. package/src/renderers/common/StorageBuffer.js +13 -1
  239. package/src/renderers/common/Textures.js +16 -0
  240. package/src/renderers/common/TimestampQueryPool.js +5 -3
  241. package/src/renderers/common/Uniform.js +8 -0
  242. package/src/renderers/common/UniformsGroup.js +60 -0
  243. package/src/renderers/common/XRManager.js +2 -2
  244. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  245. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  246. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  247. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  248. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  249. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  250. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  251. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  252. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +4 -4
  253. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  254. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  255. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  256. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +23 -1
  257. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  258. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +55 -24
  259. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  260. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  261. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
  262. package/src/renderers/shaders/ShaderLib.js +4 -2
  263. package/src/renderers/shaders/UniformsLib.js +0 -3
  264. package/src/renderers/webgl/WebGLBackground.js +2 -2
  265. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  266. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  267. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  268. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  269. package/src/renderers/webgl/WebGLObjects.js +3 -1
  270. package/src/renderers/webgl/WebGLProgram.js +2 -2
  271. package/src/renderers/webgl/WebGLPrograms.js +10 -4
  272. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  273. package/src/renderers/webgl/WebGLShadowMap.js +5 -4
  274. package/src/renderers/webgl/WebGLState.js +12 -17
  275. package/src/renderers/webgl-fallback/WebGLBackend.js +71 -7
  276. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +98 -29
  277. package/src/renderers/webgl-fallback/utils/WebGLState.js +168 -7
  278. package/src/renderers/webgpu/WebGPUBackend.js +58 -9
  279. package/src/renderers/webgpu/WebGPURenderer.js +1 -0
  280. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +257 -45
  281. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +8 -19
  282. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  283. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -31
  284. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  285. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +25 -25
  286. package/src/renderers/webgpu/utils/WebGPUUtils.js +10 -6
  287. package/src/renderers/webxr/WebXRManager.js +2 -2
  288. package/src/textures/Texture.js +2 -2
  289. package/src/utils.js +246 -3
  290. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -433
  291. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  292. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  293. package/src/nodes/accessors/SceneNode.js +0 -145
  294. package/src/nodes/code/ScriptableNode.js +0 -726
  295. package/src/nodes/code/ScriptableValueNode.js +0 -253
  296. package/src/nodes/display/PosterizeNode.js +0 -65
  297. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  298. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  299. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,433 +0,0 @@
1
- /**
2
- * MeshGouraudMaterial
3
- *
4
- * Lambert illumination model with Gouraud (per-vertex) shading
5
- *
6
- */
7
-
8
- import { UniformsUtils, UniformsLib, ShaderMaterial, Color, MultiplyOperation } from 'three';
9
-
10
- const GouraudShader = {
11
-
12
- name: 'GouraudShader',
13
-
14
- uniforms: UniformsUtils.merge( [
15
- UniformsLib.common,
16
- UniformsLib.specularmap,
17
- UniformsLib.envmap,
18
- UniformsLib.aomap,
19
- UniformsLib.lightmap,
20
- UniformsLib.emissivemap,
21
- UniformsLib.fog,
22
- UniformsLib.lights,
23
- {
24
- emissive: { value: new Color( 0x000000 ) }
25
- }
26
- ] ),
27
-
28
- vertexShader: /* glsl */`
29
-
30
- #define GOURAUD
31
-
32
- varying vec3 vLightFront;
33
- varying vec3 vIndirectFront;
34
-
35
- #ifdef DOUBLE_SIDED
36
- varying vec3 vLightBack;
37
- varying vec3 vIndirectBack;
38
- #endif
39
-
40
- #include <common>
41
- #include <uv_pars_vertex>
42
- #include <envmap_pars_vertex>
43
- #include <bsdfs>
44
- #include <lights_pars_begin>
45
- #include <color_pars_vertex>
46
- #include <fog_pars_vertex>
47
- #include <morphtarget_pars_vertex>
48
- #include <skinning_pars_vertex>
49
- #include <shadowmap_pars_vertex>
50
- #include <logdepthbuf_pars_vertex>
51
- #include <clipping_planes_pars_vertex>
52
-
53
- void main() {
54
-
55
- #include <uv_vertex>
56
- #include <color_vertex>
57
- #include <morphcolor_vertex>
58
-
59
- #include <beginnormal_vertex>
60
- #include <morphnormal_vertex>
61
- #include <skinbase_vertex>
62
- #include <skinnormal_vertex>
63
- #include <defaultnormal_vertex>
64
-
65
- #include <begin_vertex>
66
- #include <morphtarget_vertex>
67
- #include <skinning_vertex>
68
- #include <project_vertex>
69
- #include <logdepthbuf_vertex>
70
- #include <clipping_planes_vertex>
71
-
72
- #include <worldpos_vertex>
73
- #include <envmap_vertex>
74
-
75
- // inlining legacy <lights_lambert_vertex>
76
-
77
- vec3 diffuse = vec3( 1.0 );
78
-
79
- vec3 geometryPosition = mvPosition.xyz;
80
- vec3 geometryNormal = normalize( transformedNormal );
81
- vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );
82
-
83
- vec3 backGeometryNormal = - geometryNormal;
84
-
85
- vLightFront = vec3( 0.0 );
86
- vIndirectFront = vec3( 0.0 );
87
- #ifdef DOUBLE_SIDED
88
- vLightBack = vec3( 0.0 );
89
- vIndirectBack = vec3( 0.0 );
90
- #endif
91
-
92
- IncidentLight directLight;
93
- float dotNL;
94
- vec3 directLightColor_Diffuse;
95
-
96
- vIndirectFront += getAmbientLightIrradiance( ambientLightColor );
97
-
98
- #if defined( USE_LIGHT_PROBES )
99
-
100
- vIndirectFront += getLightProbeIrradiance( lightProbe, geometryNormal );
101
-
102
- #endif
103
-
104
- #ifdef DOUBLE_SIDED
105
-
106
- vIndirectBack += getAmbientLightIrradiance( ambientLightColor );
107
-
108
- #if defined( USE_LIGHT_PROBES )
109
-
110
- vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometryNormal );
111
-
112
- #endif
113
-
114
- #endif
115
-
116
- #if NUM_POINT_LIGHTS > 0
117
-
118
- #pragma unroll_loop_start
119
- for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
120
-
121
- getPointLightInfo( pointLights[ i ], geometryPosition, directLight );
122
-
123
- dotNL = dot( geometryNormal, directLight.direction );
124
- directLightColor_Diffuse = directLight.color;
125
-
126
- vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
127
-
128
- #ifdef DOUBLE_SIDED
129
-
130
- vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
131
-
132
- #endif
133
-
134
- }
135
- #pragma unroll_loop_end
136
-
137
- #endif
138
-
139
- #if NUM_SPOT_LIGHTS > 0
140
-
141
- #pragma unroll_loop_start
142
- for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
143
-
144
- getSpotLightInfo( spotLights[ i ], geometryPosition, directLight );
145
-
146
- dotNL = dot( geometryNormal, directLight.direction );
147
- directLightColor_Diffuse = directLight.color;
148
-
149
- vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
150
-
151
- #ifdef DOUBLE_SIDED
152
-
153
- vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
154
-
155
- #endif
156
- }
157
- #pragma unroll_loop_end
158
-
159
- #endif
160
-
161
- #if NUM_DIR_LIGHTS > 0
162
-
163
- #pragma unroll_loop_start
164
- for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
165
-
166
- getDirectionalLightInfo( directionalLights[ i ], directLight );
167
-
168
- dotNL = dot( geometryNormal, directLight.direction );
169
- directLightColor_Diffuse = directLight.color;
170
-
171
- vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
172
-
173
- #ifdef DOUBLE_SIDED
174
-
175
- vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
176
-
177
- #endif
178
-
179
- }
180
- #pragma unroll_loop_end
181
-
182
- #endif
183
-
184
- #if NUM_HEMI_LIGHTS > 0
185
-
186
- #pragma unroll_loop_start
187
- for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
188
-
189
- vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );
190
-
191
- #ifdef DOUBLE_SIDED
192
-
193
- vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometryNormal );
194
-
195
- #endif
196
-
197
- }
198
- #pragma unroll_loop_end
199
-
200
- #endif
201
-
202
- #include <shadowmap_vertex>
203
- #include <fog_vertex>
204
-
205
- }`,
206
-
207
- fragmentShader: /* glsl */`
208
-
209
- #define GOURAUD
210
-
211
- uniform vec3 diffuse;
212
- uniform vec3 emissive;
213
- uniform float opacity;
214
-
215
- varying vec3 vLightFront;
216
- varying vec3 vIndirectFront;
217
-
218
- #ifdef DOUBLE_SIDED
219
- varying vec3 vLightBack;
220
- varying vec3 vIndirectBack;
221
- #endif
222
-
223
- #include <common>
224
- #include <dithering_pars_fragment>
225
- #include <color_pars_fragment>
226
- #include <uv_pars_fragment>
227
- #include <map_pars_fragment>
228
- #include <alphamap_pars_fragment>
229
- #include <alphatest_pars_fragment>
230
- #include <aomap_pars_fragment>
231
- #include <lightmap_pars_fragment>
232
- #include <emissivemap_pars_fragment>
233
- #include <envmap_common_pars_fragment>
234
- #include <envmap_pars_fragment>
235
- #include <bsdfs>
236
- #include <lights_pars_begin>
237
- #include <fog_pars_fragment>
238
- #include <shadowmap_pars_fragment>
239
- #include <shadowmask_pars_fragment>
240
- #include <specularmap_pars_fragment>
241
- #include <logdepthbuf_pars_fragment>
242
- #include <clipping_planes_pars_fragment>
243
-
244
- void main() {
245
-
246
- #include <clipping_planes_fragment>
247
-
248
- vec4 diffuseColor = vec4( diffuse, opacity );
249
- ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
250
- vec3 totalEmissiveRadiance = emissive;
251
-
252
- #include <logdepthbuf_fragment>
253
- #include <map_fragment>
254
- #include <color_fragment>
255
- #include <alphamap_fragment>
256
- #include <alphatest_fragment>
257
- #include <specularmap_fragment>
258
- #include <emissivemap_fragment>
259
-
260
- // accumulation
261
-
262
- #ifdef DOUBLE_SIDED
263
-
264
- reflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;
265
-
266
- #else
267
-
268
- reflectedLight.indirectDiffuse += vIndirectFront;
269
-
270
- #endif
271
-
272
- #ifdef USE_LIGHTMAP
273
-
274
- vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );
275
- vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;
276
- reflectedLight.indirectDiffuse += lightMapIrradiance;
277
-
278
- #endif
279
-
280
- reflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );
281
-
282
- #ifdef DOUBLE_SIDED
283
-
284
- reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;
285
-
286
- #else
287
-
288
- reflectedLight.directDiffuse = vLightFront;
289
-
290
- #endif
291
-
292
- reflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();
293
-
294
- // modulation
295
-
296
- #include <aomap_fragment>
297
-
298
- vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;
299
-
300
- #include <envmap_fragment>
301
-
302
- #include <opaque_fragment>
303
- #include <tonemapping_fragment>
304
- #include <colorspace_fragment>
305
- #include <fog_fragment>
306
- #include <premultiplied_alpha_fragment>
307
- #include <dithering_fragment>
308
-
309
- }`
310
-
311
- };
312
-
313
- //
314
-
315
- class MeshGouraudMaterial extends ShaderMaterial {
316
-
317
- constructor( parameters ) {
318
-
319
- super();
320
-
321
- console.warn( 'THREE.MeshGouraudMaterial: MeshGouraudMaterial has been deprecated and will be removed with r183. Use THREE.MeshLambertMaterial instead.' ); // @deprecated r173
322
-
323
- this.isMeshGouraudMaterial = true;
324
-
325
- this.type = 'MeshGouraudMaterial';
326
-
327
- //this.color = new THREE.Color( 0xffffff ); // diffuse
328
-
329
- //this.map = null;
330
-
331
- //this.lightMap = null;
332
- //this.lightMapIntensity = 1.0;
333
-
334
- //this.aoMap = null;
335
- //this.aoMapIntensity = 1.0;
336
-
337
- //this.emissive = new THREE.Color( 0x000000 );
338
- //this.emissiveIntensity = 1.0;
339
- //this.emissiveMap = null;
340
-
341
- //this.specularMap = null;
342
-
343
- //this.alphaMap = null;
344
-
345
- //this.envMap = null;
346
- this.combine = MultiplyOperation; // combine has no uniform
347
- //this.reflectivity = 1;
348
- //this.refractionRatio = 0.98;
349
-
350
- this.fog = false; // set to use scene fog
351
- this.lights = true; // set to use scene lights
352
- this.clipping = false; // set to use user-defined clipping planes
353
-
354
- const shader = GouraudShader;
355
-
356
- this.defines = Object.assign( {}, shader.defines );
357
- this.uniforms = UniformsUtils.clone( shader.uniforms );
358
- this.vertexShader = shader.vertexShader;
359
- this.fragmentShader = shader.fragmentShader;
360
-
361
- const exposePropertyNames = [
362
- 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',
363
- 'emissive', 'emissiveIntensity', 'emissiveMap', 'specularMap', 'alphaMap',
364
- 'envMap', 'reflectivity', 'refractionRatio', 'opacity', 'diffuse'
365
- ];
366
-
367
- for ( const propertyName of exposePropertyNames ) {
368
-
369
- Object.defineProperty( this, propertyName, {
370
-
371
- get: function () {
372
-
373
- return this.uniforms[ propertyName ].value;
374
-
375
- },
376
-
377
- set: function ( value ) {
378
-
379
- this.uniforms[ propertyName ].value = value;
380
-
381
- }
382
-
383
- } );
384
-
385
- }
386
-
387
- Object.defineProperty( this, 'color', Object.getOwnPropertyDescriptor( this, 'diffuse' ) );
388
-
389
- this.setValues( parameters );
390
-
391
- }
392
-
393
- copy( source ) {
394
-
395
- super.copy( source );
396
-
397
- this.color.copy( source.color );
398
-
399
- this.map = source.map;
400
-
401
- this.lightMap = source.lightMap;
402
- this.lightMapIntensity = source.lightMapIntensity;
403
-
404
- this.aoMap = source.aoMap;
405
- this.aoMapIntensity = source.aoMapIntensity;
406
-
407
- this.emissive.copy( source.emissive );
408
- this.emissiveMap = source.emissiveMap;
409
- this.emissiveIntensity = source.emissiveIntensity;
410
-
411
- this.specularMap = source.specularMap;
412
-
413
- this.alphaMap = source.alphaMap;
414
-
415
- this.envMap = source.envMap;
416
- this.combine = source.combine;
417
- this.reflectivity = source.reflectivity;
418
- this.refractionRatio = source.refractionRatio;
419
-
420
- this.wireframe = source.wireframe;
421
- this.wireframeLinewidth = source.wireframeLinewidth;
422
- this.wireframeLinecap = source.wireframeLinecap;
423
- this.wireframeLinejoin = source.wireframeLinejoin;
424
-
425
- this.fog = source.fog;
426
-
427
- return this;
428
-
429
- }
430
-
431
- }
432
-
433
- export { MeshGouraudMaterial };
@@ -1,167 +0,0 @@
1
- import { MeshPhysicalMaterial } from 'three';
2
-
3
- /**
4
- * The aim of this mesh material is to use information from a post processing pass in the diffuse color pass.
5
- * This material is based on the MeshPhysicalMaterial.
6
- *
7
- * In the current state, only the information of a screen space AO pass can be used in the material.
8
- * Actually, the output of any screen space AO (SSAO, GTAO) can be used,
9
- * as it is only necessary to provide the AO in one color channel of a texture,
10
- * however the AO pass must be rendered prior to the color pass,
11
- * which makes the post-processing pass somewhat of a pre-processing pass.
12
- * Fot this purpose a new map (`aoPassMap`) is added to the material.
13
- * The value of the map is used the same way as the `aoMap` value.
14
- *
15
- * Motivation to use the outputs AO pass directly in the material:
16
- * The incident light of a fragment is composed of ambient light, direct light and indirect light
17
- * Ambient Occlusion only occludes ambient light and environment light, but not direct light.
18
- * Direct light is only occluded by geometry that casts shadows.
19
- * And of course the emitted light should not be darkened by ambient occlusion either.
20
- * This cannot be achieved if the AO post processing pass is simply blended with the diffuse render pass.
21
- *
22
- * Further extension work might be to use the output of an SSR pass or an HBIL pass from a previous frame.
23
- * This would then create the possibility of SSR and IR depending on material properties such as `roughness`, `metalness` and `reflectivity`.
24
- *
25
- * @augments MeshPhysicalMaterial
26
- * @three_import import { MeshPostProcessingMaterial } from 'three/addons/materials/MeshPostProcessingMaterial.js';
27
- */
28
- class MeshPostProcessingMaterial extends MeshPhysicalMaterial {
29
-
30
- /**
31
- * Constructs a new conditional line material.
32
- *
33
- * @param {Object} [parameters] - An object with one or more properties
34
- * defining the material's appearance. Any property of the material
35
- * (including any property from inherited materials) can be passed
36
- * in here. Color values can be passed any type of value accepted
37
- * by {@link Color#set}.
38
- */
39
- constructor( parameters ) {
40
-
41
- const aoPassMap = parameters.aoPassMap;
42
- const aoPassMapScale = parameters.aoPassMapScale || 1.0;
43
- delete parameters.aoPassMap;
44
- delete parameters.aoPassMapScale;
45
-
46
- super( parameters );
47
-
48
- this.onBeforeCompile = this._onBeforeCompile;
49
- this.customProgramCacheKey = this._customProgramCacheKey;
50
- this._aoPassMap = aoPassMap;
51
-
52
- /**
53
- * The scale of the AO pass.
54
- *
55
- * @type {number}
56
- * @default 1
57
- */
58
- this.aoPassMapScale = aoPassMapScale;
59
- this._shader = null;
60
-
61
- }
62
-
63
- /**
64
- * A texture representing the AO pass.
65
- *
66
- * @type {Texture}
67
- */
68
- get aoPassMap() {
69
-
70
- return this._aoPassMap;
71
-
72
- }
73
-
74
- set aoPassMap( aoPassMap ) {
75
-
76
- this._aoPassMap = aoPassMap;
77
- this.needsUpdate = true;
78
- this._setUniforms();
79
-
80
- }
81
-
82
- _customProgramCacheKey() {
83
-
84
- return this._aoPassMap !== undefined && this._aoPassMap !== null ? 'aoPassMap' : '';
85
-
86
- }
87
-
88
- _onBeforeCompile( shader ) {
89
-
90
- this._shader = shader;
91
-
92
- if ( this._aoPassMap !== undefined && this._aoPassMap !== null ) {
93
-
94
- shader.fragmentShader = shader.fragmentShader.replace(
95
- '#include <aomap_pars_fragment>',
96
- aomap_pars_fragment_replacement
97
- );
98
- shader.fragmentShader = shader.fragmentShader.replace(
99
- '#include <aomap_fragment>',
100
- aomap_fragment_replacement
101
- );
102
-
103
- }
104
-
105
- this._setUniforms();
106
-
107
- }
108
-
109
- _setUniforms() {
110
-
111
- if ( this._shader ) {
112
-
113
- this._shader.uniforms.tAoPassMap = { value: this._aoPassMap };
114
- this._shader.uniforms.aoPassMapScale = { value: this.aoPassMapScale };
115
-
116
- }
117
-
118
- }
119
-
120
- }
121
-
122
- const aomap_pars_fragment_replacement = /* glsl */`
123
- #ifdef USE_AOMAP
124
-
125
- uniform sampler2D aoMap;
126
- uniform float aoMapIntensity;
127
-
128
- #endif
129
-
130
- uniform sampler2D tAoPassMap;
131
- uniform float aoPassMapScale;
132
- `;
133
-
134
- const aomap_fragment_replacement = /* glsl */`
135
- #ifndef AOPASSMAP_SWIZZLE
136
- #define AOPASSMAP_SWIZZLE r
137
- #endif
138
- float ambientOcclusion = texelFetch( tAoPassMap, ivec2( gl_FragCoord.xy * aoPassMapScale ), 0 ).AOPASSMAP_SWIZZLE;
139
-
140
- #ifdef USE_AOMAP
141
-
142
- // reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
143
- ambientOcclusion = min( ambientOcclusion, texture2D( aoMap, vAoMapUv ).r );
144
- ambientOcclusion *= ( ambientOcclusion - 1.0 ) * aoMapIntensity + 1.0;
145
-
146
- #endif
147
-
148
- reflectedLight.indirectDiffuse *= ambientOcclusion;
149
-
150
- #if defined( USE_CLEARCOAT )
151
- clearcoatSpecularIndirect *= ambientOcclusion;
152
- #endif
153
-
154
- #if defined( USE_SHEEN )
155
- sheenSpecularIndirect *= ambientOcclusion;
156
- #endif
157
-
158
- #if defined( USE_ENVMAP ) && defined( STANDARD )
159
-
160
- float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
161
-
162
- reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );
163
-
164
- #endif
165
- `;
166
-
167
- export { MeshPostProcessingMaterial };