|
|
|
|
|
|
|
|
@onChange(ThreeGpuPathTracerPlugin.prototype._enableChange) |
|
|
@onChange(ThreeGpuPathTracerPlugin.prototype._enableChange) |
|
|
enabled = true |
|
|
enabled = true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// public ptMaterial: any |
|
|
// public ptMaterial: any |
|
|
// public ptGenerator: any |
|
|
// public ptGenerator: any |
|
|
// public sceneInfo: any |
|
|
// public sceneInfo: any |
|
|
|
|
|
|
|
|
@uiSlider('samplesPerFrame', [1, 5], 1) |
|
|
@uiSlider('samplesPerFrame', [1, 5], 1) |
|
|
samplesPerFrame = 1 |
|
|
samplesPerFrame = 1 |
|
|
|
|
|
|
|
|
@uiConfig() |
|
|
|
|
|
|
|
|
@uiConfig(undefined, {expanded: true}) |
|
|
@serialize() |
|
|
@serialize() |
|
|
tracer: WebGLPathTracer | undefined |
|
|
tracer: WebGLPathTracer | undefined |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private async _enableChange() { |
|
|
private async _enableChange() { |
|
|
if (this.enabled) this.refreshScene() |
|
|
|
|
|
|
|
|
if (!this.isDisabled()) this.refreshScene() |
|
|
|
|
|
|
|
|
if (this._viewer) { |
|
|
|
|
|
this._viewer.renderManager.defaultRenderToScreen = !this.enabled |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
this.setDirty() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
setDirty() { |
|
|
|
|
|
if (!this._viewer) return |
|
|
|
|
|
|
|
|
this._viewer?.setDirty() |
|
|
|
|
|
|
|
|
this._viewer.renderManager.defaultRenderToScreen = this.isDisabled() |
|
|
|
|
|
this._viewer.setDirty() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// todo: onremove and ondispose (dispose sceneInfo in that and remove event listeners) |
|
|
// todo: onremove and ondispose (dispose sceneInfo in that and remove event listeners) |
|
|
|
|
|
|
|
|
this.refreshScene() |
|
|
this.refreshScene() |
|
|
}) |
|
|
}) |
|
|
viewer.scene.addEventListener('materialUpdate', () => { |
|
|
viewer.scene.addEventListener('materialUpdate', () => { |
|
|
if (!this.enabled || !this.tracer || this._refreshing) return |
|
|
|
|
|
|
|
|
if (this.isDisabled() || !this.tracer || this._refreshing) return |
|
|
this.tracer.updateMaterials() // todo do post frame? |
|
|
this.tracer.updateMaterials() // todo do post frame? |
|
|
this.reset() |
|
|
this.reset() |
|
|
}) |
|
|
}) |
|
|
viewer.scene.addEventListener('environmentChanged', () => { |
|
|
viewer.scene.addEventListener('environmentChanged', () => { |
|
|
if (!this.enabled || !this.tracer || this._refreshing) return |
|
|
|
|
|
|
|
|
if (this.isDisabled() || !this.tracer || this._refreshing) return |
|
|
this.tracer.updateEnvironment() // todo do post frame? |
|
|
this.tracer.updateEnvironment() // todo do post frame? |
|
|
this.reset() |
|
|
this.reset() |
|
|
}) |
|
|
}) |
|
|
viewer.renderManager.addEventListener('resize', () => { |
|
|
viewer.renderManager.addEventListener('resize', () => { |
|
|
if (!this.enabled || !this.tracer || this._refreshing) return |
|
|
|
|
|
|
|
|
if (this.isDisabled() || !this.tracer || this._refreshing) return |
|
|
// this.ptRenderer.setSize(viewer.renderer.renderSize.width, viewer.renderer.renderSize.height) |
|
|
// this.ptRenderer.setSize(viewer.renderer.renderSize.width, viewer.renderer.renderSize.height) |
|
|
// if (this._refreshing) return |
|
|
// if (this._refreshing) return |
|
|
// console.log('resize') |
|
|
// console.log('resize') |
|
|
|
|
|
|
|
|
this.reset() |
|
|
this.reset() |
|
|
}) |
|
|
}) |
|
|
viewer.scene.mainCamera.addEventListener('update', () => { |
|
|
viewer.scene.mainCamera.addEventListener('update', () => { |
|
|
if (!this.enabled || !this.tracer || this._refreshing) return |
|
|
|
|
|
|
|
|
if (this.isDisabled() || !this.tracer || this._refreshing) return |
|
|
this.tracer.updateCamera()// todo do post frame? |
|
|
this.tracer.updateCamera()// todo do post frame? |
|
|
this.reset() |
|
|
this.reset() |
|
|
}) |
|
|
}) |
|
|
viewer.addEventListener('preFrame', () => { |
|
|
viewer.addEventListener('preFrame', () => { |
|
|
if (!this.enabled || this._refreshing || !this._viewer || !this.tracer) return |
|
|
|
|
|
|
|
|
if (this.isDisabled() || this._refreshing || !this._viewer || !this.tracer) return |
|
|
// if (viewer.getPlugin(ProgressivePlugin)?.isConverged(true)) { |
|
|
// if (viewer.getPlugin(ProgressivePlugin)?.isConverged(true)) { |
|
|
|
|
|
|
|
|
// todo on no rasterize don't render rasterize pipeline |
|
|
// todo on no rasterize don't render rasterize pipeline |
|
|
|
|
|
|
|
|
// private _modelRoot = ()=>this._viewer?.scene.modelRoot.modelObject |
|
|
// private _modelRoot = ()=>this._viewer?.scene.modelRoot.modelObject |
|
|
private async _refreshScene() { |
|
|
private async _refreshScene() { |
|
|
if (!this._viewer) return |
|
|
if (!this._viewer) return |
|
|
if (!this.enabled || !this.tracer) return |
|
|
|
|
|
|
|
|
if (this.isDisabled() || !this.tracer) return |
|
|
if (!this._sceneNeedsRefresh) return |
|
|
if (!this._sceneNeedsRefresh) return |
|
|
|
|
|
|
|
|
if (this._refreshing) { |
|
|
if (this._refreshing) { |
|
|
|
|
|
|
|
|
// private _diamondMaterialKey = (mat: any)=>mat.color.getHexString() + mat.refractiveIndex |
|
|
// private _diamondMaterialKey = (mat: any)=>mat.color.getHexString() + mat.refractiveIndex |
|
|
|
|
|
|
|
|
reset() { |
|
|
reset() { |
|
|
if (!this.enabled || !this.tracer) return |
|
|
|
|
|
|
|
|
if (this.isDisabled() || !this.tracer) return |
|
|
this.tracer.reset() |
|
|
this.tracer.reset() |
|
|
this._viewer?.setDirty() |
|
|
|
|
|
|
|
|
this.setDirty() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
dispose() { |
|
|
dispose() { |