@react-three/postprocessing 2.18.0 → 3.0.0-rc.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 (271) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +81 -81
  3. package/dist/index.d.ts +1 -38
  4. package/dist/index.js +554 -88
  5. package/dist/index.js.map +1 -1
  6. package/package.json +69 -96
  7. package/src/EffectComposer.test.tsx +126 -0
  8. package/src/EffectComposer.tsx +202 -0
  9. package/src/Selection.tsx +46 -0
  10. package/src/effects/ASCII.tsx +135 -0
  11. package/src/effects/Autofocus.tsx +153 -0
  12. package/src/effects/Bloom.tsx +6 -0
  13. package/src/effects/BrightnessContrast.tsx +4 -0
  14. package/src/effects/ChromaticAberration.tsx +5 -0
  15. package/src/effects/ColorAverage.tsx +15 -0
  16. package/src/effects/ColorDepth.tsx +4 -0
  17. package/src/effects/Depth.tsx +4 -0
  18. package/src/effects/DepthOfField.tsx +89 -0
  19. package/src/effects/DotScreen.tsx +4 -0
  20. package/src/effects/FXAA.tsx +4 -0
  21. package/src/effects/Glitch.tsx +40 -0
  22. package/src/effects/GodRays.tsx +16 -0
  23. package/src/effects/Grid.tsx +21 -0
  24. package/src/effects/HueSaturation.tsx +4 -0
  25. package/src/effects/LUT.tsx +26 -0
  26. package/src/effects/LensFlare.tsx +611 -0
  27. package/src/effects/N8AO.tsx +81 -0
  28. package/src/effects/Noise.tsx +4 -0
  29. package/src/effects/Outline.tsx +117 -0
  30. package/src/effects/Pixelation.tsx +15 -0
  31. package/{dist/effects/Ramp.js → src/effects/Ramp.tsx} +150 -156
  32. package/src/effects/SMAA.tsx +4 -0
  33. package/src/effects/SSAO.tsx +41 -0
  34. package/src/effects/ScanlineEffect.tsx +7 -0
  35. package/src/effects/SelectiveBloom.tsx +126 -0
  36. package/src/effects/Sepia.tsx +4 -0
  37. package/src/effects/ShockWave.tsx +4 -0
  38. package/src/effects/Texture.tsx +23 -0
  39. package/src/effects/TiltShift.tsx +4 -0
  40. package/{dist/effects/TiltShift2.js → src/effects/TiltShift2.tsx} +90 -98
  41. package/src/effects/ToneMapping.tsx +6 -0
  42. package/src/effects/Vignette.tsx +4 -0
  43. package/{dist/effects/Water.js → src/effects/Water.tsx} +35 -38
  44. package/src/index.ts +40 -0
  45. package/src/util.tsx +55 -0
  46. package/dist/EffectComposer.cjs +0 -137
  47. package/dist/EffectComposer.cjs.map +0 -1
  48. package/dist/EffectComposer.d.ts +0 -27
  49. package/dist/EffectComposer.js +0 -137
  50. package/dist/EffectComposer.js.map +0 -1
  51. package/dist/EffectComposer.test.d.ts +0 -4
  52. package/dist/Selection.cjs +0 -36
  53. package/dist/Selection.cjs.map +0 -1
  54. package/dist/Selection.d.ts +0 -16
  55. package/dist/Selection.js +0 -36
  56. package/dist/Selection.js.map +0 -1
  57. package/dist/compat.cjs +0 -77
  58. package/dist/compat.cjs.map +0 -1
  59. package/dist/compat.js +0 -60
  60. package/dist/compat.js.map +0 -1
  61. package/dist/effects/ASCII.cjs +0 -113
  62. package/dist/effects/ASCII.cjs.map +0 -1
  63. package/dist/effects/ASCII.d.ts +0 -17
  64. package/dist/effects/ASCII.js +0 -113
  65. package/dist/effects/ASCII.js.map +0 -1
  66. package/dist/effects/Autofocus.cjs +0 -126
  67. package/dist/effects/Autofocus.cjs.map +0 -1
  68. package/dist/effects/Autofocus.d.ts +0 -22
  69. package/dist/effects/Autofocus.js +0 -109
  70. package/dist/effects/Autofocus.js.map +0 -1
  71. package/dist/effects/Bloom.cjs +0 -9
  72. package/dist/effects/Bloom.cjs.map +0 -1
  73. package/dist/effects/Bloom.d.ts +0 -6
  74. package/dist/effects/Bloom.js +0 -9
  75. package/dist/effects/Bloom.js.map +0 -1
  76. package/dist/effects/BrightnessContrast.cjs +0 -7
  77. package/dist/effects/BrightnessContrast.cjs.map +0 -1
  78. package/dist/effects/BrightnessContrast.d.ts +0 -10
  79. package/dist/effects/BrightnessContrast.js +0 -7
  80. package/dist/effects/BrightnessContrast.js.map +0 -1
  81. package/dist/effects/ChromaticAberration.cjs +0 -7
  82. package/dist/effects/ChromaticAberration.cjs.map +0 -1
  83. package/dist/effects/ChromaticAberration.d.ts +0 -13
  84. package/dist/effects/ChromaticAberration.js +0 -7
  85. package/dist/effects/ChromaticAberration.js.map +0 -1
  86. package/dist/effects/ColorAverage.cjs +0 -11
  87. package/dist/effects/ColorAverage.cjs.map +0 -1
  88. package/dist/effects/ColorAverage.d.ts +0 -8
  89. package/dist/effects/ColorAverage.js +0 -11
  90. package/dist/effects/ColorAverage.js.map +0 -1
  91. package/dist/effects/ColorDepth.cjs +0 -7
  92. package/dist/effects/ColorDepth.cjs.map +0 -1
  93. package/dist/effects/ColorDepth.d.ts +0 -9
  94. package/dist/effects/ColorDepth.js +0 -7
  95. package/dist/effects/ColorDepth.js.map +0 -1
  96. package/dist/effects/Depth.cjs +0 -7
  97. package/dist/effects/Depth.cjs.map +0 -1
  98. package/dist/effects/Depth.d.ts +0 -9
  99. package/dist/effects/Depth.js +0 -7
  100. package/dist/effects/Depth.js.map +0 -1
  101. package/dist/effects/DepthOfField.cjs +0 -74
  102. package/dist/effects/DepthOfField.cjs.map +0 -1
  103. package/dist/effects/DepthOfField.d.ts +0 -25
  104. package/dist/effects/DepthOfField.js +0 -74
  105. package/dist/effects/DepthOfField.js.map +0 -1
  106. package/dist/effects/DotScreen.cjs +0 -7
  107. package/dist/effects/DotScreen.cjs.map +0 -1
  108. package/dist/effects/DotScreen.d.ts +0 -10
  109. package/dist/effects/DotScreen.js +0 -7
  110. package/dist/effects/DotScreen.js.map +0 -1
  111. package/dist/effects/FXAA.cjs +0 -7
  112. package/dist/effects/FXAA.cjs.map +0 -1
  113. package/dist/effects/FXAA.d.ts +0 -8
  114. package/dist/effects/FXAA.js +0 -7
  115. package/dist/effects/FXAA.js.map +0 -1
  116. package/dist/effects/Glitch.cjs +0 -31
  117. package/dist/effects/Glitch.cjs.map +0 -1
  118. package/dist/effects/Glitch.d.ts +0 -30
  119. package/dist/effects/Glitch.js +0 -31
  120. package/dist/effects/Glitch.js.map +0 -1
  121. package/dist/effects/GodRays.cjs +0 -15
  122. package/dist/effects/GodRays.cjs.map +0 -1
  123. package/dist/effects/GodRays.d.ts +0 -21
  124. package/dist/effects/GodRays.js +0 -15
  125. package/dist/effects/GodRays.js.map +0 -1
  126. package/dist/effects/Grid.cjs +0 -18
  127. package/dist/effects/Grid.cjs.map +0 -1
  128. package/dist/effects/Grid.d.ts +0 -12
  129. package/dist/effects/Grid.js +0 -18
  130. package/dist/effects/Grid.js.map +0 -1
  131. package/dist/effects/HueSaturation.cjs +0 -7
  132. package/dist/effects/HueSaturation.cjs.map +0 -1
  133. package/dist/effects/HueSaturation.d.ts +0 -10
  134. package/dist/effects/HueSaturation.js +0 -7
  135. package/dist/effects/HueSaturation.js.map +0 -1
  136. package/dist/effects/LUT.cjs +0 -20
  137. package/dist/effects/LUT.cjs.map +0 -1
  138. package/dist/effects/LUT.d.ts +0 -9
  139. package/dist/effects/LUT.js +0 -20
  140. package/dist/effects/LUT.js.map +0 -1
  141. package/dist/effects/LensFlare.cjs +0 -189
  142. package/dist/effects/LensFlare.cjs.map +0 -1
  143. package/dist/effects/LensFlare.d.ts +0 -52
  144. package/dist/effects/LensFlare.js +0 -172
  145. package/dist/effects/LensFlare.js.map +0 -1
  146. package/dist/effects/N8AO/BlueNoise.cjs +0 -4
  147. package/dist/effects/N8AO/BlueNoise.cjs.map +0 -1
  148. package/dist/effects/N8AO/BlueNoise.js +0 -5
  149. package/dist/effects/N8AO/BlueNoise.js.map +0 -1
  150. package/dist/effects/N8AO/DepthDownSample.cjs +0 -183
  151. package/dist/effects/N8AO/DepthDownSample.cjs.map +0 -1
  152. package/dist/effects/N8AO/DepthDownSample.js +0 -166
  153. package/dist/effects/N8AO/DepthDownSample.js.map +0 -1
  154. package/dist/effects/N8AO/EffectCompositer.cjs +0 -278
  155. package/dist/effects/N8AO/EffectCompositer.cjs.map +0 -1
  156. package/dist/effects/N8AO/EffectCompositer.js +0 -261
  157. package/dist/effects/N8AO/EffectCompositer.js.map +0 -1
  158. package/dist/effects/N8AO/EffectShader.cjs +0 -236
  159. package/dist/effects/N8AO/EffectShader.cjs.map +0 -1
  160. package/dist/effects/N8AO/EffectShader.js +0 -219
  161. package/dist/effects/N8AO/EffectShader.js.map +0 -1
  162. package/dist/effects/N8AO/FullScreenTriangle.cjs +0 -59
  163. package/dist/effects/N8AO/FullScreenTriangle.cjs.map +0 -1
  164. package/dist/effects/N8AO/FullScreenTriangle.js +0 -42
  165. package/dist/effects/N8AO/FullScreenTriangle.js.map +0 -1
  166. package/dist/effects/N8AO/N8AOPostPass.cjs +0 -502
  167. package/dist/effects/N8AO/N8AOPostPass.cjs.map +0 -1
  168. package/dist/effects/N8AO/N8AOPostPass.js +0 -485
  169. package/dist/effects/N8AO/N8AOPostPass.js.map +0 -1
  170. package/dist/effects/N8AO/PoissionBlur.cjs +0 -186
  171. package/dist/effects/N8AO/PoissionBlur.cjs.map +0 -1
  172. package/dist/effects/N8AO/PoissionBlur.js +0 -169
  173. package/dist/effects/N8AO/PoissionBlur.js.map +0 -1
  174. package/dist/effects/N8AO/index.cjs +0 -60
  175. package/dist/effects/N8AO/index.cjs.map +0 -1
  176. package/dist/effects/N8AO/index.d.ts +0 -18
  177. package/dist/effects/N8AO/index.js +0 -60
  178. package/dist/effects/N8AO/index.js.map +0 -1
  179. package/dist/effects/Noise.cjs +0 -7
  180. package/dist/effects/Noise.cjs.map +0 -1
  181. package/dist/effects/Noise.d.ts +0 -9
  182. package/dist/effects/Noise.js +0 -7
  183. package/dist/effects/Noise.js.map +0 -1
  184. package/dist/effects/Outline.cjs +0 -100
  185. package/dist/effects/Outline.cjs.map +0 -1
  186. package/dist/effects/Outline.d.ts +0 -30
  187. package/dist/effects/Outline.js +0 -100
  188. package/dist/effects/Outline.js.map +0 -1
  189. package/dist/effects/Pixelation.cjs +0 -11
  190. package/dist/effects/Pixelation.cjs.map +0 -1
  191. package/dist/effects/Pixelation.d.ts +0 -6
  192. package/dist/effects/Pixelation.js +0 -11
  193. package/dist/effects/Pixelation.js.map +0 -1
  194. package/dist/effects/Ramp.cjs +0 -156
  195. package/dist/effects/Ramp.cjs.map +0 -1
  196. package/dist/effects/Ramp.d.ts +0 -88
  197. package/dist/effects/Ramp.js.map +0 -1
  198. package/dist/effects/SMAA.cjs +0 -7
  199. package/dist/effects/SMAA.cjs.map +0 -1
  200. package/dist/effects/SMAA.d.ts +0 -10
  201. package/dist/effects/SMAA.js +0 -7
  202. package/dist/effects/SMAA.js.map +0 -1
  203. package/dist/effects/SSAO.cjs +0 -37
  204. package/dist/effects/SSAO.cjs.map +0 -1
  205. package/dist/effects/SSAO.d.ts +0 -30
  206. package/dist/effects/SSAO.js +0 -37
  207. package/dist/effects/SSAO.js.map +0 -1
  208. package/dist/effects/SSR/index.cjs +0 -33
  209. package/dist/effects/SSR/index.cjs.map +0 -1
  210. package/dist/effects/SSR/index.d.ts +0 -55
  211. package/dist/effects/SSR/index.js +0 -33
  212. package/dist/effects/SSR/index.js.map +0 -1
  213. package/dist/effects/SSR/screen-space-reflections.cjs +0 -1699
  214. package/dist/effects/SSR/screen-space-reflections.cjs.map +0 -1
  215. package/dist/effects/SSR/screen-space-reflections.js +0 -1699
  216. package/dist/effects/SSR/screen-space-reflections.js.map +0 -1
  217. package/dist/effects/ScanlineEffect.cjs +0 -7
  218. package/dist/effects/ScanlineEffect.cjs.map +0 -1
  219. package/dist/effects/ScanlineEffect.d.ts +0 -9
  220. package/dist/effects/ScanlineEffect.js +0 -7
  221. package/dist/effects/ScanlineEffect.js.map +0 -1
  222. package/dist/effects/SelectiveBloom.cjs +0 -94
  223. package/dist/effects/SelectiveBloom.cjs.map +0 -1
  224. package/dist/effects/SelectiveBloom.d.ts +0 -20
  225. package/dist/effects/SelectiveBloom.js +0 -94
  226. package/dist/effects/SelectiveBloom.js.map +0 -1
  227. package/dist/effects/Sepia.cjs +0 -7
  228. package/dist/effects/Sepia.cjs.map +0 -1
  229. package/dist/effects/Sepia.d.ts +0 -9
  230. package/dist/effects/Sepia.js +0 -7
  231. package/dist/effects/Sepia.js.map +0 -1
  232. package/dist/effects/ShockWave.cjs +0 -7
  233. package/dist/effects/ShockWave.cjs.map +0 -1
  234. package/dist/effects/ShockWave.d.ts +0 -6
  235. package/dist/effects/ShockWave.js +0 -7
  236. package/dist/effects/ShockWave.js.map +0 -1
  237. package/dist/effects/Texture.cjs +0 -21
  238. package/dist/effects/Texture.cjs.map +0 -1
  239. package/dist/effects/Texture.d.ts +0 -11
  240. package/dist/effects/Texture.js +0 -21
  241. package/dist/effects/Texture.js.map +0 -1
  242. package/dist/effects/TiltShift.cjs +0 -7
  243. package/dist/effects/TiltShift.cjs.map +0 -1
  244. package/dist/effects/TiltShift.d.ts +0 -17
  245. package/dist/effects/TiltShift.js +0 -7
  246. package/dist/effects/TiltShift.js.map +0 -1
  247. package/dist/effects/TiltShift2.cjs +0 -98
  248. package/dist/effects/TiltShift2.cjs.map +0 -1
  249. package/dist/effects/TiltShift2.d.ts +0 -30
  250. package/dist/effects/TiltShift2.js.map +0 -1
  251. package/dist/effects/ToneMapping.cjs +0 -7
  252. package/dist/effects/ToneMapping.cjs.map +0 -1
  253. package/dist/effects/ToneMapping.d.ts +0 -19
  254. package/dist/effects/ToneMapping.js +0 -7
  255. package/dist/effects/ToneMapping.js.map +0 -1
  256. package/dist/effects/Vignette.cjs +0 -7
  257. package/dist/effects/Vignette.cjs.map +0 -1
  258. package/dist/effects/Vignette.d.ts +0 -12
  259. package/dist/effects/Vignette.js +0 -7
  260. package/dist/effects/Vignette.js.map +0 -1
  261. package/dist/effects/Water.cjs +0 -38
  262. package/dist/effects/Water.cjs.map +0 -1
  263. package/dist/effects/Water.d.ts +0 -15
  264. package/dist/effects/Water.js.map +0 -1
  265. package/dist/index.cjs +0 -89
  266. package/dist/index.cjs.map +0 -1
  267. package/dist/util.cjs +0 -69
  268. package/dist/util.cjs.map +0 -1
  269. package/dist/util.d.ts +0 -13
  270. package/dist/util.js +0 -52
  271. package/dist/util.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/Selection.tsx","../src/EffectComposer.tsx","../src/util.tsx","../src/effects/DepthOfField.tsx","../src/effects/Autofocus.tsx","../src/effects/LensFlare.tsx","../src/effects/Bloom.tsx","../src/effects/BrightnessContrast.tsx","../src/effects/ChromaticAberration.tsx","../src/effects/ColorAverage.tsx","../src/effects/ColorDepth.tsx","../src/effects/Depth.tsx","../src/effects/DotScreen.tsx","../src/effects/Glitch.tsx","../src/effects/GodRays.tsx","../src/effects/Grid.tsx","../src/effects/HueSaturation.tsx","../src/effects/Noise.tsx","../src/effects/Outline.tsx","../src/effects/Pixelation.tsx","../src/effects/ScanlineEffect.tsx","../src/effects/SelectiveBloom.tsx","../src/effects/Sepia.tsx","../src/effects/SSAO.tsx","../src/effects/SMAA.tsx","../src/effects/FXAA.tsx","../src/effects/Ramp.tsx","../src/effects/Texture.tsx","../src/effects/ToneMapping.tsx","../src/effects/Vignette.tsx","../src/effects/ShockWave.tsx","../src/effects/LUT.tsx","../src/effects/TiltShift.tsx","../src/effects/TiltShift2.tsx","../src/effects/ASCII.tsx","../src/effects/Water.tsx","../src/effects/N8AO.tsx"],"sourcesContent":null,"names":["selectionContext","Selection","children","enabled","selected","select","useState","value","useMemo","Select","props","group","useRef","api","useContext","useEffect","changed","current","o","state","t","e","EffectComposerContext","re","n","effect","Lt","memo","forwardRef","_camera","_scene","resolutionScale","renderPriority","autoClear","depthBuffer","enableNormalPass","stencilBuffer","multisampling","frameBufferType","HalfFloatType","ref","gl","defaultScene","defaultCamera","size","useThree","scene","camera","composer","normalPass","downSamplingPass","webGL2Available","isWebGL2Available","effectComposer","EffectComposerImpl","RenderPass","normalPass2","NormalPass","DepthDownsamplingPass","useFrame","_","delta","currentAutoClear","useLayoutEffect","passes","groupInstance","i","child","Effect","effects","isConvolution","next","pass","EffectPass","Pass","currentTonemapping","NoToneMapping","useImperativeHandle","S","F","jsx","B","resolveRef","components","defaults","opacity","Component","key","extend","args","React","blendFunction","useVector2","THREE","DepthOfField","worldFocusDistance","worldFocusRange","focusDistance","focusRange","focalLength","bokehScale","resolutionX","resolutionY","width","height","target","depthTexture","autoFocus","DepthOfFieldEffect","effect2","Vector3","maskPass","MaskFunction","d","Autofocus","followMouse","debug","manual","smoothTime","fref","dofRef","hitpointRef","targetRef","pointer","depthPickingPass","DepthPickingPass","copyPass","CopyPass","hitpoint","ndc","getHit","useCallback","x","y","update","updateTarget","hit","easing","jsxs","Fragment","createPortal","f","c","a","LensFlareShader","LensFlareEffect","glareSize","lensPosition","screenRes","starPoints","flareSize","flareSpeed","flareShape","animated","anamorphic","colorGain","lensDirtTexture","haloScale","secondaryGhosts","aditionalStreaks","ghostScale","starBurst","_renderer","_inputBuffer","deltaTime","time","LensFlareWrapped","It","viewport","raycaster","raycasterPos","projectedPosition","uLensPosition","uOpacity","intersects","object","screenRes2","Bloom","BrightnessContrast","_t","ChromaticAberration","ChromaticAberrationEffect","ColorAverageEffect","ColorDepth","ColorDepthEffect","Ot","Depth","DotScreenEffect","active","r","invalidate","delay","duration","strength","chromaticAberrationOffset","GlitchEffect","GlitchMode","GodRays","D","GodRaysEffect","Grid","GridEffect","HueSaturation","Zt","wrapEffect","NoiseEffect","$t","selection","selectionLayer","patternTexture","edgeStrength","pulseSpeed","visibleEdgeColor","hiddenEdgeColor","kernelSize","blur","xRay","OutlineEffect","l","Pixelation","granularity","PixelationEffect","Scanline","addLight","light","removeLight","SelectiveBloom","lights","inverted","ignoreBackground","luminanceThreshold","luminanceSmoothing","intensity","mipmapBlur","SelectiveBloomEffect","Sepia","SepiaEffect","Yt","SSAO","SSAOEffect","SMAA","SMAAEffect","to","FXAA","RampType","RampType2","RampEffect","rampType","rampStart","rampEnd","startColor","endColor","rampBias","rampGain","rampMask","rampInvert","params","RampShader","Uniform","Ramp","ro","useLoader","TextureLoader","textureSrc","SRGBColorSpace","RepeatWrapping","TextureEffect","texture","ToneMapping","ao","VignetteEffect","ShockWave","LUT3DEffect","lut","tetrahedralInterpolation","TiltShift","A","nt","TiltShiftEffect","ht","taper","start","end","samples","direction","TiltShiftShader","TiltShift2","wt","ASCIIEffect","font","characters","fontSize","cellSize","color","invert","uniforms","Texture","Color","fragment","charactersTextureUniform","canvas","SIZE","MAX_PER_ROW","CELL","CanvasTexture","NearestFilter","context","char","ASCII","WaterShader","WaterEffectImpl","factor","E","WaterEffect","N8AO","halfRes","screenSpaceRadius","quality","depthAwareUpsampling","aoRadius","aoSamples","denoiseSamples","denoiseRadius","distanceFalloff","renderMode","N8AOPostPass","applyProps","m"],"mappings":"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"}
