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')