threepipe
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

ViewerRenderManager.ts 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {IRenderTarget, RenderManager} from '../rendering'
  2. import {HalfFloatType, LinearMipMapLinearFilter, NoColorSpace, RGBM16ColorSpace, UnsignedByteType} from 'three'
  3. import {IRenderManagerOptions} from '../core'
  4. import {ExtendedRenderPass, ScreenPass, TViewerScreenShader} from '../postprocessing'
  5. import {uiFolderContainer} from 'uiconfig.js'
  6. export interface ViewerRenderManagerOptions extends IRenderManagerOptions {
  7. rgbm?: boolean,
  8. msaa?: boolean | number,
  9. depthBuffer?: boolean,
  10. zPrepass?: boolean,
  11. screenShader?: TViewerScreenShader
  12. }
  13. @uiFolderContainer('Render Manager')
  14. export class ViewerRenderManager extends RenderManager {
  15. readonly rgbm: boolean
  16. readonly msaa: boolean | number
  17. readonly depthBuffer: boolean
  18. readonly zPrepass: boolean
  19. readonly renderPass: ExtendedRenderPass
  20. readonly screenPass: ScreenPass
  21. constructor({rgbm = true, msaa = false, depthBuffer = false, ...options}: ViewerRenderManagerOptions) {
  22. super({
  23. ...options,
  24. targetOptions: {
  25. samples: msaa ? typeof msaa !== 'number' ? 4 : msaa : 0,
  26. colorSpace: rgbm ? RGBM16ColorSpace : NoColorSpace,
  27. type: rgbm ? UnsignedByteType : HalfFloatType,
  28. depthBuffer: depthBuffer,
  29. generateMipmaps: msaa ? true : undefined, // todo: hack for now, fix blurTransmissionTarget in ExtendedRenderPass
  30. minFilter: msaa ? LinearMipMapLinearFilter : undefined, // todo: hack for now, fix blurTransmissionTarget in ExtendedRenderPass
  31. },
  32. })
  33. this.rgbm = rgbm
  34. this.msaa = msaa && this.isWebGL2
  35. this.depthBuffer = depthBuffer
  36. this.zPrepass = options.zPrepass || false
  37. let doTransmissionFix = true // const for debugging, todo could be made into a static prop maybe?
  38. if (!this._renderer.userData) {
  39. doTransmissionFix = false
  40. this._renderer.userData = {__isIWebGLRenderer: true}
  41. }
  42. this._renderer.userData.renderTransmissionPass = !doTransmissionFix // hack. used in WebGLRenderer.js
  43. this.renderPass = new ExtendedRenderPass(this)
  44. this.screenPass = new ScreenPass(options.screenShader || '')
  45. this.registerPass(this.renderPass)
  46. this.registerPass(this.screenPass)
  47. }
  48. /**
  49. * Reference to the gbuffer target, if it exists. This can be set by plugins like {@link DepthBufferPlugin}, {@link GBufferPlugin}
  50. */
  51. gbufferTarget: IRenderTarget | undefined
  52. }