gokul/macro-six-usbc

USB-powered ATmega32U4 controller board with protected/switched 5 V power, six tactile keys, rotary encoder, reset/boot/ISP interfaces, power LED, and six daisy-chained SK6812 RGB LEDs driven through MOSFETs.

Version
0.1.6
License
MIT
Stars
0

enclosure/viewer_materials.py

"""Encode solid colors as PBR materials for older and newer GLB consumers."""
from pathlib import Path
import numpy as np
import trimesh


def prepare_viewer_materials(folder):
    names=['bottom','open-plate','keycaps-reference','knob-reference','open-hardware','control-extensions']
    for name in names:
        path=Path(folder)/(name+'.glb');scene=trimesh.load(path,force='scene');bounds=scene.bounds.copy()
        result=trimesh.Scene()
        for node in scene.graph.nodes_geometry:
            placement,key=scene.graph[node];mesh=scene.geometry[key].copy();mesh.apply_transform(placement)
            if mesh.visual.kind=='texture':
                material=mesh.visual.material
            else:
                material=trimesh.visual.material.PBRMaterial(
                    baseColorFactor=mesh.visual.main_color,metallicFactor=.1 if name=='open-hardware' else 0,
                    roughnessFactor=.65)
            mesh.visual=trimesh.visual.TextureVisuals(material=material)
            result.add_geometry(mesh,node_name=node)
        assert np.allclose(bounds,result.bounds,atol=1e-5),name
        result.export(str(path))

if __name__=='__main__':
    prepare_viewer_materials(Path(__file__).resolve().parent/'viewer')
    print('PBR colors encoded; geometry bounds unchanged')