package/package.json CHANGED
@@ -1,96 +1,69 @@
1
- {
2
- "name": "@react-three/postprocessing",
3
- "version": "2.18.0",
4
- "description": "postprocessing wrapper for React and @react-three/fiber",
5
- "keywords": [
6
- "postprocessing",
7
- "react",
8
- "three",
9
- "@react-three/fiber",
10
- "webgl",
11
- "3d"
12
- ],
13
- "license": "MIT",
14
- "type": "module",
15
- "main": "./dist/index.cjs",
16
- "module": "./dist/index.js",
17
- "exports": {
18
- "types": "./dist/index.d.ts",
19
- "require": "./dist/index.cjs",
20
- "import": "./dist/index.js"
21
- },
22
- "types": "./dist/index.d.ts",
23
- "sideEffects": false,
24
- "files": [
25
- "dist"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "git+https://github.com/pmndrs/react-postprocessing.git"
30
- },
31
- "lint-staged": {
32
- "*.{js,jsx,ts,tsx}": [
33
- "eslint --fix"
34
- ]
35
- },
36
- "scripts": {
37
- "prebuild": "rimraf dist",
38
- "build": "vite build && tsc --emitDeclarationOnly",
39
- "prepare": "yarn build",
40
- "eslint": "eslint . --fix --ext=js,ts,jsx,tsx",
41
- "eslint:ci": "eslint . --ext=js,ts,jsx,tsx",
42
- "test": "vitest run",
43
- "typecheck": "tsc --noEmit false --strict --jsx react",
44
- "release": "semantic-release",
45
- "storybook": "storybook dev -p 6006",
46
- "build-storybook": "storybook build"
47
- },
48
- "dependencies": {
49
- "buffer": "^6.0.3",
50
- "maath": "^0.6.0",
51
- "n8ao": "^1.6.6",
52
- "postprocessing": "^6.32.1",
53
- "three-stdlib": "^2.23.4"
54
- },
55
- "devDependencies": {
56
- "@react-three/drei": "^9.68.2",
57
- "@react-three/fiber": "^8.13.0",
58
- "@storybook/addon-essentials": "^7.0.10",
59
- "@storybook/addon-interactions": "^7.0.10",
60
- "@storybook/addon-links": "^7.0.10",
61
- "@storybook/blocks": "^7.0.10",
62
- "@storybook/react": "^7.0.10",
63
- "@storybook/react-vite": "^7.0.11",
64
- "@storybook/testing-library": "^0.0.14-next.2",
65
- "@types/react": "^18.2.0",
66
- "@types/react-dom": "^18.2.1",
67
- "@types/three": "^0.150.2",
68
- "@typescript-eslint/eslint-plugin": "^5.59.1",
69
- "@typescript-eslint/parser": "^5.59.1",
70
- "eslint": "^8.39.0",
71
- "eslint-config-prettier": "^8.8.0",
72
- "eslint-import-resolver-alias": "^1.1.2",
73
- "eslint-plugin-import": "^2.27.5",
74
- "eslint-plugin-prettier": "^4.2.1",
75
- "eslint-plugin-react": "^7.32.2",
76
- "eslint-plugin-react-hooks": "^4.6.0",
77
- "eslint-plugin-storybook": "^0.6.12",
78
- "husky": "^8.0.3",
79
- "lint-staged": "^13.2.2",
80
- "prettier": "^2.8.8",
81
- "react": "^18.2.0",
82
- "react-dom": "^18.2.0",
83
- "rimraf": "^5.0.0",
84
- "semantic-release": "^21.0.2",
85
- "storybook": "^7.0.10",
86
- "three": "^0.151.3",
87
- "typescript": "^5.0.4",
88
- "vite": "^4.3.5",
89
- "vitest": "^2.1.8"
90
- },
91
- "peerDependencies": {
92
- "@react-three/fiber": "^8.0",
93
- "react": "^18.0",
94
- "three": ">= 0.138.0"
95
- }
96
- }
1
+ {
2
+ "name": "@react-three/postprocessing",
3
+ "version": "3.0.0-rc.0",
4
+ "description": "postprocessing wrapper for React and @react-three/fiber",
5
+ "keywords": [
6
+ "postprocessing",
7
+ "react",
8
+ "three",
9
+ "@react-three/fiber",
10
+ "webgl",
11
+ "3d"
12
+ ],
13
+ "license": "MIT",
14
+ "files": [
15
+ "dist/*",
16
+ "src/*"
17
+ ],
18
+ "type": "module",
19
+ "main": "./dist/index.js",
20
+ "exports": "./dist/index.js",
21
+ "sideEffects": false,
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/pmndrs/react-postprocessing.git"
25
+ },
26
+ "scripts": {
27
+ "build": "vite build",
28
+ "eslint": "eslint . --fix --ext=js,ts,jsx,tsx",
29
+ "eslint:ci": "eslint . --ext=js,ts,jsx,tsx",
30
+ "test": "vitest run",
31
+ "typecheck": "tsc",
32
+ "release": "semantic-release"
33
+ },
34
+ "dependencies": {
35
+ "maath": "^0.6.0",
36
+ "n8ao": "^1.9.4",
37
+ "postprocessing": "^6.36.6",
38
+ "three-stdlib": "^2.35.7"
39
+ },
40
+ "devDependencies": {
41
+ "@react-three/fiber": "9.0.0-rc.4",
42
+ "@types/node": "^22.10.7",
43
+ "@types/react": "^19.0.2",
44
+ "@types/react-dom": "^19.0.2",
45
+ "@types/three": "^0.156.0",
46
+ "@typescript-eslint/eslint-plugin": "^5.59.1",
47
+ "@typescript-eslint/parser": "^5.59.1",
48
+ "eslint": "^8.39.0",
49
+ "eslint-config-prettier": "^8.8.0",
50
+ "eslint-import-resolver-alias": "^1.1.2",
51
+ "eslint-plugin-import": "^2.27.5",
52
+ "eslint-plugin-prettier": "^4.2.1",
53
+ "eslint-plugin-react": "^7.32.2",
54
+ "eslint-plugin-react-hooks": "^4.6.0",
55
+ "prettier": "^2.8.8",
56
+ "react": "^19.0.0",
57
+ "react-dom": "^19.0.0",
58
+ "semantic-release": "^21.0.2",
59
+ "three": "^0.156.0",
60
+ "typescript": "^5.0.4",
61
+ "vite": "^4.3.5",
62
+ "vitest": "^2.1.8"
63
+ },
64
+ "peerDependencies": {
65
+ "@react-three/fiber": "9.0.0-rc.4",
66
+ "react": "^19.0",
67
+ "three": ">= 0.156.0"
68
+ }
69
+ }
@@ -0,0 +1,126 @@
1
+ import * as React from 'react'
2
+ import * as THREE from 'three'
3
+ import { vi, describe, it, expect } from 'vitest'
4
+ import { extend, createRoot, act } from '@react-three/fiber'
5
+ import { EffectComposer } from './EffectComposer'
6
+ import { EffectComposer as EffectComposerImpl, RenderPass, Pass, Effect, EffectPass } from 'postprocessing'
7
+
8
+ // Let React know that we'll be testing effectful components
9
+ declare global {
10
+ var IS_REACT_ACT_ENVIRONMENT: boolean
11
+ }
12
+ global.IS_REACT_ACT_ENVIRONMENT = true
13
+
14
+ // Create virtual R3F root for testing
15
+ extend(THREE as any)
16
+ const root = createRoot({
17
+ style: {} as CSSStyleDeclaration,
18
+ addEventListener: (() => {}) as any,
19
+ removeEventListener: (() => {}) as any,
20
+ width: 1280,
21
+ height: 800,
22
+ clientWidth: 1280,
23
+ clientHeight: 800,
24
+ getContext: (() =>
25
+ new Proxy(
26
+ {},
27
+ {
28
+ get(_target, prop) {
29
+ switch (prop) {
30
+ case 'getParameter':
31
+ return () => 'WebGL 2' // GL_VERSION
32
+ case 'getExtension':
33
+ return () => ({}) // EXT_blend_minmax
34
+ case 'getContextAttributes':
35
+ return () => ({ alpha: true })
36
+ case 'getShaderPrecisionFormat':
37
+ return () => ({ rangeMin: 1, rangeMax: 1, precision: 1 })
38
+ default:
39
+ return () => {}
40
+ }
41
+ },
42
+ }
43
+ )) as any,
44
+ } satisfies Partial<HTMLCanvasElement> as HTMLCanvasElement)
45
+ root.configure({ frameloop: 'never' })
46
+
47
+ const EFFECT_SHADER = 'mainImage() {}'
48
+
49
+ describe('EffectComposer', () => {
50
+ it('should merge effects together', async () => {
51
+ const composerRef = React.createRef<EffectComposerImpl>()
52
+
53
+ const effectA = new Effect('A', EFFECT_SHADER)
54
+ const effectB = new Effect('B', EFFECT_SHADER)
55
+ const effectC = new Effect('C', EFFECT_SHADER)
56
+ const passA = new Pass()
57
+ const passB = new Pass()
58
+
59
+ // Forward order
60
+ await act(async () =>
61
+ root.render(
62
+ <EffectComposer ref={composerRef}>
63
+ {/* EffectPass(effectA, effectB) */}
64
+ <primitive object={effectA} />
65
+ <primitive object={effectB} />
66
+ {/* PassA */}
67
+ <primitive object={passA} />
68
+ {/* EffectPass(effectC) */}
69
+ <primitive object={effectC} />
70
+ {/* PassB */}
71
+ <primitive object={passB} />
72
+ </EffectComposer>
73
+ )
74
+ )
75
+ expect(composerRef.current!.passes.map((p) => p.constructor)).toStrictEqual([
76
+ RenderPass,
77
+ EffectPass,
78
+ Pass,
79
+ EffectPass,
80
+ Pass,
81
+ ])
82
+ // @ts-expect-error
83
+ expect((composerRef.current!.passes[1] as EffectPass).effects).toStrictEqual([effectA, effectB])
84
+ expect(composerRef.current!.passes[2]).toBe(passA)
85
+ // @ts-expect-error
86
+ expect((composerRef.current!.passes[3] as EffectPass).effects).toStrictEqual([effectC])
87
+ expect(composerRef.current!.passes[4]).toBe(passB)
88
+
89
+ // NOTE: instance children ordering is unstable until R3F v9, so we remount from scratch
90
+ await act(async () => root.render(null))
91
+
92
+ // Reverse order
93
+ await act(async () =>
94
+ root.render(
95
+ <EffectComposer ref={composerRef}>
96
+ {/* PassB */}
97
+ <primitive object={passB} />
98
+ {/* EffectPass(effectC) */}
99
+ <primitive object={effectC} />
100
+ {/* PassA */}
101
+ <primitive object={passA} />
102
+ {/* EffectPass(effectB, effectA) */}
103
+ <primitive object={effectB} />
104
+ <primitive object={effectA} />
105
+ </EffectComposer>
106
+ )
107
+ )
108
+ expect(composerRef.current!.passes.map((p) => p.constructor)).toStrictEqual([
109
+ RenderPass,
110
+ Pass,
111
+ EffectPass,
112
+ Pass,
113
+ EffectPass,
114
+ ])
115
+ expect(composerRef.current!.passes[1]).toBe(passB)
116
+ // @ts-expect-error
117
+ expect((composerRef.current!.passes[2] as EffectPass).effects).toStrictEqual([effectC])
118
+ expect(composerRef.current!.passes[3]).toBe(passA)
119
+ // @ts-expect-error
120
+ expect((composerRef.current!.passes[4] as EffectPass).effects).toStrictEqual([effectB, effectA])
121
+ })
122
+
123
+ it.skip('should split convolution effects', async () => {
124
+ await act(async () => root.render(null))
125
+ })
126
+ })
@@ -0,0 +1,202 @@
1
+ import type { TextureDataType, Group } from 'three'
2
+ import { HalfFloatType, NoToneMapping } from 'three'
3
+ import {
4
+ type JSX,
5
+ memo,
6
+ forwardRef,
7
+ useMemo,
8
+ useEffect,
9
+ useLayoutEffect,
10
+ createContext,
11
+ useRef,
12
+ useImperativeHandle,
13
+ } from 'react'
14
+ import { useThree, useFrame, type Instance } from '@react-three/fiber'
15
+ import {
16
+ EffectComposer as EffectComposerImpl,
17
+ RenderPass,
18
+ EffectPass,
19
+ NormalPass,
20
+ DepthDownsamplingPass,
21
+ Effect,
22
+ Pass,
23
+ EffectAttribute,
24
+ } from 'postprocessing'
25
+ import { isWebGL2Available } from 'three-stdlib'
26
+
27
+ export const EffectComposerContext = /* @__PURE__ */ createContext<{
28
+ composer: EffectComposerImpl
29
+ normalPass: NormalPass | null
30
+ downSamplingPass: DepthDownsamplingPass | null
31
+ camera: THREE.Camera
32
+ scene: THREE.Scene
33
+ resolutionScale?: number
34
+ }>(null!)
35
+
36
+ export type EffectComposerProps = {
37
+ enabled?: boolean
38
+ children: JSX.Element | JSX.Element[]
39
+ depthBuffer?: boolean
40
+ /** Only used for SSGI currently, leave it disabled for everything else unless it's needed */
41
+ enableNormalPass?: boolean
42
+ stencilBuffer?: boolean
43
+ autoClear?: boolean
44
+ resolutionScale?: number
45
+ multisampling?: number
46
+ frameBufferType?: TextureDataType
47
+ renderPriority?: number
48
+ camera?: THREE.Camera
49
+ scene?: THREE.Scene
50
+ }
51
+
52
+ const isConvolution = (effect: Effect): boolean =>
53
+ (effect.getAttributes() & EffectAttribute.CONVOLUTION) === EffectAttribute.CONVOLUTION
54
+
55
+ export const EffectComposer = /* @__PURE__ */ memo(
56
+ /* @__PURE__ */ forwardRef<EffectComposerImpl, EffectComposerProps>(
57
+ (
58
+ {
59
+ children,
60
+ camera: _camera,
61
+ scene: _scene,
62
+ resolutionScale,
63
+ enabled = true,
64
+ renderPriority = 1,
65
+ autoClear = true,
66
+ depthBuffer,
67
+ enableNormalPass,
68
+ stencilBuffer,
69
+ multisampling = 8,
70
+ frameBufferType = HalfFloatType,
71
+ },
72
+ ref
73
+ ) => {
74
+ const { gl, scene: defaultScene, camera: defaultCamera, size } = useThree()
75
+ const scene = _scene || defaultScene
76
+ const camera = _camera || defaultCamera
77
+
78
+ const [composer, normalPass, downSamplingPass] = useMemo(() => {
79
+ const webGL2Available = isWebGL2Available()
80
+ // Initialize composer
81
+ const effectComposer = new EffectComposerImpl(gl, {
82
+ depthBuffer,
83
+ stencilBuffer,
84
+ multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
85
+ frameBufferType,
86
+ })
87
+
88
+ // Add render pass
89
+ effectComposer.addPass(new RenderPass(scene, camera))
90
+
91
+ // Create normal pass
92
+ let downSamplingPass = null
93
+ let normalPass = null
94
+ if (enableNormalPass) {
95
+ normalPass = new NormalPass(scene, camera)
96
+ normalPass.enabled = false
97
+ effectComposer.addPass(normalPass)
98
+ if (resolutionScale !== undefined && webGL2Available) {
99
+ downSamplingPass = new DepthDownsamplingPass({ normalBuffer: normalPass.texture, resolutionScale })
100
+ downSamplingPass.enabled = false
101
+ effectComposer.addPass(downSamplingPass)
102
+ }
103
+ }
104
+
105
+ return [effectComposer, normalPass, downSamplingPass]
106
+ }, [
107
+ camera,
108
+ gl,
109
+ depthBuffer,
110
+ stencilBuffer,
111
+ multisampling,
112
+ frameBufferType,
113
+ scene,
114
+ enableNormalPass,
115
+ resolutionScale,
116
+ ])
117
+
118
+ useEffect(() => composer?.setSize(size.width, size.height), [composer, size])
119
+ useFrame(
120
+ (_, delta) => {
121
+ if (enabled) {
122
+ const currentAutoClear = gl.autoClear
123
+ gl.autoClear = autoClear
124
+ if (stencilBuffer && !autoClear) gl.clearStencil()
125
+ composer.render(delta)
126
+ gl.autoClear = currentAutoClear
127
+ }
128
+ },
129
+ enabled ? renderPriority : 0
130
+ )
131
+
132
+ const group = useRef<Group>(null!)
133
+ useLayoutEffect(() => {
134
+ const passes: Pass[] = []
135
+
136
+ // TODO: rewrite all of this with R3F v9
137
+ const groupInstance = (group.current as Group & { __r3f: Instance<Group> }).__r3f
138
+
139
+ if (groupInstance && composer) {
140
+ const children = groupInstance.children
141
+
142
+ for (let i = 0; i < children.length; i++) {
143
+ const child = children[i].object
144
+
145
+ if (child instanceof Effect) {
146
+ const effects: Effect[] = [child]
147
+
148
+ if (!isConvolution(child)) {
149
+ let next: unknown = null
150
+ while ((next = children[i + 1]?.object) instanceof Effect) {
151
+ if (isConvolution(next)) break
152
+ effects.push(next)
153
+ i++
154
+ }
155
+ }
156
+
157
+ const pass = new EffectPass(camera, ...effects)
158
+ passes.push(pass)
159
+ } else if (child instanceof Pass) {
160
+ passes.push(child)
161
+ }
162
+ }
163
+
164
+ for (const pass of passes) composer?.addPass(pass)
165
+
166
+ if (normalPass) normalPass.enabled = true
167
+ if (downSamplingPass) downSamplingPass.enabled = true
168
+ }
169
+
170
+ return () => {
171
+ for (const pass of passes) composer?.removePass(pass)
172
+ if (normalPass) normalPass.enabled = false
173
+ if (downSamplingPass) downSamplingPass.enabled = false
174
+ }
175
+ }, [composer, children, camera, normalPass, downSamplingPass])
176
+
177
+ // Disable tone mapping because threejs disallows tonemapping on render targets
178
+ useEffect(() => {
179
+ const currentTonemapping = gl.toneMapping
180
+ gl.toneMapping = NoToneMapping
181
+ return () => {
182
+ gl.toneMapping = currentTonemapping
183
+ }
184
+ }, [gl])
185
+
186
+ // Memoize state, otherwise it would trigger all consumers on every render
187
+ const state = useMemo(
188
+ () => ({ composer, normalPass, downSamplingPass, resolutionScale, camera, scene }),
189
+ [composer, normalPass, downSamplingPass, resolutionScale, camera, scene]
190
+ )
191
+
192
+ // Expose the composer
193
+ useImperativeHandle(ref, () => composer, [composer])
194
+
195
+ return (
196
+ <EffectComposerContext.Provider value={state}>
197
+ <group ref={group}>{children}</group>
198
+ </EffectComposerContext.Provider>
199
+ )
200
+ }
201
+ )
202
+ )
@@ -0,0 +1,46 @@
1
+ import * as THREE from 'three'
2
+ import React, { createContext, useState, useContext, useEffect, useRef, useMemo } from 'react'
3
+ import { type ThreeElements } from '@react-three/fiber'
4
+
5
+ export type Api = {
6
+ selected: THREE.Object3D[]
7
+ select: React.Dispatch<React.SetStateAction<THREE.Object3D[]>>
8
+ enabled: boolean
9
+ }
10
+ export type SelectApi = Omit<ThreeElements['group'], 'ref'> & {
11
+ enabled?: boolean
12
+ }
13
+
14
+ export const selectionContext = /* @__PURE__ */ createContext<Api | null>(null)
15
+
16
+ export function Selection({ children, enabled = true }: { enabled?: boolean; children: React.ReactNode }) {
17
+ const [selected, select] = useState<THREE.Object3D[]>([])
18
+ const value = useMemo(() => ({ selected, select, enabled }), [selected, select, enabled])
19
+ return <selectionContext.Provider value={value}>{children}</selectionContext.Provider>
20
+ }
21
+
22
+ export function Select({ enabled = false, children, ...props }: SelectApi) {
23
+ const group = useRef<THREE.Group>(null!)
24
+ const api = useContext(selectionContext)
25
+ useEffect(() => {
26
+ if (api && enabled) {
27
+ let changed = false
28
+ const current: THREE.Object3D[] = []
29
+ group.current.traverse((o) => {
30
+ o.type === 'Mesh' && current.push(o)
31
+ if (api.selected.indexOf(o) === -1) changed = true
32
+ })
33
+ if (changed) {
34
+ api.select((state) => [...state, ...current])
35
+ return () => {
36
+ api.select((state) => state.filter((selected) => !current.includes(selected)))
37
+ }
38
+ }
39
+ }
40
+ }, [enabled, children, api])
41
+ return (
42
+ <group ref={group} {...props}>
43
+ {children}
44
+ </group>
45
+ )
46
+ }