reze-engine 0.2.1 → 0.2.2
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 +104 -104
- package/dist/engine.d.ts +11 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +396 -387
- package/package.json +1 -1
- package/src/camera.ts +358 -358
- package/src/engine.ts +2472 -2455
- package/src/math.ts +546 -546
- package/src/model.ts +421 -421
- package/src/pmx-loader.ts +1054 -1054
- package/src/vmd-loader.ts +179 -179
package/README.md
CHANGED
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
# Reze Engine
|
|
2
|
-
|
|
3
|
-
A lightweight engine built with WebGPU and TypeScript for real-time 3D anime character MMD model rendering.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- Physics
|
|
8
|
-
- Alpha blending
|
|
9
|
-
- Post alpha eye rendering
|
|
10
|
-
- Rim lighting
|
|
11
|
-
- Bloom
|
|
12
|
-
- Outlines
|
|
13
|
-
- Toon shading with directional lights
|
|
14
|
-
- MSAA 4x anti-aliasing
|
|
15
|
-
- GPU-accelerated skinning
|
|
16
|
-
- Bone rotation api
|
|
17
|
-
|
|
18
|
-
## Usage
|
|
19
|
-
|
|
20
|
-
```typescript
|
|
21
|
-
export default function Home() {
|
|
22
|
-
const canvasRef = useRef<HTMLCanvasElement>(null)
|
|
23
|
-
const engineRef = useRef<Engine | null>(null)
|
|
24
|
-
const [engineError, setEngineError] = useState<string | null>(null)
|
|
25
|
-
const [loading, setLoading] = useState(true)
|
|
26
|
-
const [stats, setStats] = useState<EngineStats>({
|
|
27
|
-
fps: 0,
|
|
28
|
-
frameTime: 0,
|
|
29
|
-
gpuMemory: 0,
|
|
30
|
-
})
|
|
31
|
-
const [progress, setProgress] = useState(0)
|
|
32
|
-
|
|
33
|
-
const initEngine = useCallback(async () => {
|
|
34
|
-
if (canvasRef.current) {
|
|
35
|
-
// Initialize engine
|
|
36
|
-
try {
|
|
37
|
-
const engine = new Engine(canvasRef.current)
|
|
38
|
-
engineRef.current = engine
|
|
39
|
-
await engine.init()
|
|
40
|
-
await engine.loadModel("/models/塞尔凯特/塞尔凯特.pmx")
|
|
41
|
-
setLoading(false)
|
|
42
|
-
|
|
43
|
-
engine.runRenderLoop(() => {
|
|
44
|
-
setStats(engine.getStats())
|
|
45
|
-
})
|
|
46
|
-
} catch (error) {
|
|
47
|
-
setEngineError(error instanceof Error ? error.message : "Unknown error")
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}, [])
|
|
51
|
-
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
void (async () => {
|
|
54
|
-
initEngine()
|
|
55
|
-
})()
|
|
56
|
-
|
|
57
|
-
// Cleanup on unmount
|
|
58
|
-
return () => {
|
|
59
|
-
if (engineRef.current) {
|
|
60
|
-
engineRef.current.dispose()
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}, [initEngine])
|
|
64
|
-
|
|
65
|
-
useEffect(() => {
|
|
66
|
-
if (loading) {
|
|
67
|
-
const interval = setInterval(() => {
|
|
68
|
-
setProgress((prev) => {
|
|
69
|
-
if (prev >= 100) {
|
|
70
|
-
return 0
|
|
71
|
-
}
|
|
72
|
-
return prev + 1
|
|
73
|
-
})
|
|
74
|
-
}, 50)
|
|
75
|
-
|
|
76
|
-
return () => clearInterval(interval)
|
|
77
|
-
}
|
|
78
|
-
}, [loading])
|
|
79
|
-
|
|
80
|
-
return (
|
|
81
|
-
<div
|
|
82
|
-
className="fixed inset-0 w-full h-full overflow-hidden touch-none"
|
|
83
|
-
style={{
|
|
84
|
-
background:
|
|
85
|
-
"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%)",
|
|
86
|
-
}}
|
|
87
|
-
>
|
|
88
|
-
<Header stats={stats} />
|
|
89
|
-
|
|
90
|
-
{engineError && (
|
|
91
|
-
<div className="absolute inset-0 w-full h-full flex items-center justify-center text-white p-6">
|
|
92
|
-
Engine Error: {engineError}
|
|
93
|
-
</div>
|
|
94
|
-
)}
|
|
95
|
-
{loading && !engineError && (
|
|
96
|
-
<div className="absolute inset-0 max-w-xs mx-auto w-full h-full flex items-center justify-center text-white p-6">
|
|
97
|
-
<Progress value={progress} className="rounded-none" />
|
|
98
|
-
</div>
|
|
99
|
-
)}
|
|
100
|
-
<canvas ref={canvasRef} className="absolute inset-0 w-full h-full touch-none z-1" />
|
|
101
|
-
</div>
|
|
102
|
-
)
|
|
103
|
-
}
|
|
104
|
-
```
|
|
1
|
+
# Reze Engine
|
|
2
|
+
|
|
3
|
+
A lightweight engine built with WebGPU and TypeScript for real-time 3D anime character MMD model rendering.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Physics
|
|
8
|
+
- Alpha blending
|
|
9
|
+
- Post alpha eye rendering
|
|
10
|
+
- Rim lighting
|
|
11
|
+
- Bloom
|
|
12
|
+
- Outlines
|
|
13
|
+
- Toon shading with directional lights
|
|
14
|
+
- MSAA 4x anti-aliasing
|
|
15
|
+
- GPU-accelerated skinning
|
|
16
|
+
- Bone rotation api
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
export default function Home() {
|
|
22
|
+
const canvasRef = useRef<HTMLCanvasElement>(null)
|
|
23
|
+
const engineRef = useRef<Engine | null>(null)
|
|
24
|
+
const [engineError, setEngineError] = useState<string | null>(null)
|
|
25
|
+
const [loading, setLoading] = useState(true)
|
|
26
|
+
const [stats, setStats] = useState<EngineStats>({
|
|
27
|
+
fps: 0,
|
|
28
|
+
frameTime: 0,
|
|
29
|
+
gpuMemory: 0,
|
|
30
|
+
})
|
|
31
|
+
const [progress, setProgress] = useState(0)
|
|
32
|
+
|
|
33
|
+
const initEngine = useCallback(async () => {
|
|
34
|
+
if (canvasRef.current) {
|
|
35
|
+
// Initialize engine
|
|
36
|
+
try {
|
|
37
|
+
const engine = new Engine(canvasRef.current)
|
|
38
|
+
engineRef.current = engine
|
|
39
|
+
await engine.init()
|
|
40
|
+
await engine.loadModel("/models/塞尔凯特/塞尔凯特.pmx")
|
|
41
|
+
setLoading(false)
|
|
42
|
+
|
|
43
|
+
engine.runRenderLoop(() => {
|
|
44
|
+
setStats(engine.getStats())
|
|
45
|
+
})
|
|
46
|
+
} catch (error) {
|
|
47
|
+
setEngineError(error instanceof Error ? error.message : "Unknown error")
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}, [])
|
|
51
|
+
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
void (async () => {
|
|
54
|
+
initEngine()
|
|
55
|
+
})()
|
|
56
|
+
|
|
57
|
+
// Cleanup on unmount
|
|
58
|
+
return () => {
|
|
59
|
+
if (engineRef.current) {
|
|
60
|
+
engineRef.current.dispose()
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}, [initEngine])
|
|
64
|
+
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (loading) {
|
|
67
|
+
const interval = setInterval(() => {
|
|
68
|
+
setProgress((prev) => {
|
|
69
|
+
if (prev >= 100) {
|
|
70
|
+
return 0
|
|
71
|
+
}
|
|
72
|
+
return prev + 1
|
|
73
|
+
})
|
|
74
|
+
}, 50)
|
|
75
|
+
|
|
76
|
+
return () => clearInterval(interval)
|
|
77
|
+
}
|
|
78
|
+
}, [loading])
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<div
|
|
82
|
+
className="fixed inset-0 w-full h-full overflow-hidden touch-none"
|
|
83
|
+
style={{
|
|
84
|
+
background:
|
|
85
|
+
"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%)",
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
88
|
+
<Header stats={stats} />
|
|
89
|
+
|
|
90
|
+
{engineError && (
|
|
91
|
+
<div className="absolute inset-0 w-full h-full flex items-center justify-center text-white p-6">
|
|
92
|
+
Engine Error: {engineError}
|
|
93
|
+
</div>
|
|
94
|
+
)}
|
|
95
|
+
{loading && !engineError && (
|
|
96
|
+
<div className="absolute inset-0 max-w-xs mx-auto w-full h-full flex items-center justify-center text-white p-6">
|
|
97
|
+
<Progress value={progress} className="rounded-none" />
|
|
98
|
+
</div>
|
|
99
|
+
)}
|
|
100
|
+
<canvas ref={canvasRef} className="absolute inset-0 w-full h-full touch-none z-1" />
|
|
101
|
+
</div>
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
```
|
package/dist/engine.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { Camera } from "./camera";
|
|
2
2
|
import { Quat } from "./math";
|
|
3
|
+
export type EngineOptions = {
|
|
4
|
+
ambient: number;
|
|
5
|
+
bloomIntensity: number;
|
|
6
|
+
bloomThreshold: number;
|
|
7
|
+
rimLightIntensity: number;
|
|
8
|
+
rimLightPower: number;
|
|
9
|
+
};
|
|
3
10
|
export interface EngineStats {
|
|
4
11
|
fps: number;
|
|
5
12
|
frameTime: number;
|
|
@@ -40,6 +47,7 @@ export declare class Engine {
|
|
|
40
47
|
private multisampleTexture;
|
|
41
48
|
private readonly sampleCount;
|
|
42
49
|
private renderPassDescriptor;
|
|
50
|
+
private ambient;
|
|
43
51
|
private sceneRenderTexture;
|
|
44
52
|
private sceneRenderTextureView;
|
|
45
53
|
private bloomExtractTexture;
|
|
@@ -57,8 +65,8 @@ export declare class Engine {
|
|
|
57
65
|
private bloomBlurHBindGroup?;
|
|
58
66
|
private bloomBlurVBindGroup?;
|
|
59
67
|
private bloomComposeBindGroup?;
|
|
60
|
-
bloomThreshold
|
|
61
|
-
bloomIntensity
|
|
68
|
+
private bloomThreshold;
|
|
69
|
+
private bloomIntensity;
|
|
62
70
|
private rimLightIntensity;
|
|
63
71
|
private rimLightPower;
|
|
64
72
|
private rimLightColor;
|
|
@@ -79,7 +87,7 @@ export declare class Engine {
|
|
|
79
87
|
private renderLoopCallback;
|
|
80
88
|
private animationFrames;
|
|
81
89
|
private animationTimeouts;
|
|
82
|
-
constructor(canvas: HTMLCanvasElement);
|
|
90
|
+
constructor(canvas: HTMLCanvasElement, options?: EngineOptions);
|
|
83
91
|
init(): Promise<void>;
|
|
84
92
|
private createPipelines;
|
|
85
93
|
private createSkinMatrixComputePipeline;
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,IAAI,EAAQ,MAAM,QAAQ,CAAA;AAMnC,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AASD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,kBAAkB,CAAmB;IACtC,MAAM,EAAG,MAAM,CAAA;IACtB,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,WAAW,CAAC,CAAW;IAC/B,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,0BAA0B,CAAoB;IACtD,OAAO,CAAC,2BAA2B,CAAoB;IACvD,OAAO,CAAC,8BAA8B,CAAoB;IAC1D,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,sBAAsB,CAAqB;IACnD,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAAW;IACpC,OAAO,CAAC,iBAAiB,CAAC,CAAW;IACrC,OAAO,CAAC,uBAAuB,CAAC,CAAW;IAC3C,OAAO,CAAC,yBAAyB,CAAC,CAAoB;IACtD,OAAO,CAAC,0BAA0B,CAAC,CAAc;IACjD,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAI;IAChC,OAAO,CAAC,oBAAoB,CAA0B;IAEtD,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,sBAAsB,CAAiB;IAC/C,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,iBAAiB,CAAa;IAEtC,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,oBAAoB,CAAoB;IAEhD,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,aAAa,CAAa;IAElC,OAAO,CAAC,qBAAqB,CAAC,CAAc;IAC5C,OAAO,CAAC,mBAAmB,CAAC,CAAc;IAC1C,OAAO,CAAC,mBAAmB,CAAC,CAAc;IAC1C,OAAO,CAAC,qBAAqB,CAAC,CAAc;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|