TkAstral3D/packages/sdk/lib/core/viewer/ViewerPathTracer.ts
2025-10-04 23:36:07 +08:00

67 lines
1.3 KiB
TypeScript

import * as THREE from 'three';
import { WebGLPathTracer } from 'three-gpu-pathtracer';
class ViewerPathTracer {
private readonly renderer: THREE.WebGLRenderer;
pathTracer:WebGLPathTracer | null = null;
constructor(renderer:THREE.WebGLRenderer) {
this.renderer = renderer;
}
init(scene:THREE.Scene, camera:THREE.Camera) {
if (this.pathTracer === null ) {
this.pathTracer = new WebGLPathTracer(this.renderer);
this.pathTracer.filterGlossyFactor = 0.5;
}
this.pathTracer.setScene(scene, camera);
}
setSize() {
if (this.pathTracer === null) return;
// 路径跟踪器大小会根据画布自动更新
this.pathTracer.updateCamera();
}
setBackground() {
if (this.pathTracer === null) return;
// 根据初始化的场景字段更新环境设置
this.pathTracer.updateEnvironment();
}
setEnvironment() {
if (this.pathTracer === null) return;
this.pathTracer.updateEnvironment();
}
updateMaterials() {
if (this.pathTracer === null) return;
this.pathTracer.updateMaterials();
}
update() {
if (this.pathTracer === null) return;
this.pathTracer.renderSample();
}
reset() {
if (this.pathTracer === null) return;
this.pathTracer.updateCamera();
}
getSamples() {
if (this.pathTracer === null) return;
return this.pathTracer.samples;
}
}
export { ViewerPathTracer };