mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-30 03:01:54 +00:00
[3d] performance improve (#3131)
This commit is contained in:
@@ -38,6 +38,7 @@ class Load3d {
|
|||||||
|
|
||||||
STATUS_MOUSE_ON_NODE: boolean
|
STATUS_MOUSE_ON_NODE: boolean
|
||||||
STATUS_MOUSE_ON_SCENE: boolean
|
STATUS_MOUSE_ON_SCENE: boolean
|
||||||
|
INITIAL_RENDER_DONE: boolean = false
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
container: Element | HTMLElement,
|
container: Element | HTMLElement,
|
||||||
@@ -132,6 +133,33 @@ class Load3d {
|
|||||||
|
|
||||||
this.handleResize()
|
this.handleResize()
|
||||||
this.startAnimation()
|
this.startAnimation()
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.forceRender()
|
||||||
|
}, 100)
|
||||||
|
}
|
||||||
|
|
||||||
|
forceRender(): void {
|
||||||
|
const delta = this.clock.getDelta()
|
||||||
|
this.viewHelperManager.update(delta)
|
||||||
|
this.controlsManager.update()
|
||||||
|
|
||||||
|
this.renderer.clear()
|
||||||
|
this.sceneManager.renderBackground()
|
||||||
|
this.renderer.render(
|
||||||
|
this.sceneManager.scene,
|
||||||
|
this.cameraManager.activeCamera
|
||||||
|
)
|
||||||
|
|
||||||
|
if (this.viewHelperManager.viewHelper.render) {
|
||||||
|
this.viewHelperManager.viewHelper.render(this.renderer)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.previewManager.showPreview) {
|
||||||
|
this.previewManager.updatePreviewRender()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.INITIAL_RENDER_DONE = true
|
||||||
}
|
}
|
||||||
|
|
||||||
private getActiveCamera(): THREE.Camera {
|
private getActiveCamera(): THREE.Camera {
|
||||||
@@ -150,6 +178,10 @@ class Load3d {
|
|||||||
const animate = () => {
|
const animate = () => {
|
||||||
this.animationFrameId = requestAnimationFrame(animate)
|
this.animationFrameId = requestAnimationFrame(animate)
|
||||||
|
|
||||||
|
if (!this.isActive()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (this.previewManager.showPreview) {
|
if (this.previewManager.showPreview) {
|
||||||
this.previewManager.updatePreviewRender()
|
this.previewManager.updatePreviewRender()
|
||||||
}
|
}
|
||||||
@@ -182,15 +214,16 @@ class Load3d {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isActive(): boolean {
|
isActive(): boolean {
|
||||||
return this.STATUS_MOUSE_ON_NODE || this.STATUS_MOUSE_ON_SCENE
|
return (
|
||||||
|
this.STATUS_MOUSE_ON_NODE ||
|
||||||
|
this.STATUS_MOUSE_ON_SCENE ||
|
||||||
|
!this.INITIAL_RENDER_DONE
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
setBackgroundColor(color: string): void {
|
setBackgroundColor(color: string): void {
|
||||||
this.sceneManager.setBackgroundColor(color)
|
this.sceneManager.setBackgroundColor(color)
|
||||||
this.renderer.render(
|
this.forceRender()
|
||||||
this.sceneManager.scene,
|
|
||||||
this.cameraManager.activeCamera
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async setBackgroundImage(uploadPath: string): Promise<void> {
|
async setBackgroundImage(uploadPath: string): Promise<void> {
|
||||||
@@ -201,6 +234,8 @@ class Load3d {
|
|||||||
this.sceneManager.backgroundTexture
|
this.sceneManager.backgroundTexture
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
removeBackgroundImage(): void {
|
removeBackgroundImage(): void {
|
||||||
@@ -212,10 +247,13 @@ class Load3d {
|
|||||||
) {
|
) {
|
||||||
this.previewManager.updateBackgroundTexture(null)
|
this.previewManager.updateBackgroundTexture(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleGrid(showGrid: boolean): void {
|
toggleGrid(showGrid: boolean): void {
|
||||||
this.sceneManager.toggleGrid(showGrid)
|
this.sceneManager.toggleGrid(showGrid)
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleCamera(cameraType?: 'perspective' | 'orthographic'): void {
|
toggleCamera(cameraType?: 'perspective' | 'orthographic'): void {
|
||||||
@@ -225,6 +263,7 @@ class Load3d {
|
|||||||
this.viewHelperManager.recreateViewHelper()
|
this.viewHelperManager.recreateViewHelper()
|
||||||
|
|
||||||
this.handleResize()
|
this.handleResize()
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
getCurrentCameraType(): 'perspective' | 'orthographic' {
|
getCurrentCameraType(): 'perspective' | 'orthographic' {
|
||||||
@@ -237,6 +276,8 @@ class Load3d {
|
|||||||
if (this.previewManager.showPreview) {
|
if (this.previewManager.showPreview) {
|
||||||
this.previewManager.syncWithMainCamera()
|
this.previewManager.syncWithMainCamera()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
getCameraState(): CameraState {
|
getCameraState(): CameraState {
|
||||||
@@ -245,23 +286,17 @@ class Load3d {
|
|||||||
|
|
||||||
setFOV(fov: number): void {
|
setFOV(fov: number): void {
|
||||||
this.cameraManager.setFOV(fov)
|
this.cameraManager.setFOV(fov)
|
||||||
this.renderer.render(
|
this.forceRender()
|
||||||
this.sceneManager.scene,
|
|
||||||
this.cameraManager.activeCamera
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setEdgeThreshold(threshold: number): void {
|
setEdgeThreshold(threshold: number): void {
|
||||||
this.modelManager.setEdgeThreshold(threshold)
|
this.modelManager.setEdgeThreshold(threshold)
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
setMaterialMode(mode: MaterialMode): void {
|
setMaterialMode(mode: MaterialMode): void {
|
||||||
this.modelManager.setMaterialMode(mode)
|
this.modelManager.setMaterialMode(mode)
|
||||||
|
this.forceRender()
|
||||||
this.renderer.render(
|
|
||||||
this.sceneManager.scene,
|
|
||||||
this.cameraManager.activeCamera
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async loadModel(url: string, originalFileName?: string): Promise<void> {
|
async loadModel(url: string, originalFileName?: string): Promise<void> {
|
||||||
@@ -272,31 +307,32 @@ class Load3d {
|
|||||||
await this.loaderManager.loadModel(url, originalFileName)
|
await this.loaderManager.loadModel(url, originalFileName)
|
||||||
|
|
||||||
this.handleResize()
|
this.handleResize()
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
clearModel(): void {
|
clearModel(): void {
|
||||||
this.modelManager.clearModel()
|
this.modelManager.clearModel()
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
setUpDirection(direction: UpDirection): void {
|
setUpDirection(direction: UpDirection): void {
|
||||||
this.modelManager.setUpDirection(direction)
|
this.modelManager.setUpDirection(direction)
|
||||||
|
this.forceRender()
|
||||||
this.renderer.render(
|
|
||||||
this.sceneManager.scene,
|
|
||||||
this.cameraManager.activeCamera
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setLightIntensity(intensity: number): void {
|
setLightIntensity(intensity: number): void {
|
||||||
this.lightingManager.setLightIntensity(intensity)
|
this.lightingManager.setLightIntensity(intensity)
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
togglePreview(showPreview: boolean): void {
|
togglePreview(showPreview: boolean): void {
|
||||||
this.previewManager.togglePreview(showPreview)
|
this.previewManager.togglePreview(showPreview)
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
setTargetSize(width: number, height: number): void {
|
setTargetSize(width: number, height: number): void {
|
||||||
this.previewManager.setTargetSize(width, height)
|
this.previewManager.setTargetSize(width, height)
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
addEventListener(event: string, callback: (data?: any) => void): void {
|
addEventListener(event: string, callback: (data?: any) => void): void {
|
||||||
@@ -309,6 +345,7 @@ class Load3d {
|
|||||||
|
|
||||||
refreshViewport(): void {
|
refreshViewport(): void {
|
||||||
this.handleResize()
|
this.handleResize()
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
handleResize(): void {
|
handleResize(): void {
|
||||||
@@ -328,6 +365,7 @@ class Load3d {
|
|||||||
this.renderer.setSize(width, height)
|
this.renderer.setSize(width, height)
|
||||||
|
|
||||||
this.previewManager.handleResize()
|
this.previewManager.handleResize()
|
||||||
|
this.forceRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
captureScene(width: number, height: number): Promise<CaptureResult> {
|
captureScene(width: number, height: number): Promise<CaptureResult> {
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ class Load3dAnimation extends Load3d {
|
|||||||
const animate = () => {
|
const animate = () => {
|
||||||
this.animationFrameId = requestAnimationFrame(animate)
|
this.animationFrameId = requestAnimationFrame(animate)
|
||||||
|
|
||||||
|
if (!this.isActive()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (this.previewManager.showPreview) {
|
if (this.previewManager.showPreview) {
|
||||||
this.previewManager.updatePreviewRender()
|
this.previewManager.updatePreviewRender()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user