structura-render 0.2.0__tar.gz → 0.2.2__tar.gz
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.
- {structura_render-0.2.0 → structura_render-0.2.2}/PKG-INFO +27 -19
- {structura_render-0.2.0 → structura_render-0.2.2}/README.md +24 -16
- {structura_render-0.2.0 → structura_render-0.2.2}/pyproject.toml +3 -3
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/obj.py +15 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/PKG-INFO +27 -19
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/requires.txt +2 -2
- {structura_render-0.2.0 → structura_render-0.2.2}/setup.cfg +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/__init__.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/assets.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/block_model.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/build_full_cube_list.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/build_opaque_blocks.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/data/full_cube_blocks.json +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/data/opaque_blocks.json +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/entity_shapes.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/full_cube.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/gltf.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/hero.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/legacy_input.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/mesh.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/projections.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/stl.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/textures.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/usdz.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/usdz_variants.py +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/SOURCES.txt +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/dependency_links.txt +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/entry_points.txt +0 -0
- {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/top_level.txt +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: structura-render
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Minecraft block-model resolution, image rendering and 3D export (USDZ/glTF/OBJ/STL)
|
|
5
5
|
Project-URL: Repository, https://github.com/kirimba1024/structura-render
|
|
6
6
|
Requires-Python: >=3.9
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
|
-
Requires-Dist: structura-core<0.
|
|
8
|
+
Requires-Dist: structura-core<0.3,>=0.2.0
|
|
9
9
|
Requires-Dist: numpy<3,>=1.26
|
|
10
10
|
Requires-Dist: Pillow<12,>=11
|
|
11
11
|
Requires-Dist: scipy<2,>=1.13
|
|
@@ -27,7 +27,7 @@ Requires-Dist: pyvista<0.47,>=0.46; extra == "stl"
|
|
|
27
27
|
Requires-Dist: trimesh<5,>=4.5; extra == "stl"
|
|
28
28
|
Requires-Dist: networkx<4,>=3.2; extra == "stl"
|
|
29
29
|
Provides-Extra: legacy
|
|
30
|
-
Requires-Dist: structura-core[legacy]<0.
|
|
30
|
+
Requires-Dist: structura-core[legacy]<0.3,>=0.2.0; extra == "legacy"
|
|
31
31
|
|
|
32
32
|
# structura-render
|
|
33
33
|
|
|
@@ -35,8 +35,8 @@ Requires-Dist: structura-core[legacy]<0.2,>=0.1.0; extra == "legacy"
|
|
|
35
35
|
your own game's actual textures and block shapes, not guesses.**
|
|
36
36
|
|
|
37
37
|
No fake textures, no hardcoded block shapes, no bundled game files. Point
|
|
38
|
-
it at your own Minecraft client and get pixel-accurate PNGs and
|
|
39
|
-
the other end.
|
|
38
|
+
it at your own Minecraft client and get pixel-accurate PNGs and a 3D file
|
|
39
|
+
(USDZ, glTF/GLB, OBJ or STL) out the other end.
|
|
40
40
|
|
|
41
41
|
**This isn't a lookup table of ~50 common blocks with guessed shapes.**
|
|
42
42
|
The resolver walks the same blockstate → multipart/variant → model → element
|
|
@@ -57,8 +57,8 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
57
57
|
blockstate/model data and PNGs as the game. Dynamic blocks use their real
|
|
58
58
|
entity textures on compact state-aware compound geometry.
|
|
59
59
|
- **One mesh, every output.** Geometry is resolved once and shared between
|
|
60
|
-
PNG renders and
|
|
61
|
-
in 3D — nothing drifts between formats.
|
|
60
|
+
PNG renders and every 3D export (USDZ, glTF, OBJ, STL), so what you
|
|
61
|
+
preview is exactly what you get in 3D — nothing drifts between formats.
|
|
62
62
|
- **Clean by design.** Zero Mojang assets in this repo or its releases —
|
|
63
63
|
can't, EULA forbids it. You always supply your own client, so there's no
|
|
64
64
|
legal grey area to worry about.
|
|
@@ -67,8 +67,8 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
67
67
|
1.21.1 and the newest 26.2. New blocks resolve automatically; no waiting
|
|
68
68
|
on us to add support.
|
|
69
69
|
- **Light by default.** Core install is just NumPy, Pillow and SciPy.
|
|
70
|
-
PyVista
|
|
71
|
-
|
|
70
|
+
PyVista and the format-specific libraries (USD, trimesh) only get pulled
|
|
71
|
+
in if you actually ask for hero renders or a given 3D export.
|
|
72
72
|
- **Self-updating classification.** Which blocks are solid cubes (for
|
|
73
73
|
occlusion) is computed from real model geometry, not a hand-maintained
|
|
74
74
|
name list — it doesn't go stale as new blocks ship.
|
|
@@ -86,8 +86,15 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
86
86
|
QA rather than looks.
|
|
87
87
|
- **`hero.py`** (`hero` extra) — one real-textured, real-lit PyVista render
|
|
88
88
|
of the finished structure — the kind of shot above.
|
|
89
|
-
- **`usdz.py`** (`usdz` extra) — a textured
|
|
90
|
-
|
|
89
|
+
- **`usdz.py`** (`usdz` extra) — a textured USDZ mesh for AR Quick Look,
|
|
90
|
+
from the same mesh builder as the hero renderer.
|
|
91
|
+
- **`gltf.py`** (`gltf` extra) — a textured `.glb`, for the web
|
|
92
|
+
(`<model-viewer>`, three.js), Android AR Scene Viewer, Blender and every
|
|
93
|
+
other glTF-reading tool.
|
|
94
|
+
- **`obj.py`** (`obj` extra) — textured Wavefront OBJ + MTL, for Blender,
|
|
95
|
+
MeshLab and any classic 3D tool.
|
|
96
|
+
- **`stl.py`** (`stl` extra) — binary STL geometry (no color/texture — the
|
|
97
|
+
format doesn't have one), for 3D printing or any STL reader.
|
|
91
98
|
- **`build_full_cube_list.py` / `build_opaque_blocks.py`** — data-derived
|
|
92
99
|
block classification, described above.
|
|
93
100
|
- **`docs/block-render-audit-26.2.md`** — one row for every vanilla
|
|
@@ -99,17 +106,17 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
99
106
|
|
|
100
107
|
## Quick start
|
|
101
108
|
|
|
102
|
-
No clone needed for either package, but `structura-core` isn't on PyPI yet,
|
|
103
|
-
so `pip` can't resolve it as a transitive dependency — install it
|
|
104
|
-
explicitly first, then `structura-render`:
|
|
105
|
-
|
|
106
109
|
```bash
|
|
107
110
|
export STRUCTURA_MINECRAFT_ASSETS="$HOME/Library/Application Support/minecraft/versions/1.21.1/1.21.1.jar"
|
|
108
|
-
pip install
|
|
109
|
-
pip install "structura-render[usdz] @ git+https://github.com/kirimba1024/structura-render.git"
|
|
111
|
+
pip install "structura-render[usdz]"
|
|
110
112
|
structura-render-hero structure.nbt preview.png
|
|
113
|
+
structura-export-usdz structure.nbt model.usdz
|
|
111
114
|
```
|
|
112
115
|
|
|
116
|
+
Swap `[usdz]` for `[gltf]`, `[obj]` or `[stl]` (or several, comma-separated)
|
|
117
|
+
for the other 3D formats — `structura-export-gltf`, `structura-export-obj`,
|
|
118
|
+
`structura-export-stl` follow the same `src dst` signature.
|
|
119
|
+
|
|
113
120
|
Have a legacy `.schematic`/`.schem`/`.litematic` instead of Structure NBT?
|
|
114
121
|
Add the `legacy` extra (`[usdz,legacy]`) and pass it straight in — no
|
|
115
122
|
separate conversion step:
|
|
@@ -134,5 +141,6 @@ and isn't supported. On load, the package checks for `heavy_core` (added
|
|
|
134
141
|
in 1.21) and warns on stderr if it's missing, as a cheap signal that the
|
|
135
142
|
pointed-at client predates 1.21 — not exhaustive, just a sanity check.
|
|
136
143
|
|
|
137
|
-
Use the lighter `hero` extra when
|
|
138
|
-
|
|
144
|
+
Use the lighter `hero` extra when no 3D export is needed; plain projection
|
|
145
|
+
rendering (`structura-render-projections`, no extra) skips PyVista and
|
|
146
|
+
every format-specific library entirely.
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
your own game's actual textures and block shapes, not guesses.**
|
|
5
5
|
|
|
6
6
|
No fake textures, no hardcoded block shapes, no bundled game files. Point
|
|
7
|
-
it at your own Minecraft client and get pixel-accurate PNGs and
|
|
8
|
-
the other end.
|
|
7
|
+
it at your own Minecraft client and get pixel-accurate PNGs and a 3D file
|
|
8
|
+
(USDZ, glTF/GLB, OBJ or STL) out the other end.
|
|
9
9
|
|
|
10
10
|
**This isn't a lookup table of ~50 common blocks with guessed shapes.**
|
|
11
11
|
The resolver walks the same blockstate → multipart/variant → model → element
|
|
@@ -26,8 +26,8 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
26
26
|
blockstate/model data and PNGs as the game. Dynamic blocks use their real
|
|
27
27
|
entity textures on compact state-aware compound geometry.
|
|
28
28
|
- **One mesh, every output.** Geometry is resolved once and shared between
|
|
29
|
-
PNG renders and
|
|
30
|
-
in 3D — nothing drifts between formats.
|
|
29
|
+
PNG renders and every 3D export (USDZ, glTF, OBJ, STL), so what you
|
|
30
|
+
preview is exactly what you get in 3D — nothing drifts between formats.
|
|
31
31
|
- **Clean by design.** Zero Mojang assets in this repo or its releases —
|
|
32
32
|
can't, EULA forbids it. You always supply your own client, so there's no
|
|
33
33
|
legal grey area to worry about.
|
|
@@ -36,8 +36,8 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
36
36
|
1.21.1 and the newest 26.2. New blocks resolve automatically; no waiting
|
|
37
37
|
on us to add support.
|
|
38
38
|
- **Light by default.** Core install is just NumPy, Pillow and SciPy.
|
|
39
|
-
PyVista
|
|
40
|
-
|
|
39
|
+
PyVista and the format-specific libraries (USD, trimesh) only get pulled
|
|
40
|
+
in if you actually ask for hero renders or a given 3D export.
|
|
41
41
|
- **Self-updating classification.** Which blocks are solid cubes (for
|
|
42
42
|
occlusion) is computed from real model geometry, not a hand-maintained
|
|
43
43
|
name list — it doesn't go stale as new blocks ship.
|
|
@@ -55,8 +55,15 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
55
55
|
QA rather than looks.
|
|
56
56
|
- **`hero.py`** (`hero` extra) — one real-textured, real-lit PyVista render
|
|
57
57
|
of the finished structure — the kind of shot above.
|
|
58
|
-
- **`usdz.py`** (`usdz` extra) — a textured
|
|
59
|
-
|
|
58
|
+
- **`usdz.py`** (`usdz` extra) — a textured USDZ mesh for AR Quick Look,
|
|
59
|
+
from the same mesh builder as the hero renderer.
|
|
60
|
+
- **`gltf.py`** (`gltf` extra) — a textured `.glb`, for the web
|
|
61
|
+
(`<model-viewer>`, three.js), Android AR Scene Viewer, Blender and every
|
|
62
|
+
other glTF-reading tool.
|
|
63
|
+
- **`obj.py`** (`obj` extra) — textured Wavefront OBJ + MTL, for Blender,
|
|
64
|
+
MeshLab and any classic 3D tool.
|
|
65
|
+
- **`stl.py`** (`stl` extra) — binary STL geometry (no color/texture — the
|
|
66
|
+
format doesn't have one), for 3D printing or any STL reader.
|
|
60
67
|
- **`build_full_cube_list.py` / `build_opaque_blocks.py`** — data-derived
|
|
61
68
|
block classification, described above.
|
|
62
69
|
- **`docs/block-render-audit-26.2.md`** — one row for every vanilla
|
|
@@ -68,17 +75,17 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
68
75
|
|
|
69
76
|
## Quick start
|
|
70
77
|
|
|
71
|
-
No clone needed for either package, but `structura-core` isn't on PyPI yet,
|
|
72
|
-
so `pip` can't resolve it as a transitive dependency — install it
|
|
73
|
-
explicitly first, then `structura-render`:
|
|
74
|
-
|
|
75
78
|
```bash
|
|
76
79
|
export STRUCTURA_MINECRAFT_ASSETS="$HOME/Library/Application Support/minecraft/versions/1.21.1/1.21.1.jar"
|
|
77
|
-
pip install
|
|
78
|
-
pip install "structura-render[usdz] @ git+https://github.com/kirimba1024/structura-render.git"
|
|
80
|
+
pip install "structura-render[usdz]"
|
|
79
81
|
structura-render-hero structure.nbt preview.png
|
|
82
|
+
structura-export-usdz structure.nbt model.usdz
|
|
80
83
|
```
|
|
81
84
|
|
|
85
|
+
Swap `[usdz]` for `[gltf]`, `[obj]` or `[stl]` (or several, comma-separated)
|
|
86
|
+
for the other 3D formats — `structura-export-gltf`, `structura-export-obj`,
|
|
87
|
+
`structura-export-stl` follow the same `src dst` signature.
|
|
88
|
+
|
|
82
89
|
Have a legacy `.schematic`/`.schem`/`.litematic` instead of Structure NBT?
|
|
83
90
|
Add the `legacy` extra (`[usdz,legacy]`) and pass it straight in — no
|
|
84
91
|
separate conversion step:
|
|
@@ -103,5 +110,6 @@ and isn't supported. On load, the package checks for `heavy_core` (added
|
|
|
103
110
|
in 1.21) and warns on stderr if it's missing, as a cheap signal that the
|
|
104
111
|
pointed-at client predates 1.21 — not exhaustive, just a sanity check.
|
|
105
112
|
|
|
106
|
-
Use the lighter `hero` extra when
|
|
107
|
-
|
|
113
|
+
Use the lighter `hero` extra when no 3D export is needed; plain projection
|
|
114
|
+
rendering (`structura-render-projections`, no extra) skips PyVista and
|
|
115
|
+
every format-specific library entirely.
|
|
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "structura-render"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
description = "Minecraft block-model resolution, image rendering and 3D export (USDZ/glTF/OBJ/STL)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
11
|
dependencies = [
|
|
12
|
-
"structura-core>=0.
|
|
12
|
+
"structura-core>=0.2.0,<0.3",
|
|
13
13
|
"numpy>=1.26,<3",
|
|
14
14
|
"Pillow>=11,<12",
|
|
15
15
|
"scipy>=1.13,<2",
|
|
@@ -21,7 +21,7 @@ usdz = ["pyvista>=0.46,<0.47", "usd-core>=26,<27"]
|
|
|
21
21
|
gltf = ["pyvista>=0.46,<0.47", "trimesh>=4.5,<5", "networkx>=3.2,<4"]
|
|
22
22
|
obj = ["pyvista>=0.46,<0.47", "trimesh>=4.5,<5", "networkx>=3.2,<4"]
|
|
23
23
|
stl = ["pyvista>=0.46,<0.47", "trimesh>=4.5,<5", "networkx>=3.2,<4"]
|
|
24
|
-
legacy = ["structura-core[legacy]>=0.
|
|
24
|
+
legacy = ["structura-core[legacy]>=0.2.0,<0.3"]
|
|
25
25
|
|
|
26
26
|
[project.scripts]
|
|
27
27
|
structura-render-projections = "structura_render.projections:main"
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import argparse
|
|
2
|
+
import re
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
|
|
4
5
|
import numpy as np
|
|
@@ -11,6 +12,19 @@ from .mesh import build_textured_meshes, export_parts, flat_block_groups, voxel_
|
|
|
11
12
|
from .textures import TextureBank
|
|
12
13
|
|
|
13
14
|
|
|
15
|
+
def add_alpha_maps(obj_path):
|
|
16
|
+
obj_text = obj_path.read_text()
|
|
17
|
+
mtllib = re.search(r"^mtllib (.+)$", obj_text, re.MULTILINE)
|
|
18
|
+
if not mtllib:
|
|
19
|
+
return
|
|
20
|
+
mtl_path = obj_path.parent / mtllib.group(1)
|
|
21
|
+
mtl_text = mtl_path.read_text()
|
|
22
|
+
mtl_text = re.sub(
|
|
23
|
+
r"^(map_Kd (.+))$", r"\1\nmap_d \2", mtl_text, flags=re.MULTILINE,
|
|
24
|
+
)
|
|
25
|
+
mtl_path.write_text(mtl_text)
|
|
26
|
+
|
|
27
|
+
|
|
14
28
|
def main():
|
|
15
29
|
parser = argparse.ArgumentParser()
|
|
16
30
|
parser.add_argument("src")
|
|
@@ -40,6 +54,7 @@ def main():
|
|
|
40
54
|
out_path.parent.mkdir(parents=True, exist_ok=True)
|
|
41
55
|
resolver = trimesh.resolvers.FilePathResolver(str(out_path.parent))
|
|
42
56
|
scene.export(str(out_path), resolver=resolver, write_texture=True)
|
|
57
|
+
add_alpha_maps(out_path)
|
|
43
58
|
print(f"{out_path} parts={len(parts)}")
|
|
44
59
|
|
|
45
60
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: structura-render
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Minecraft block-model resolution, image rendering and 3D export (USDZ/glTF/OBJ/STL)
|
|
5
5
|
Project-URL: Repository, https://github.com/kirimba1024/structura-render
|
|
6
6
|
Requires-Python: >=3.9
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
|
-
Requires-Dist: structura-core<0.
|
|
8
|
+
Requires-Dist: structura-core<0.3,>=0.2.0
|
|
9
9
|
Requires-Dist: numpy<3,>=1.26
|
|
10
10
|
Requires-Dist: Pillow<12,>=11
|
|
11
11
|
Requires-Dist: scipy<2,>=1.13
|
|
@@ -27,7 +27,7 @@ Requires-Dist: pyvista<0.47,>=0.46; extra == "stl"
|
|
|
27
27
|
Requires-Dist: trimesh<5,>=4.5; extra == "stl"
|
|
28
28
|
Requires-Dist: networkx<4,>=3.2; extra == "stl"
|
|
29
29
|
Provides-Extra: legacy
|
|
30
|
-
Requires-Dist: structura-core[legacy]<0.
|
|
30
|
+
Requires-Dist: structura-core[legacy]<0.3,>=0.2.0; extra == "legacy"
|
|
31
31
|
|
|
32
32
|
# structura-render
|
|
33
33
|
|
|
@@ -35,8 +35,8 @@ Requires-Dist: structura-core[legacy]<0.2,>=0.1.0; extra == "legacy"
|
|
|
35
35
|
your own game's actual textures and block shapes, not guesses.**
|
|
36
36
|
|
|
37
37
|
No fake textures, no hardcoded block shapes, no bundled game files. Point
|
|
38
|
-
it at your own Minecraft client and get pixel-accurate PNGs and
|
|
39
|
-
the other end.
|
|
38
|
+
it at your own Minecraft client and get pixel-accurate PNGs and a 3D file
|
|
39
|
+
(USDZ, glTF/GLB, OBJ or STL) out the other end.
|
|
40
40
|
|
|
41
41
|
**This isn't a lookup table of ~50 common blocks with guessed shapes.**
|
|
42
42
|
The resolver walks the same blockstate → multipart/variant → model → element
|
|
@@ -57,8 +57,8 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
57
57
|
blockstate/model data and PNGs as the game. Dynamic blocks use their real
|
|
58
58
|
entity textures on compact state-aware compound geometry.
|
|
59
59
|
- **One mesh, every output.** Geometry is resolved once and shared between
|
|
60
|
-
PNG renders and
|
|
61
|
-
in 3D — nothing drifts between formats.
|
|
60
|
+
PNG renders and every 3D export (USDZ, glTF, OBJ, STL), so what you
|
|
61
|
+
preview is exactly what you get in 3D — nothing drifts between formats.
|
|
62
62
|
- **Clean by design.** Zero Mojang assets in this repo or its releases —
|
|
63
63
|
can't, EULA forbids it. You always supply your own client, so there's no
|
|
64
64
|
legal grey area to worry about.
|
|
@@ -67,8 +67,8 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
67
67
|
1.21.1 and the newest 26.2. New blocks resolve automatically; no waiting
|
|
68
68
|
on us to add support.
|
|
69
69
|
- **Light by default.** Core install is just NumPy, Pillow and SciPy.
|
|
70
|
-
PyVista
|
|
71
|
-
|
|
70
|
+
PyVista and the format-specific libraries (USD, trimesh) only get pulled
|
|
71
|
+
in if you actually ask for hero renders or a given 3D export.
|
|
72
72
|
- **Self-updating classification.** Which blocks are solid cubes (for
|
|
73
73
|
occlusion) is computed from real model geometry, not a hand-maintained
|
|
74
74
|
name list — it doesn't go stale as new blocks ship.
|
|
@@ -86,8 +86,15 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
86
86
|
QA rather than looks.
|
|
87
87
|
- **`hero.py`** (`hero` extra) — one real-textured, real-lit PyVista render
|
|
88
88
|
of the finished structure — the kind of shot above.
|
|
89
|
-
- **`usdz.py`** (`usdz` extra) — a textured
|
|
90
|
-
|
|
89
|
+
- **`usdz.py`** (`usdz` extra) — a textured USDZ mesh for AR Quick Look,
|
|
90
|
+
from the same mesh builder as the hero renderer.
|
|
91
|
+
- **`gltf.py`** (`gltf` extra) — a textured `.glb`, for the web
|
|
92
|
+
(`<model-viewer>`, three.js), Android AR Scene Viewer, Blender and every
|
|
93
|
+
other glTF-reading tool.
|
|
94
|
+
- **`obj.py`** (`obj` extra) — textured Wavefront OBJ + MTL, for Blender,
|
|
95
|
+
MeshLab and any classic 3D tool.
|
|
96
|
+
- **`stl.py`** (`stl` extra) — binary STL geometry (no color/texture — the
|
|
97
|
+
format doesn't have one), for 3D printing or any STL reader.
|
|
91
98
|
- **`build_full_cube_list.py` / `build_opaque_blocks.py`** — data-derived
|
|
92
99
|
block classification, described above.
|
|
93
100
|
- **`docs/block-render-audit-26.2.md`** — one row for every vanilla
|
|
@@ -99,17 +106,17 @@ portals and fluids) share a compact textured compound-model layer.
|
|
|
99
106
|
|
|
100
107
|
## Quick start
|
|
101
108
|
|
|
102
|
-
No clone needed for either package, but `structura-core` isn't on PyPI yet,
|
|
103
|
-
so `pip` can't resolve it as a transitive dependency — install it
|
|
104
|
-
explicitly first, then `structura-render`:
|
|
105
|
-
|
|
106
109
|
```bash
|
|
107
110
|
export STRUCTURA_MINECRAFT_ASSETS="$HOME/Library/Application Support/minecraft/versions/1.21.1/1.21.1.jar"
|
|
108
|
-
pip install
|
|
109
|
-
pip install "structura-render[usdz] @ git+https://github.com/kirimba1024/structura-render.git"
|
|
111
|
+
pip install "structura-render[usdz]"
|
|
110
112
|
structura-render-hero structure.nbt preview.png
|
|
113
|
+
structura-export-usdz structure.nbt model.usdz
|
|
111
114
|
```
|
|
112
115
|
|
|
116
|
+
Swap `[usdz]` for `[gltf]`, `[obj]` or `[stl]` (or several, comma-separated)
|
|
117
|
+
for the other 3D formats — `structura-export-gltf`, `structura-export-obj`,
|
|
118
|
+
`structura-export-stl` follow the same `src dst` signature.
|
|
119
|
+
|
|
113
120
|
Have a legacy `.schematic`/`.schem`/`.litematic` instead of Structure NBT?
|
|
114
121
|
Add the `legacy` extra (`[usdz,legacy]`) and pass it straight in — no
|
|
115
122
|
separate conversion step:
|
|
@@ -134,5 +141,6 @@ and isn't supported. On load, the package checks for `heavy_core` (added
|
|
|
134
141
|
in 1.21) and warns on stderr if it's missing, as a cheap signal that the
|
|
135
142
|
pointed-at client predates 1.21 — not exhaustive, just a sanity check.
|
|
136
143
|
|
|
137
|
-
Use the lighter `hero` extra when
|
|
138
|
-
|
|
144
|
+
Use the lighter `hero` extra when no 3D export is needed; plain projection
|
|
145
|
+
rendering (`structura-render-projections`, no extra) skips PyVista and
|
|
146
|
+
every format-specific library entirely.
|
{structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/requires.txt
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
structura-core<0.
|
|
1
|
+
structura-core<0.3,>=0.2.0
|
|
2
2
|
numpy<3,>=1.26
|
|
3
3
|
Pillow<12,>=11
|
|
4
4
|
scipy<2,>=1.13
|
|
@@ -12,7 +12,7 @@ networkx<4,>=3.2
|
|
|
12
12
|
pyvista<0.47,>=0.46
|
|
13
13
|
|
|
14
14
|
[legacy]
|
|
15
|
-
structura-core[legacy]<0.
|
|
15
|
+
structura-core[legacy]<0.3,>=0.2.0
|
|
16
16
|
|
|
17
17
|
[obj]
|
|
18
18
|
pyvista<0.47,>=0.46
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/build_full_cube_list.py
RENAMED
|
File without changes
|
{structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/build_opaque_blocks.py
RENAMED
|
File without changes
|
{structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/data/full_cube_blocks.json
RENAMED
|
File without changes
|
{structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/data/opaque_blocks.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/top_level.txt
RENAMED
|
File without changes
|