threepipe
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

ViewerRenderManager.ts 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import {IRenderTarget, RenderManager} from '../rendering'
  2. import {HalfFloatType, 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,
  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
  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 ? 4 : 0,
  26. colorSpace: rgbm ? RGBM16ColorSpace : NoColorSpace,
  27. type: rgbm ? UnsignedByteType : HalfFloatType,
  28. depthBuffer: depthBuffer,
  29. },
  30. })
  31. this.rgbm = rgbm
  32. this.msaa = msaa && this.isWebGL2
  33. this.depthBuffer = depthBuffer
  34. this.zPrepass = options.zPrepass || false
  35. let doTransmissionFix = true // const for debugging, todo could be made into a static prop maybe?
  36. if (!this._renderer.userData) {
  37. doTransmissionFix = false
  38. this._renderer.userData = {__isIWebGLRenderer: true}
  39. }
  40. this._renderer.userData.renderTransmissionPass = !doTransmissionFix // hack. used in WebGLRenderer.js
  41. this.renderPass = new ExtendedRenderPass(this)
  42. this.screenPass = new ScreenPass(options.screenShader || '')
  43. this.registerPass(this.renderPass)
  44. this.registerPass(this.screenPass)
  45. }
  46. /**
  47. * Reference to the gbuffer target, if it exists. This can be set by plugins like {@link DepthBufferPlugin}
  48. */
  49. gbufferTarget: IRenderTarget | undefined
  50. }