From 6304f9b074452af3648266fe23c773f8fb478270 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Wed, 28 Oct 2026 10:35:56 +0100 Subject: Evaluate scenes into morphed vertices and rest data Co-Authored-By: Claude Haiku 5.5 --- generat3d/evaluate.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 generat3d/evaluate.py (limited to 'generat3d/evaluate.py') diff --git a/generat3d/evaluate.py b/generat3d/evaluate.py new file mode 100644 index 0000000..c1a9f1b --- /dev/null +++ b/generat3d/evaluate.py @@ -0,0 +1,33 @@ +# generat3D - evaluate Daz DSON scenes and write .dbz files +# Copyright (C) 2026 Danilo M. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +from .scene import AXES, REST_CHANNELS, key + + +def evaluate(scene): + """Morphed rest vertices and per-node rest channels {node id: {channel: [x, y, z]}}.""" + values = scene.graph.evaluate() + fig = scene.figure + verts = fig.verts.copy() + for k, (idx, deltas) in fig.morphs.items(): + w = values.get(k, 0.0) + if w: + verts[idx] += w * deltas # indices are unique within one morph + rest = {n.id: {ch: [values[key(n.id, n.id, f"{ch}/{a}")] for a in AXES] + for ch in REST_CHANNELS} + for n in fig.nodes} + return verts, rest -- cgit v1.2.3