reze-engine 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,99 +1,99 @@
1
- # Reze Engine
2
-
3
- A lightweight engine built with WebGPU and TypeScript for real-time 3D anime character MMD model rendering.
4
-
5
- ## Usage
6
-
7
- ```typescript
8
- export default function Home() {
9
- const canvasRef = useRef<HTMLCanvasElement>(null)
10
- const engineRef = useRef<Engine | null>(null)
11
- const [engineError, setEngineError] = useState<string | null>(null)
12
- const [loading, setLoading] = useState(true)
13
- const [stats, setStats] = useState<EngineStats>({
14
- fps: 0,
15
- frameTime: 0,
16
- memoryUsed: 0,
17
- drawCalls: 0,
18
- vertices: 0,
19
- triangles: 0,
20
- materials: 0,
21
- textures: 0,
22
- textureMemory: 0,
23
- bufferMemory: 0,
24
- gpuMemory: 0,
25
- })
26
- const [progress, setProgress] = useState(0)
27
-
28
- const initEngine = useCallback(async () => {
29
- if (canvasRef.current) {
30
- // Initialize engine
31
- try {
32
- const engine = new Engine(canvasRef.current)
33
- engineRef.current = engine
34
- await engine.init()
35
- await engine.loadModel("/models/塞尔凯特/塞尔凯特.pmx")
36
- setLoading(false)
37
-
38
- engine.runRenderLoop(() => {
39
- setStats(engine.getStats())
40
- })
41
- } catch (error) {
42
- setEngineError(error instanceof Error ? error.message : "Unknown error")
43
- }
44
- }
45
- }, [])
46
-
47
- useEffect(() => {
48
- void (async () => {
49
- initEngine()
50
- })()
51
-
52
- // Cleanup on unmount
53
- return () => {
54
- if (engineRef.current) {
55
- engineRef.current.dispose()
56
- }
57
- }
58
- }, [initEngine])
59
-
60
- useEffect(() => {
61
- if (loading) {
62
- const interval = setInterval(() => {
63
- setProgress((prev) => {
64
- if (prev >= 100) {
65
- return 0
66
- }
67
- return prev + 1
68
- })
69
- }, 50)
70
-
71
- return () => clearInterval(interval)
72
- }
73
- }, [loading])
74
-
75
- return (
76
- <div
77
- className="fixed inset-0 w-full h-full overflow-hidden touch-none"
78
- style={{
79
- background:
80
- "radial-gradient(ellipse at center, rgba(35, 35, 45, 0.8) 0%, rgba(35, 35, 45, 0.8) 8%, rgba(8, 8, 12, 0.95) 65%, rgba(0, 0, 0, 1) 100%)",
81
- }}
82
- >
83
- <Header stats={stats} />
84
-
85
- {engineError && (
86
- <div className="absolute inset-0 w-full h-full flex items-center justify-center text-white p-6">
87
- Engine Error: {engineError}
88
- </div>
89
- )}
90
- {loading && !engineError && (
91
- <div className="absolute inset-0 max-w-xs mx-auto w-full h-full flex items-center justify-center text-white p-6">
92
- <Progress value={progress} className="rounded-none" />
93
- </div>
94
- )}
95
- <canvas ref={canvasRef} className="absolute inset-0 w-full h-full touch-none z-1" />
96
- </div>
97
- )
98
- }
99
- ```
1
+ # Reze Engine
2
+
3
+ A lightweight engine built with WebGPU and TypeScript for real-time 3D anime character MMD model rendering.
4
+
5
+ ## Usage
6
+
7
+ ```typescript
8
+ export default function Home() {
9
+ const canvasRef = useRef<HTMLCanvasElement>(null)
10
+ const engineRef = useRef<Engine | null>(null)
11
+ const [engineError, setEngineError] = useState<string | null>(null)
12
+ const [loading, setLoading] = useState(true)
13
+ const [stats, setStats] = useState<EngineStats>({
14
+ fps: 0,
15
+ frameTime: 0,
16
+ memoryUsed: 0,
17
+ drawCalls: 0,
18
+ vertices: 0,
19
+ triangles: 0,
20
+ materials: 0,
21
+ textures: 0,
22
+ textureMemory: 0,
23
+ bufferMemory: 0,
24
+ gpuMemory: 0,
25
+ })
26
+ const [progress, setProgress] = useState(0)
27
+
28
+ const initEngine = useCallback(async () => {
29
+ if (canvasRef.current) {
30
+ // Initialize engine
31
+ try {
32
+ const engine = new Engine(canvasRef.current)
33
+ engineRef.current = engine
34
+ await engine.init()
35
+ await engine.loadModel("/models/塞尔凯特/塞尔凯特.pmx")
36
+ setLoading(false)
37
+
38
+ engine.runRenderLoop(() => {
39
+ setStats(engine.getStats())
40
+ })
41
+ } catch (error) {
42
+ setEngineError(error instanceof Error ? error.message : "Unknown error")
43
+ }
44
+ }
45
+ }, [])
46
+
47
+ useEffect(() => {
48
+ void (async () => {
49
+ initEngine()
50
+ })()
51
+
52
+ // Cleanup on unmount
53
+ return () => {
54
+ if (engineRef.current) {
55
+ engineRef.current.dispose()
56
+ }
57
+ }
58
+ }, [initEngine])
59
+
60
+ useEffect(() => {
61
+ if (loading) {
62
+ const interval = setInterval(() => {
63
+ setProgress((prev) => {
64
+ if (prev >= 100) {
65
+ return 0
66
+ }
67
+ return prev + 1
68
+ })
69
+ }, 50)
70
+
71
+ return () => clearInterval(interval)
72
+ }
73
+ }, [loading])
74
+
75
+ return (
76
+ <div
77
+ className="fixed inset-0 w-full h-full overflow-hidden touch-none"
78
+ style={{
79
+ background:
80
+ "radial-gradient(ellipse at center, rgba(35, 35, 45, 0.8) 0%, rgba(35, 35, 45, 0.8) 8%, rgba(8, 8, 12, 0.95) 65%, rgba(0, 0, 0, 1) 100%)",
81
+ }}
82
+ >
83
+ <Header stats={stats} />
84
+
85
+ {engineError && (
86
+ <div className="absolute inset-0 w-full h-full flex items-center justify-center text-white p-6">
87
+ Engine Error: {engineError}
88
+ </div>
89
+ )}
90
+ {loading && !engineError && (
91
+ <div className="absolute inset-0 max-w-xs mx-auto w-full h-full flex items-center justify-center text-white p-6">
92
+ <Progress value={progress} className="rounded-none" />
93
+ </div>
94
+ )}
95
+ <canvas ref={canvasRef} className="absolute inset-0 w-full h-full touch-none z-1" />
96
+ </div>
97
+ )
98
+ }
99
+ ```
package/dist/engine.d.ts CHANGED
@@ -40,6 +40,21 @@ export declare class Engine {
40
40
  private multisampleTexture;
41
41
  private readonly sampleCount;
42
42
  private renderPassDescriptor;
43
+ private sceneRenderTexture;
44
+ private sceneRenderTextureView;
45
+ private bloomExtractTexture;
46
+ private bloomBlurTexture1;
47
+ private bloomBlurTexture2;
48
+ private bloomExtractPipeline;
49
+ private bloomBlurPipeline;
50
+ private bloomComposePipeline;
51
+ private fullscreenQuadBuffer;
52
+ private blurDirectionBuffer;
53
+ private bloomIntensityBuffer;
54
+ private bloomThresholdBuffer;
55
+ private linearSampler;
56
+ bloomThreshold: number;
57
+ bloomIntensity: number;
43
58
  private currentModel;
44
59
  private modelDir;
45
60
  private physics;
@@ -59,6 +74,8 @@ export declare class Engine {
59
74
  init(): Promise<void>;
60
75
  private createPipelines;
61
76
  private createSkinMatrixComputePipeline;
77
+ private createFullscreenQuad;
78
+ private createBloomPipelines;
62
79
  private setupResize;
63
80
  private handleResize;
64
81
  private setupCamera;
@@ -83,6 +100,7 @@ export declare class Engine {
83
100
  private setupMaterials;
84
101
  private createTextureFromPath;
85
102
  render(): void;
103
+ private applyBloom;
86
104
  private updateCameraUniforms;
87
105
  private updateRenderTarget;
88
106
  private updateModelPose;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}