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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import {_testFinish, IObject3D, LoadingScreenPlugin, RenderTargetPreviewPlugin, ThreeViewer} from 'threepipe'
  2. import {TweakpaneUiPlugin} from '@threepipe/plugin-tweakpane'
  3. const viewer = new ThreeViewer({
  4. canvas: document.getElementById('mcanvas') as HTMLCanvasElement,
  5. msaa: true,
  6. rgbm: true,
  7. zPrepass: true, // This example shows a bug in zPrepass
  8. // forceZPrepass: true,
  9. plugins: [LoadingScreenPlugin],
  10. })
  11. async function init() {
  12. const targetPreview = viewer.addPluginSync(RenderTargetPreviewPlugin)
  13. targetPreview.addTarget(()=>viewer.renderManager.composerTarget, 'composer-1', false, false)
  14. viewer.renderManager.renderPass.preserveTransparentTarget = true
  15. targetPreview.addTarget(()=>viewer.renderManager.renderPass.transparentTarget, 'transparent', true, true)
  16. targetPreview.addTarget(()=>viewer.renderManager.composerTarget2, 'composer-2', false, false)
  17. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr')
  18. const [model, model2] = await Promise.all([
  19. viewer.load<IObject3D>('https://threejs.org/examples/models/gltf/IridescenceLamp.glb', {
  20. autoCenter: true,
  21. autoScale: true,
  22. }),
  23. viewer.load<IObject3D>('https://threejs.org/examples/models/gltf/IridescentDishWithOlives.glb', {
  24. autoCenter: true,
  25. autoScale: true,
  26. }),
  27. ])
  28. if (!model || !model2) {
  29. console.error('model not loaded')
  30. return
  31. }
  32. model.position.x = -1
  33. model2.position.x = 1
  34. model2.position.y = -1.2
  35. const ui = viewer.addPluginSync(new TweakpaneUiPlugin(false))
  36. const m1 = model?.getObjectByName('lamp_transmission')
  37. const m2 = model2?.getObjectByName('glassCover')
  38. const materials = [...m1?.materials || [], ...m2?.materials || []]
  39. for (const material of materials) {
  40. const config = material.uiConfig
  41. if (!config) continue
  42. ui.appendChild(config)
  43. }
  44. }
  45. init().finally(_testFinish)