reze-engine 0.54.6 → 0.54.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/body.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,UAAU,EAAE,WA+FxB,CAAA"}
1
+ {"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/body.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,UAAU,EAAE,WAuGxB,CAAA"}
@@ -8,6 +8,12 @@ export const BODY_GRAPH = {
8
8
  tags: ["body"],
9
9
  nodes: [
10
10
  { id: "tex", type: "texture" },
11
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
12
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
13
+ // atlas is painted once and coloured here — so the diffuse belongs in the
14
+ // base of every look.
15
+ { id: "mat_diffuse", type: "material_diffuse" },
16
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
11
17
  { id: "geo", type: "geometry" },
12
18
  { id: "str", type: "shader_to_rgb_diffuse" },
13
19
  { id: "toon", type: "ramp_constant", inputs: { pos0: 0.0, pos1: 0.2966 } },
@@ -59,8 +65,10 @@ export const BODY_GRAPH = {
59
65
  ],
60
66
  links: [
61
67
  { from: { node: "str", socket: "value" }, to: { node: "toon", socket: "fac" } },
62
- { from: { node: "tex", socket: "color" }, to: { node: "shadow_tint", socket: "color" } },
63
- { from: { node: "tex", socket: "color" }, to: { node: "lit_tint", socket: "color" } },
68
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
69
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
70
+ { from: { node: "tex_base", socket: "color" }, to: { node: "shadow_tint", socket: "color" } },
71
+ { from: { node: "tex_base", socket: "color" }, to: { node: "lit_tint", socket: "color" } },
64
72
  { from: { node: "toon", socket: "fac_out" }, to: { node: "toon_color", socket: "fac" } },
65
73
  { from: { node: "shadow_tint", socket: "color" }, to: { node: "toon_color", socket: "a" } },
66
74
  { from: { node: "lit_tint", socket: "color" }, to: { node: "toon_color", socket: "b" } },
@@ -1 +1 @@
1
- {"version":3,"file":"cloth_rough.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/cloth_rough.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,iBAAiB,EAAE,WAwD/B,CAAA"}
1
+ {"version":3,"file":"cloth_rough.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/cloth_rough.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,iBAAiB,EAAE,WAgE/B,CAAA"}
@@ -8,6 +8,12 @@ export const CLOTH_ROUGH_GRAPH = {
8
8
  tags: ["cloth_rough"],
9
9
  nodes: [
10
10
  { id: "tex", type: "texture" },
11
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
12
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
13
+ // atlas is painted once and coloured here — so the diffuse belongs in the
14
+ // base of every look.
15
+ { id: "mat_diffuse", type: "material_diffuse" },
16
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
11
17
  { id: "geo", type: "geometry" },
12
18
  { id: "str", type: "shader_to_rgb_diffuse" },
13
19
  { id: "ramp_008", type: "ramp_constant_aa", inputs: { edge: 0.2966 } },
@@ -34,10 +40,12 @@ export const CLOTH_ROUGH_GRAPH = {
34
40
  links: [
35
41
  { from: { node: "str", socket: "value" }, to: { node: "ramp_008", socket: "fac" } },
36
42
  { from: { node: "ramp_008", socket: "fac_out" }, to: { node: "mix04_fac", socket: "a" } },
37
- { from: { node: "tex", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
43
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
44
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
45
+ { from: { node: "tex_base", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
38
46
  { from: { node: "mix04_fac", socket: "value" }, to: { node: "mix_004", socket: "fac" } },
39
47
  { from: { node: "dark_tex", socket: "color" }, to: { node: "mix_004", socket: "a" } },
40
- { from: { node: "tex", socket: "color" }, to: { node: "mix_004", socket: "b" } },
48
+ { from: { node: "tex_base", socket: "color" }, to: { node: "mix_004", socket: "b" } },
41
49
  { from: { node: "geo", socket: "normal" }, to: { node: "sep_n", socket: "vector" } },
42
50
  { from: { node: "sep_n", socket: "y" }, to: { node: "bevel_clamp", socket: "a" } },
43
51
  { from: { node: "bevel_clamp", socket: "value" }, to: { node: "mix_003", socket: "fac" } },
@@ -51,7 +59,7 @@ export const CLOTH_ROUGH_GRAPH = {
51
59
  { from: { node: "noise", socket: "value" }, to: { node: "noise_ramp", socket: "fac" } },
52
60
  { from: { node: "noise_ramp", socket: "fac_out" }, to: { node: "bump", socket: "height" } },
53
61
  { from: { node: "geo", socket: "normal" }, to: { node: "bump", socket: "normal" } },
54
- { from: { node: "tex", socket: "color" }, to: { node: "principled_base", socket: "color" } },
62
+ { from: { node: "tex_base", socket: "color" }, to: { node: "principled_base", socket: "color" } },
55
63
  { from: { node: "principled_base", socket: "color" }, to: { node: "principled", socket: "base_color" } },
56
64
  { from: { node: "bump", socket: "vector" }, to: { node: "principled", socket: "normal" } },
57
65
  { from: { node: "npr_emit", socket: "color" }, to: { node: "mix_shader_001", socket: "a" } },
@@ -1 +1 @@
1
- {"version":3,"file":"cloth_smooth.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/cloth_smooth.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,kBAAkB,EAAE,WAgDhC,CAAA"}
1
+ {"version":3,"file":"cloth_smooth.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/cloth_smooth.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,kBAAkB,EAAE,WAwDhC,CAAA"}
@@ -8,6 +8,12 @@ export const CLOTH_SMOOTH_GRAPH = {
8
8
  tags: ["cloth_smooth"],
9
9
  nodes: [
10
10
  { id: "tex", type: "texture" },
11
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
12
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
13
+ // atlas is painted once and coloured here — so the diffuse belongs in the
14
+ // base of every look.
15
+ { id: "mat_diffuse", type: "material_diffuse" },
16
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
11
17
  { id: "geo", type: "geometry" },
12
18
  { id: "str", type: "shader_to_rgb_diffuse" },
13
19
  { id: "ramp_008", type: "ramp_constant_aa", inputs: { edge: 0.2966 } },
@@ -31,10 +37,12 @@ export const CLOTH_SMOOTH_GRAPH = {
31
37
  links: [
32
38
  { from: { node: "str", socket: "value" }, to: { node: "ramp_008", socket: "fac" } },
33
39
  { from: { node: "ramp_008", socket: "fac_out" }, to: { node: "mix04_fac", socket: "a" } },
34
- { from: { node: "tex", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
40
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
41
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
42
+ { from: { node: "tex_base", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
35
43
  { from: { node: "mix04_fac", socket: "value" }, to: { node: "mix_004", socket: "fac" } },
36
44
  { from: { node: "dark_tex", socket: "color" }, to: { node: "mix_004", socket: "a" } },
37
- { from: { node: "tex", socket: "color" }, to: { node: "mix_004", socket: "b" } },
45
+ { from: { node: "tex_base", socket: "color" }, to: { node: "mix_004", socket: "b" } },
38
46
  { from: { node: "geo", socket: "normal" }, to: { node: "sep_n", socket: "vector" } },
39
47
  { from: { node: "sep_n", socket: "y" }, to: { node: "bevel_clamp", socket: "a" } },
40
48
  { from: { node: "bevel_clamp", socket: "value" }, to: { node: "mix_003", socket: "fac" } },
@@ -44,7 +52,7 @@ export const CLOTH_SMOOTH_GRAPH = {
44
52
  { from: { node: "mix_003", socket: "color" }, to: { node: "npr_overlay", socket: "a" } },
45
53
  { from: { node: "hue_004", socket: "color" }, to: { node: "npr_overlay", socket: "b" } },
46
54
  { from: { node: "npr_overlay", socket: "color" }, to: { node: "npr_emit", socket: "color" } },
47
- { from: { node: "tex", socket: "color" }, to: { node: "principled_base", socket: "color" } },
55
+ { from: { node: "tex_base", socket: "color" }, to: { node: "principled_base", socket: "color" } },
48
56
  { from: { node: "principled_base", socket: "color" }, to: { node: "principled", socket: "base_color" } },
49
57
  { from: { node: "npr_emit", socket: "color" }, to: { node: "mix_shader_001", socket: "a" } },
50
58
  { from: { node: "principled", socket: "color" }, to: { node: "mix_shader_001", socket: "b" } },
@@ -1 +1 @@
1
- {"version":3,"file":"eye.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/eye.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,SAAS,EAAE,WAqBvB,CAAA"}
1
+ {"version":3,"file":"eye.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/eye.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,SAAS,EAAE,WA6BvB,CAAA"}
@@ -12,6 +12,12 @@ export const EYE_GRAPH = {
12
12
  tags: ["eye"],
13
13
  nodes: [
14
14
  { id: "tex", type: "texture" },
15
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
16
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
17
+ // atlas is painted once and coloured here — so the diffuse belongs in the
18
+ // base of every look.
19
+ { id: "mat_diffuse", type: "material_diffuse" },
20
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
15
21
  {
16
22
  id: "principled",
17
23
  type: "principled",
@@ -21,8 +27,10 @@ export const EYE_GRAPH = {
21
27
  { id: "add", type: "add_shader" },
22
28
  ],
23
29
  links: [
24
- { from: { node: "tex", socket: "color" }, to: { node: "principled", socket: "base_color" } },
25
- { from: { node: "tex", socket: "color" }, to: { node: "emission", socket: "color" } },
30
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
31
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
32
+ { from: { node: "tex_base", socket: "color" }, to: { node: "principled", socket: "base_color" } },
33
+ { from: { node: "tex_base", socket: "color" }, to: { node: "emission", socket: "color" } },
26
34
  { from: { node: "principled", socket: "color" }, to: { node: "add", socket: "a" } },
27
35
  { from: { node: "emission", socket: "color" }, to: { node: "add", socket: "b" } },
28
36
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"face.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/face.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,UAAU,EAAE,WA6HxB,CAAA"}
1
+ {"version":3,"file":"face.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/face.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,UAAU,EAAE,WAqIxB,CAAA"}
@@ -11,6 +11,12 @@ export const FACE_GRAPH = {
11
11
  tags: ["face"],
12
12
  nodes: [
13
13
  { id: "tex", type: "texture" },
14
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
15
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
16
+ // atlas is painted once and coloured here — so the diffuse belongs in the
17
+ // base of every look.
18
+ { id: "mat_diffuse", type: "material_diffuse" },
19
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
14
20
  { id: "geo", type: "geometry" },
15
21
  // ── toon shading ──
16
22
  { id: "str", type: "shader_to_rgb_diffuse" },
@@ -71,8 +77,10 @@ export const FACE_GRAPH = {
71
77
  links: [
72
78
  // toon
73
79
  { from: { node: "str", socket: "value" }, to: { node: "toon", socket: "fac" } },
74
- { from: { node: "tex", socket: "color" }, to: { node: "shadow_tint", socket: "color" } },
75
- { from: { node: "tex", socket: "color" }, to: { node: "lit_tint", socket: "color" } },
80
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
81
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
82
+ { from: { node: "tex_base", socket: "color" }, to: { node: "shadow_tint", socket: "color" } },
83
+ { from: { node: "tex_base", socket: "color" }, to: { node: "lit_tint", socket: "color" } },
76
84
  { from: { node: "toon", socket: "fac_out" }, to: { node: "toon_color", socket: "fac" } },
77
85
  { from: { node: "shadow_tint", socket: "color" }, to: { node: "toon_color", socket: "a" } },
78
86
  { from: { node: "lit_tint", socket: "color" }, to: { node: "toon_color", socket: "b" } },
@@ -1 +1 @@
1
- {"version":3,"file":"hair.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/hair.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,UAAU,EAAE,WAmExB,CAAA"}
1
+ {"version":3,"file":"hair.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/hair.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,UAAU,EAAE,WA2ExB,CAAA"}
@@ -15,6 +15,12 @@ export const HAIR_GRAPH = {
15
15
  tags: ["hair"],
16
16
  nodes: [
17
17
  { id: "tex", type: "texture" },
18
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
19
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
20
+ // atlas is painted once and coloured here — so the diffuse belongs in the
21
+ // base of every look.
22
+ { id: "mat_diffuse", type: "material_diffuse" },
23
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
18
24
  { id: "geo", type: "geometry" },
19
25
  { id: "hs_shadow", type: "hue_sat", inputs: { hue: 0.5, saturation: 1.2, value: 0.5, fac: 1.0 } },
20
26
  { id: "hs_002", type: "hue_sat", inputs: { hue: 0.48, saturation: 1.2, value: 0.7, fac: 1.0 } },
@@ -46,9 +52,11 @@ export const HAIR_GRAPH = {
46
52
  { id: "mix_shader_001", type: "mix_shader", inputs: { fac: 0.2 } },
47
53
  ],
48
54
  links: [
49
- { from: { node: "tex", socket: "color" }, to: { node: "hs_shadow", socket: "color" } },
55
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
56
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
57
+ { from: { node: "tex_base", socket: "color" }, to: { node: "hs_shadow", socket: "color" } },
50
58
  { from: { node: "hs_shadow", socket: "color" }, to: { node: "hs_002", socket: "color" } },
51
- { from: { node: "tex", socket: "color" }, to: { node: "hs_001", socket: "color" } },
59
+ { from: { node: "tex_base", socket: "color" }, to: { node: "hs_001", socket: "color" } },
52
60
  { from: { node: "str", socket: "value" }, to: { node: "ramp_008", socket: "fac" } },
53
61
  { from: { node: "ramp_008", socket: "fac_out" }, to: { node: "mix_004", socket: "fac" } },
54
62
  { from: { node: "hs_002", socket: "color" }, to: { node: "mix_004", socket: "a" } },
@@ -1 +1 @@
1
- {"version":3,"file":"metal.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/metal.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,WAAW,EAAE,WAoDzB,CAAA"}
1
+ {"version":3,"file":"metal.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/metal.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,WAAW,EAAE,WA4DzB,CAAA"}
@@ -9,6 +9,12 @@ export const METAL_GRAPH = {
9
9
  tags: ["metal"],
10
10
  nodes: [
11
11
  { id: "tex", type: "texture" },
12
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
13
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
14
+ // atlas is painted once and coloured here — so the diffuse belongs in the
15
+ // base of every look.
16
+ { id: "mat_diffuse", type: "material_diffuse" },
17
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
12
18
  { id: "geo", type: "geometry" },
13
19
  { id: "tex_tint", type: "hue_sat", inputs: { hue: 0.5, saturation: 1.0, value: 0.800000011920929, fac: 1.0 } },
14
20
  { id: "str", type: "shader_to_rgb_diffuse" },
@@ -32,7 +38,9 @@ export const METAL_GRAPH = {
32
38
  { id: "mix_shader_001", type: "mix_shader", inputs: { fac: 0.6967 } },
33
39
  ],
34
40
  links: [
35
- { from: { node: "tex", socket: "color" }, to: { node: "tex_tint", socket: "color" } },
41
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
42
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
43
+ { from: { node: "tex_base", socket: "color" }, to: { node: "tex_tint", socket: "color" } },
36
44
  { from: { node: "str", socket: "value" }, to: { node: "ramp_008", socket: "fac" } },
37
45
  { from: { node: "ramp_008", socket: "fac_out" }, to: { node: "mix04_fac", socket: "a" } },
38
46
  { from: { node: "tex_tint", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
@@ -1 +1 @@
1
- {"version":3,"file":"stockings.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/stockings.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,eAAe,EAAE,WA8C7B,CAAA"}
1
+ {"version":3,"file":"stockings.d.ts","sourceRoot":"","sources":["../../../src/graph/presets/stockings.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,eAAe,EAAE,WAsD7B,CAAA"}
@@ -11,6 +11,12 @@ export const STOCKINGS_GRAPH = {
11
11
  tags: ["stockings"],
12
12
  nodes: [
13
13
  { id: "tex", type: "texture" },
14
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
15
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
16
+ // atlas is painted once and coloured here — so the diffuse belongs in the
17
+ // base of every look.
18
+ { id: "mat_diffuse", type: "material_diffuse" },
19
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
14
20
  { id: "geo", type: "geometry" },
15
21
  { id: "map", type: "mapping", inputs: { loc: [1.0, 1.0, 1.0], rot: [0.0, 1.5708, 1.5708] } },
16
22
  { id: "grad", type: "tex_gradient" },
@@ -44,8 +50,10 @@ export const STOCKINGS_GRAPH = {
44
50
  { from: { node: "ramp_face", socket: "fac_out" }, to: { node: "mix_001", socket: "b" } },
45
51
  { from: { node: "mix_001", socket: "color" }, to: { node: "mask", socket: "a" } },
46
52
  { from: { node: "ramp_002", socket: "fac_out" }, to: { node: "mask", socket: "b" } },
47
- { from: { node: "tex", socket: "color" }, to: { node: "emission_hs", socket: "color" } },
48
- { from: { node: "tex", socket: "color" }, to: { node: "principled", socket: "base_color" } },
53
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
54
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
55
+ { from: { node: "tex_base", socket: "color" }, to: { node: "emission_hs", socket: "color" } },
56
+ { from: { node: "tex_base", socket: "color" }, to: { node: "principled", socket: "base_color" } },
49
57
  { from: { node: "emission_hs", socket: "color" }, to: { node: "mix_shader_001", socket: "a" } },
50
58
  { from: { node: "principled", socket: "color" }, to: { node: "mix_shader_001", socket: "b" } },
51
59
  { from: { node: "mask", socket: "color" }, to: { node: "mix_shader_001", socket: "fac" } },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reze-engine",
3
- "version": "0.54.6",
3
+ "version": "0.54.7",
4
4
  "description": "A lightweight WebGPU engine for real-time 3D MMD/PMX model rendering",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -11,6 +11,12 @@ export const BODY_GRAPH: ShaderGraph = {
11
11
  tags: ["body"],
12
12
  nodes: [
13
13
  { id: "tex", type: "texture" },
14
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
15
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
16
+ // atlas is painted once and coloured here — so the diffuse belongs in the
17
+ // base of every look.
18
+ { id: "mat_diffuse", type: "material_diffuse" },
19
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
14
20
  { id: "geo", type: "geometry" },
15
21
  { id: "str", type: "shader_to_rgb_diffuse" },
16
22
  { id: "toon", type: "ramp_constant", inputs: { pos0: 0.0, pos1: 0.2966 } },
@@ -62,8 +68,10 @@ export const BODY_GRAPH: ShaderGraph = {
62
68
  ],
63
69
  links: [
64
70
  { from: { node: "str", socket: "value" }, to: { node: "toon", socket: "fac" } },
65
- { from: { node: "tex", socket: "color" }, to: { node: "shadow_tint", socket: "color" } },
66
- { from: { node: "tex", socket: "color" }, to: { node: "lit_tint", socket: "color" } },
71
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
72
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
73
+ { from: { node: "tex_base", socket: "color" }, to: { node: "shadow_tint", socket: "color" } },
74
+ { from: { node: "tex_base", socket: "color" }, to: { node: "lit_tint", socket: "color" } },
67
75
  { from: { node: "toon", socket: "fac_out" }, to: { node: "toon_color", socket: "fac" } },
68
76
  { from: { node: "shadow_tint", socket: "color" }, to: { node: "toon_color", socket: "a" } },
69
77
  { from: { node: "lit_tint", socket: "color" }, to: { node: "toon_color", socket: "b" } },
@@ -11,6 +11,12 @@ export const CLOTH_ROUGH_GRAPH: ShaderGraph = {
11
11
  tags: ["cloth_rough"],
12
12
  nodes: [
13
13
  { id: "tex", type: "texture" },
14
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
15
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
16
+ // atlas is painted once and coloured here — so the diffuse belongs in the
17
+ // base of every look.
18
+ { id: "mat_diffuse", type: "material_diffuse" },
19
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
14
20
  { id: "geo", type: "geometry" },
15
21
  { id: "str", type: "shader_to_rgb_diffuse" },
16
22
  { id: "ramp_008", type: "ramp_constant_aa", inputs: { edge: 0.2966 } },
@@ -37,10 +43,12 @@ export const CLOTH_ROUGH_GRAPH: ShaderGraph = {
37
43
  links: [
38
44
  { from: { node: "str", socket: "value" }, to: { node: "ramp_008", socket: "fac" } },
39
45
  { from: { node: "ramp_008", socket: "fac_out" }, to: { node: "mix04_fac", socket: "a" } },
40
- { from: { node: "tex", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
46
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
47
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
48
+ { from: { node: "tex_base", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
41
49
  { from: { node: "mix04_fac", socket: "value" }, to: { node: "mix_004", socket: "fac" } },
42
50
  { from: { node: "dark_tex", socket: "color" }, to: { node: "mix_004", socket: "a" } },
43
- { from: { node: "tex", socket: "color" }, to: { node: "mix_004", socket: "b" } },
51
+ { from: { node: "tex_base", socket: "color" }, to: { node: "mix_004", socket: "b" } },
44
52
  { from: { node: "geo", socket: "normal" }, to: { node: "sep_n", socket: "vector" } },
45
53
  { from: { node: "sep_n", socket: "y" }, to: { node: "bevel_clamp", socket: "a" } },
46
54
  { from: { node: "bevel_clamp", socket: "value" }, to: { node: "mix_003", socket: "fac" } },
@@ -54,7 +62,7 @@ export const CLOTH_ROUGH_GRAPH: ShaderGraph = {
54
62
  { from: { node: "noise", socket: "value" }, to: { node: "noise_ramp", socket: "fac" } },
55
63
  { from: { node: "noise_ramp", socket: "fac_out" }, to: { node: "bump", socket: "height" } },
56
64
  { from: { node: "geo", socket: "normal" }, to: { node: "bump", socket: "normal" } },
57
- { from: { node: "tex", socket: "color" }, to: { node: "principled_base", socket: "color" } },
65
+ { from: { node: "tex_base", socket: "color" }, to: { node: "principled_base", socket: "color" } },
58
66
  { from: { node: "principled_base", socket: "color" }, to: { node: "principled", socket: "base_color" } },
59
67
  { from: { node: "bump", socket: "vector" }, to: { node: "principled", socket: "normal" } },
60
68
  { from: { node: "npr_emit", socket: "color" }, to: { node: "mix_shader_001", socket: "a" } },
@@ -11,6 +11,12 @@ export const CLOTH_SMOOTH_GRAPH: ShaderGraph = {
11
11
  tags: ["cloth_smooth"],
12
12
  nodes: [
13
13
  { id: "tex", type: "texture" },
14
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
15
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
16
+ // atlas is painted once and coloured here — so the diffuse belongs in the
17
+ // base of every look.
18
+ { id: "mat_diffuse", type: "material_diffuse" },
19
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
14
20
  { id: "geo", type: "geometry" },
15
21
  { id: "str", type: "shader_to_rgb_diffuse" },
16
22
  { id: "ramp_008", type: "ramp_constant_aa", inputs: { edge: 0.2966 } },
@@ -34,10 +40,12 @@ export const CLOTH_SMOOTH_GRAPH: ShaderGraph = {
34
40
  links: [
35
41
  { from: { node: "str", socket: "value" }, to: { node: "ramp_008", socket: "fac" } },
36
42
  { from: { node: "ramp_008", socket: "fac_out" }, to: { node: "mix04_fac", socket: "a" } },
37
- { from: { node: "tex", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
43
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
44
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
45
+ { from: { node: "tex_base", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
38
46
  { from: { node: "mix04_fac", socket: "value" }, to: { node: "mix_004", socket: "fac" } },
39
47
  { from: { node: "dark_tex", socket: "color" }, to: { node: "mix_004", socket: "a" } },
40
- { from: { node: "tex", socket: "color" }, to: { node: "mix_004", socket: "b" } },
48
+ { from: { node: "tex_base", socket: "color" }, to: { node: "mix_004", socket: "b" } },
41
49
  { from: { node: "geo", socket: "normal" }, to: { node: "sep_n", socket: "vector" } },
42
50
  { from: { node: "sep_n", socket: "y" }, to: { node: "bevel_clamp", socket: "a" } },
43
51
  { from: { node: "bevel_clamp", socket: "value" }, to: { node: "mix_003", socket: "fac" } },
@@ -47,7 +55,7 @@ export const CLOTH_SMOOTH_GRAPH: ShaderGraph = {
47
55
  { from: { node: "mix_003", socket: "color" }, to: { node: "npr_overlay", socket: "a" } },
48
56
  { from: { node: "hue_004", socket: "color" }, to: { node: "npr_overlay", socket: "b" } },
49
57
  { from: { node: "npr_overlay", socket: "color" }, to: { node: "npr_emit", socket: "color" } },
50
- { from: { node: "tex", socket: "color" }, to: { node: "principled_base", socket: "color" } },
58
+ { from: { node: "tex_base", socket: "color" }, to: { node: "principled_base", socket: "color" } },
51
59
  { from: { node: "principled_base", socket: "color" }, to: { node: "principled", socket: "base_color" } },
52
60
  { from: { node: "npr_emit", socket: "color" }, to: { node: "mix_shader_001", socket: "a" } },
53
61
  { from: { node: "principled", socket: "color" }, to: { node: "mix_shader_001", socket: "b" } },
@@ -15,6 +15,12 @@ export const EYE_GRAPH: ShaderGraph = {
15
15
  tags: ["eye"],
16
16
  nodes: [
17
17
  { id: "tex", type: "texture" },
18
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
19
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
20
+ // atlas is painted once and coloured here — so the diffuse belongs in the
21
+ // base of every look.
22
+ { id: "mat_diffuse", type: "material_diffuse" },
23
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
18
24
  {
19
25
  id: "principled",
20
26
  type: "principled",
@@ -24,8 +30,10 @@ export const EYE_GRAPH: ShaderGraph = {
24
30
  { id: "add", type: "add_shader" },
25
31
  ],
26
32
  links: [
27
- { from: { node: "tex", socket: "color" }, to: { node: "principled", socket: "base_color" } },
28
- { from: { node: "tex", socket: "color" }, to: { node: "emission", socket: "color" } },
33
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
34
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
35
+ { from: { node: "tex_base", socket: "color" }, to: { node: "principled", socket: "base_color" } },
36
+ { from: { node: "tex_base", socket: "color" }, to: { node: "emission", socket: "color" } },
29
37
  { from: { node: "principled", socket: "color" }, to: { node: "add", socket: "a" } },
30
38
  { from: { node: "emission", socket: "color" }, to: { node: "add", socket: "b" } },
31
39
  ],
@@ -14,6 +14,12 @@ export const FACE_GRAPH: ShaderGraph = {
14
14
  tags: ["face"],
15
15
  nodes: [
16
16
  { id: "tex", type: "texture" },
17
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
18
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
19
+ // atlas is painted once and coloured here — so the diffuse belongs in the
20
+ // base of every look.
21
+ { id: "mat_diffuse", type: "material_diffuse" },
22
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
17
23
  { id: "geo", type: "geometry" },
18
24
 
19
25
  // ── toon shading ──
@@ -82,8 +88,10 @@ export const FACE_GRAPH: ShaderGraph = {
82
88
  links: [
83
89
  // toon
84
90
  { from: { node: "str", socket: "value" }, to: { node: "toon", socket: "fac" } },
85
- { from: { node: "tex", socket: "color" }, to: { node: "shadow_tint", socket: "color" } },
86
- { from: { node: "tex", socket: "color" }, to: { node: "lit_tint", socket: "color" } },
91
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
92
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
93
+ { from: { node: "tex_base", socket: "color" }, to: { node: "shadow_tint", socket: "color" } },
94
+ { from: { node: "tex_base", socket: "color" }, to: { node: "lit_tint", socket: "color" } },
87
95
  { from: { node: "toon", socket: "fac_out" }, to: { node: "toon_color", socket: "fac" } },
88
96
  { from: { node: "shadow_tint", socket: "color" }, to: { node: "toon_color", socket: "a" } },
89
97
  { from: { node: "lit_tint", socket: "color" }, to: { node: "toon_color", socket: "b" } },
@@ -18,6 +18,12 @@ export const HAIR_GRAPH: ShaderGraph = {
18
18
  tags: ["hair"],
19
19
  nodes: [
20
20
  { id: "tex", type: "texture" },
21
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
22
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
23
+ // atlas is painted once and coloured here — so the diffuse belongs in the
24
+ // base of every look.
25
+ { id: "mat_diffuse", type: "material_diffuse" },
26
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
21
27
  { id: "geo", type: "geometry" },
22
28
  { id: "hs_shadow", type: "hue_sat", inputs: { hue: 0.5, saturation: 1.2, value: 0.5, fac: 1.0 } },
23
29
  { id: "hs_002", type: "hue_sat", inputs: { hue: 0.48, saturation: 1.2, value: 0.7, fac: 1.0 } },
@@ -49,9 +55,11 @@ export const HAIR_GRAPH: ShaderGraph = {
49
55
  { id: "mix_shader_001", type: "mix_shader", inputs: { fac: 0.2 } },
50
56
  ],
51
57
  links: [
52
- { from: { node: "tex", socket: "color" }, to: { node: "hs_shadow", socket: "color" } },
58
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
59
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
60
+ { from: { node: "tex_base", socket: "color" }, to: { node: "hs_shadow", socket: "color" } },
53
61
  { from: { node: "hs_shadow", socket: "color" }, to: { node: "hs_002", socket: "color" } },
54
- { from: { node: "tex", socket: "color" }, to: { node: "hs_001", socket: "color" } },
62
+ { from: { node: "tex_base", socket: "color" }, to: { node: "hs_001", socket: "color" } },
55
63
  { from: { node: "str", socket: "value" }, to: { node: "ramp_008", socket: "fac" } },
56
64
  { from: { node: "ramp_008", socket: "fac_out" }, to: { node: "mix_004", socket: "fac" } },
57
65
  { from: { node: "hs_002", socket: "color" }, to: { node: "mix_004", socket: "a" } },
@@ -12,6 +12,12 @@ export const METAL_GRAPH: ShaderGraph = {
12
12
  tags: ["metal"],
13
13
  nodes: [
14
14
  { id: "tex", type: "texture" },
15
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
16
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
17
+ // atlas is painted once and coloured here — so the diffuse belongs in the
18
+ // base of every look.
19
+ { id: "mat_diffuse", type: "material_diffuse" },
20
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
15
21
  { id: "geo", type: "geometry" },
16
22
  { id: "tex_tint", type: "hue_sat", inputs: { hue: 0.5, saturation: 1.0, value: 0.800000011920929, fac: 1.0 } },
17
23
  { id: "str", type: "shader_to_rgb_diffuse" },
@@ -35,7 +41,9 @@ export const METAL_GRAPH: ShaderGraph = {
35
41
  { id: "mix_shader_001", type: "mix_shader", inputs: { fac: 0.6967 } },
36
42
  ],
37
43
  links: [
38
- { from: { node: "tex", socket: "color" }, to: { node: "tex_tint", socket: "color" } },
44
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
45
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
46
+ { from: { node: "tex_base", socket: "color" }, to: { node: "tex_tint", socket: "color" } },
39
47
  { from: { node: "str", socket: "value" }, to: { node: "ramp_008", socket: "fac" } },
40
48
  { from: { node: "ramp_008", socket: "fac_out" }, to: { node: "mix04_fac", socket: "a" } },
41
49
  { from: { node: "tex_tint", socket: "color" }, to: { node: "dark_tex", socket: "color" } },
@@ -14,6 +14,12 @@ export const STOCKINGS_GRAPH: ShaderGraph = {
14
14
  tags: ["stockings"],
15
15
  nodes: [
16
16
  { id: "tex", type: "texture" },
17
+ // Base colour: the texture times the PMX material's diffuse. MMD authors
18
+ // tint per MATERIAL rather than per texel — an eyebrow sharing the face
19
+ // atlas is painted once and coloured here — so the diffuse belongs in the
20
+ // base of every look.
21
+ { id: "mat_diffuse", type: "material_diffuse" },
22
+ { id: "tex_base", type: "mix/multiply", inputs: { fac: 1.0 } },
17
23
  { id: "geo", type: "geometry" },
18
24
  { id: "map", type: "mapping", inputs: { loc: [1.0, 1.0, 1.0], rot: [0.0, 1.5708, 1.5708] } },
19
25
  { id: "grad", type: "tex_gradient" },
@@ -47,8 +53,10 @@ export const STOCKINGS_GRAPH: ShaderGraph = {
47
53
  { from: { node: "ramp_face", socket: "fac_out" }, to: { node: "mix_001", socket: "b" } },
48
54
  { from: { node: "mix_001", socket: "color" }, to: { node: "mask", socket: "a" } },
49
55
  { from: { node: "ramp_002", socket: "fac_out" }, to: { node: "mask", socket: "b" } },
50
- { from: { node: "tex", socket: "color" }, to: { node: "emission_hs", socket: "color" } },
51
- { from: { node: "tex", socket: "color" }, to: { node: "principled", socket: "base_color" } },
56
+ { from: { node: "tex", socket: "color" }, to: { node: "tex_base", socket: "a" } },
57
+ { from: { node: "mat_diffuse", socket: "color" }, to: { node: "tex_base", socket: "b" } },
58
+ { from: { node: "tex_base", socket: "color" }, to: { node: "emission_hs", socket: "color" } },
59
+ { from: { node: "tex_base", socket: "color" }, to: { node: "principled", socket: "base_color" } },
52
60
  { from: { node: "emission_hs", socket: "color" }, to: { node: "mix_shader_001", socket: "a" } },
53
61
  { from: { node: "principled", socket: "color" }, to: { node: "mix_shader_001", socket: "b" } },
54
62
  { from: { node: "mask", socket: "color" }, to: { node: "mix_shader_001", socket: "fac" } },