threepipe
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

script.ts 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import {
  2. _testFinish,
  3. ProgressivePlugin,
  4. RenderTargetPreviewPlugin,
  5. SSAOPlugin,
  6. ThreeViewer,
  7. UnsignedByteType,
  8. } from 'threepipe'
  9. import {TweakpaneUiPlugin} from '@threepipe/plugin-tweakpane'
  10. const viewer = new ThreeViewer({
  11. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  12. msaa: true,
  13. plugins: [ProgressivePlugin],
  14. tonemap: false,
  15. })
  16. async function init() {
  17. const ssaoPlugin = viewer.addPluginSync(new SSAOPlugin(UnsignedByteType, 1))
  18. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr')
  19. await viewer.load('https://threejs.org/examples/models/gltf/kira.glb', {
  20. autoCenter: true,
  21. autoScale: true,
  22. })
  23. const ssaoTarget = ssaoPlugin.target
  24. if (!ssaoTarget) {
  25. throw new Error('ssaoPlugin.target returned undefined')
  26. }
  27. // to render ssao buffer to screen, uncomment this line:
  28. // viewer.renderManager.screenPass.overrideReadBuffer = ssaoTarget
  29. // or set a custom pipeline
  30. // viewer.renderManager.autoBuildPipeline = false
  31. // viewer.renderManager.pipeline = ['gbuffer', 'ssao', 'screen']
  32. const targetPreview = await viewer.addPlugin(RenderTargetPreviewPlugin)
  33. targetPreview.addTarget(()=>ssaoTarget, 'ssao', false, true, true, (s)=>`${s} = vec4(${s}.r);`)
  34. const ui = viewer.addPluginSync(TweakpaneUiPlugin, true)
  35. ui.setupPluginUi(SSAOPlugin)
  36. }
  37. init().finally(_testFinish)