threepipe
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import {
  2. _testFinish, _testStart,
  3. AssetExporterPlugin,
  4. GBufferPlugin,
  5. IObject3D,
  6. LoadingScreenPlugin,
  7. Object3DWidgetsPlugin,
  8. PickingPlugin,
  9. RenderTargetPreviewPlugin,
  10. SSAAPlugin,
  11. ThreeViewer,
  12. } from 'threepipe'
  13. import {TweakpaneUiPlugin} from '@threepipe/plugin-tweakpane'
  14. // @ts-expect-error todo fix
  15. import {BloomPlugin, SSGIPlugin, SSReflectionPlugin, TemporalAAPlugin, OutlinePlugin} from '@threepipe/webgi-plugins'
  16. async function init() {
  17. const viewer = new ThreeViewer({
  18. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  19. msaa: true,
  20. rgbm: true,
  21. zPrepass: false,
  22. renderScale: 'auto',
  23. maxRenderScale: 1.5,
  24. dropzone: {
  25. addOptions: {
  26. disposeSceneObjects: true,
  27. },
  28. },
  29. plugins: [LoadingScreenPlugin, GBufferPlugin, BloomPlugin, PickingPlugin, SSAAPlugin, TemporalAAPlugin, OutlinePlugin, Object3DWidgetsPlugin, AssetExporterPlugin, new SSReflectionPlugin(ssrInline), SSGIPlugin],
  30. // rgbm: false,
  31. })
  32. viewer.renderManager.stableNoise = true
  33. viewer.getPlugin(SSReflectionPlugin)!.enabled = false
  34. const ui = viewer.addPluginSync(new TweakpaneUiPlugin(true))
  35. const model = await viewer.load<IObject3D>('https://asset-samples.threepipe.org/demos/sponza-ssgi-ssr.glb')
  36. viewer.scene.envMapIntensity = 0.0
  37. viewer.getPlugin(SSGIPlugin)!.pass.stepCount = 8
  38. ui.setupPluginUi(SSGIPlugin)
  39. ui.setupPluginUi(SSReflectionPlugin)
  40. model?.traverse((obj) => {
  41. if (obj.isLight) {
  42. ui.appendChild(obj.uiConfig)
  43. }
  44. })
  45. ui.setupPluginUi(PickingPlugin)
  46. ui.setupPluginUi(BloomPlugin)
  47. ui.setupPluginUi(TemporalAAPlugin)
  48. const targetPreview = await viewer.addPlugin(RenderTargetPreviewPlugin)
  49. targetPreview.addTarget(() => viewer.getPlugin(SSGIPlugin)!.target, 'ssgi')
  50. !ssrInline && targetPreview.addTarget(() => viewer.getPlugin(SSReflectionPlugin)!.target, 'ssr')
  51. }
  52. // todo: inline = false has a bug, not clearing maybe?
  53. const ssrInline = true
  54. _testStart()
  55. init().then(_testFinish)