-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdefaults.py
More file actions
111 lines (82 loc) · 3.51 KB
/
defaults.py
File metadata and controls
111 lines (82 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
"""
Valores por defeito do Text3D.
**Perfil padrão:** qualidade elevada (model card HF), pensado para GPUs com >= 8 GB VRAM.
Octree 384, 20000 chunks, 30 steps Hunyuan, sem quantização SDNQ, remesh desligado,
reparo "light" (merge+weld+normals).
Para hardware modesto (~6 GB VRAM), usar ``--low-vram`` que activa o perfil antigo:
SDNQ INT4, octree 256, 8000 chunks, 24 steps, remesh ligado, reparo "full".
"""
from __future__ import annotations
import math
import os
# --- Orientação ao gravar mesh (Hunyuan3D → motor Y-up) ---
_rotation_x_rad_override: float | None = None
def set_export_rotation_x_rad_override(value: float | None) -> None:
"""Usado pelo CLI ``generate``; None = voltar a env/defeito."""
global _rotation_x_rad_override
_rotation_x_rad_override = value
def get_export_rotation_x_rad() -> float:
"""Rotação X Hunyuan → espaço de export (Y-up).
Defeito: +90° (π/2). Hunyuan3D produz meshes deitadas no eixo Z (cabeça
em +Z, pés em -Z). Sem rotação, exportadas como GLB (Y-up) ficam de
barriga para cima. A rotação +90° em X coloca a cabeça em +Y (cima) e
os pés em -Z (atrás), como esperado para Y-up Z-forward (Godot/Three).
Override via ``TEXT3D_EXPORT_ROTATION_X_DEG`` env, ``TEXT3D_EXPORT_ROTATION_X_RAD``
env, ou via CLI ``--export-rotation-x-deg``.
"""
if _rotation_x_rad_override is not None:
return float(_rotation_x_rad_override)
env = os.environ.get("TEXT3D_EXPORT_ROTATION_X_RAD")
if env is not None and str(env).strip() != "":
return float(env)
env_deg = os.environ.get("TEXT3D_EXPORT_ROTATION_X_DEG")
if env_deg is not None and str(env_deg).strip() != "":
return float(env_deg) * math.pi / 180.0
return math.pi / 2.0
# --- Origem ao gravar mesh (após rotação Y-up) ---
DEFAULT_EXPORT_ORIGIN = "feet"
_origin_override: str | None = None
_VALID_ORIGINS = frozenset({"feet", "center", "none"})
def set_export_origin_override(value: str | None) -> None:
"""Usado pelo CLI ``generate``; None = voltar a env/defeito."""
global _origin_override
if value is not None and value not in _VALID_ORIGINS:
raise ValueError(f"export origin inválido: {value!r}")
_origin_override = value
def get_export_origin() -> str:
"""Modo de origem após rotação: ``feet`` | ``center`` | ``none``."""
if _origin_override is not None:
return _origin_override
env = os.environ.get("TEXT3D_EXPORT_ORIGIN", "").strip().lower()
if env in _VALID_ORIGINS:
return env
return DEFAULT_EXPORT_ORIGIN
# --- Text2D (imagem intermédia) ---
DEFAULT_T2D_WIDTH = 2048
DEFAULT_T2D_HEIGHT = 2048
DEFAULT_T2D_STEPS = 8
DEFAULT_T2D_GUIDANCE = 1.0
DEFAULT_T2D_CPU_OFFLOAD = True
# --- Hunyuan3D-2.1 (shape) — perfil padrão (qualidade elevada) ---
DEFAULT_SUBFOLDER = "hunyuan3d-dit-v2-1"
DEFAULT_HY_STEPS = 30
DEFAULT_HY_GUIDANCE = 5.0
DEFAULT_OCTREE_RESOLUTION = 384
DEFAULT_NUM_CHUNKS = 20000
DEFAULT_MC_LEVEL = 0.0
DEFAULT_REMOVE_BG = True
DEFAULT_MAX_FACES = 40000
# --- Perfil "low VRAM" (~6 GB): activado com ``--low-vram`` ---
LOW_VRAM_OCTREE = 256
LOW_VRAM_NUM_CHUNKS = 8000
LOW_VRAM_STEPS = 24
# Perfis CLI `--preset`: fast=baixo VRAM, balanced=~6GB, hq=padrão actual.
PRESET_HUNYUAN = {
"fast": {"steps": 18, "octree": 128, "chunks": 4096},
"balanced": {
"steps": LOW_VRAM_STEPS,
"octree": LOW_VRAM_OCTREE,
"chunks": LOW_VRAM_NUM_CHUNKS,
},
"hq": {"steps": DEFAULT_HY_STEPS, "octree": DEFAULT_OCTREE_RESOLUTION, "chunks": DEFAULT_NUM_CHUNKS},
}