threepipe
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

script.ts 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import {
  2. _testFinish,
  3. EasingFunctions,
  4. GBufferPlugin,
  5. IObject3D,
  6. LoadingScreenPlugin,
  7. PickingPlugin,
  8. PopmotionPlugin,
  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, SSReflectionPlugin, TemporalAAPlugin, VelocityBufferPlugin} from '@threepipe/webgi-plugins'
  16. async function init() {
  17. const viewer = new ThreeViewer({
  18. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  19. msaa: false,
  20. renderScale: 1,
  21. dropzone: {
  22. addOptions: {
  23. disposeSceneObjects: true,
  24. },
  25. },
  26. plugins: [LoadingScreenPlugin, GBufferPlugin, BloomPlugin, SSAAPlugin, SSReflectionPlugin],
  27. // rgbm: false,
  28. })
  29. const taa = viewer.addPluginSync(new TemporalAAPlugin())
  30. const velocityBuffer = viewer.addPluginSync(new VelocityBufferPlugin())
  31. console.log(taa)
  32. console.log(velocityBuffer)
  33. const ui = viewer.addPluginSync(new TweakpaneUiPlugin(true))
  34. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr', {
  35. setBackground: false,
  36. })
  37. const model = await viewer.load<IObject3D>('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', {
  38. autoCenter: true,
  39. autoScale: true,
  40. })
  41. if (model) {
  42. const popmotion = viewer.getOrAddPluginSync(PopmotionPlugin)
  43. popmotion.animate({
  44. from: 0,
  45. to: 1,
  46. repeat: Infinity,
  47. duration: 10000,
  48. ease: EasingFunctions.linear,
  49. onUpdate: (v) => {
  50. // Set camera position xz in a circle around the target
  51. const angle = v * Math.PI * 2 + Math.PI / 2
  52. const radius = 1.5
  53. model.position.set(Math.cos(angle) * radius, Math.sin(v * Math.PI * 4), Math.sin(angle) * radius)
  54. model.setDirty()
  55. viewer.setDirty() // since camera is not in the scene
  56. },
  57. })
  58. } else {
  59. alert('Unable to load 3d Model')
  60. }
  61. ui.setupPluginUi(taa)
  62. ui.setupPluginUi(velocityBuffer)
  63. ui.setupPluginUi(PickingPlugin)
  64. ui.setupPluginUi(BloomPlugin)
  65. ui.setupPluginUi(SSReflectionPlugin)
  66. const rt = viewer.addPluginSync(RenderTargetPreviewPlugin)
  67. rt.addTarget(()=>velocityBuffer.target, 'velocityBuffer', true, true, true)
  68. }
  69. init().then(_testFinish)