Team Ai
Apppublic

OpenMotionLab/MotionGPT

sourceHugging Facemitupdated 1y agoView on Hugging Face
118likes
test_scenes.py236 linesDownload Raw Back to unit
1import numpy as np2import pytest3import trimesh4 5from pyrender import (Mesh, PerspectiveCamera, DirectionalLight,6                      SpotLight, PointLight, Scene, Node, OrthographicCamera)7 8 9def test_scenes():10 11    # Basics12    s = Scene()13    assert np.allclose(s.bg_color, np.ones(4))14    assert np.allclose(s.ambient_light, np.zeros(3))15    assert len(s.nodes) == 016    assert s.name is None17    s.name = 'asdf'18    s.bg_color = None19    s.ambient_light = None20    assert np.allclose(s.bg_color, np.ones(4))21    assert np.allclose(s.ambient_light, np.zeros(3))22 23    assert s.nodes == set()24    assert s.cameras == set()25    assert s.lights == set()26    assert s.point_lights == set()27    assert s.spot_lights == set()28    assert s.directional_lights == set()29    assert s.meshes == set()30    assert s.camera_nodes == set()31    assert s.light_nodes == set()32    assert s.point_light_nodes == set()33    assert s.spot_light_nodes == set()34    assert s.directional_light_nodes == set()35    assert s.mesh_nodes == set()36    assert s.main_camera_node is None37    assert np.all(s.bounds == 0)38    assert np.all(s.centroid == 0)39    assert np.all(s.extents == 0)40    assert np.all(s.scale == 0)41 42    # From trimesh scene43    tms = trimesh.load('tests/data/WaterBottle.glb')44    s = Scene.from_trimesh_scene(tms)45    assert len(s.meshes) == 146    assert len(s.mesh_nodes) == 147 48    # Test bg color formatting49    s = Scene(bg_color=[0, 1.0, 0])50    assert np.allclose(s.bg_color, np.array([0.0, 1.0, 0.0, 1.0]))51 52    # Test constructor for nodes53    n1 = Node()54    n2 = Node()55    n3 = Node()56    nodes = [n1, n2, n3]57    s = Scene(nodes=nodes)58    n1.children.append(n2)59    s = Scene(nodes=nodes)60    n3.children.append(n2)61    with pytest.raises(ValueError):62        s = Scene(nodes=nodes)63    n3.children = []64    n2.children.append(n3)65    n3.children.append(n2)66    with pytest.raises(ValueError):67        s = Scene(nodes=nodes)68 69    # Test node accessors70    n1 = Node()71    n2 = Node()72    n3 = Node()73    nodes = [n1, n2]74    s = Scene(nodes=nodes)75    assert s.has_node(n1)76    assert s.has_node(n2)77    assert not s.has_node(n3)78 79    # Test node poses80    for n in nodes:81        assert np.allclose(s.get_pose(n), np.eye(4))82    with pytest.raises(ValueError):83        s.get_pose(n3)84    with pytest.raises(ValueError):85        s.set_pose(n3, np.eye(4))86    tf = np.eye(4)87    tf[:3,3] = np.ones(3)88    s.set_pose(n1, tf)89    assert np.allclose(s.get_pose(n1), tf)90    assert np.allclose(s.get_pose(n2), np.eye(4))91 92    nodes = [n1, n2, n3]93    tf2 = np.eye(4)94    tf2[:3,:3] = np.diag([-1,-1,1])95    n1.children.append(n2)96    n1.matrix = tf97    n2.matrix = tf298    s = Scene(nodes=nodes)99    assert np.allclose(s.get_pose(n1), tf)100    assert np.allclose(s.get_pose(n2), tf.dot(tf2))101    assert np.allclose(s.get_pose(n3), np.eye(4))102 103    n1 = Node()104    n2 = Node()105    n3 = Node()106    n1.children.append(n2)107    s = Scene()108    s.add_node(n1)109    with pytest.raises(ValueError):110        s.add_node(n2)111    s.set_pose(n1, tf)112    assert np.allclose(s.get_pose(n1), tf)113    assert np.allclose(s.get_pose(n2), tf)114    s.set_pose(n2, tf2)115    assert np.allclose(s.get_pose(n2), tf.dot(tf2))116 117    # Test node removal118    n1 = Node()119    n2 = Node()120    n3 = Node()121    n1.children.append(n2)122    n2.children.append(n3)123    s = Scene(nodes=[n1, n2, n3])124    s.remove_node(n2)125    assert len(s.nodes) == 1126    assert n1 in s.nodes127    assert len(n1.children) == 0128    assert len(n2.children) == 1129    s.add_node(n2, parent_node=n1)130    assert len(n1.children) == 1131    n1.matrix = tf132    n3.matrix = tf2133    assert np.allclose(s.get_pose(n3), tf.dot(tf2))134 135    # Now test ADD function136    s = Scene()137    m = Mesh([], name='m')138    cp = PerspectiveCamera(yfov=2.0)139    co = OrthographicCamera(xmag=1.0, ymag=1.0)140    dl = DirectionalLight()141    pl = PointLight()142    sl = SpotLight()143 144    n1 = s.add(m, name='mn')145    assert n1.mesh == m146    assert len(s.nodes) == 1147    assert len(s.mesh_nodes) == 1148    assert n1 in s.mesh_nodes149    assert len(s.meshes) == 1150    assert m in s.meshes151    assert len(s.get_nodes(node=n2)) == 0152    n2 = s.add(m, pose=tf)153    assert len(s.nodes) == len(s.mesh_nodes) == 2154    assert len(s.meshes) == 1155    assert len(s.get_nodes(node=n1)) == 1156    assert len(s.get_nodes(node=n1, name='mn')) == 1157    assert len(s.get_nodes(name='mn')) == 1158    assert len(s.get_nodes(obj=m)) == 2159    assert len(s.get_nodes(obj=m, obj_name='m')) == 2160    assert len(s.get_nodes(obj=co)) == 0161    nsl = s.add(sl, name='sln')162    npl = s.add(pl, parent_name='sln')163    assert nsl.children[0] == npl164    ndl = s.add(dl, parent_node=npl)165    assert npl.children[0] == ndl166    nco = s.add(co)167    ncp = s.add(cp)168 169    assert len(s.light_nodes) == len(s.lights) == 3170    assert len(s.point_light_nodes) == len(s.point_lights) == 1171    assert npl in s.point_light_nodes172    assert len(s.spot_light_nodes) == len(s.spot_lights) == 1173    assert nsl in s.spot_light_nodes174    assert len(s.directional_light_nodes) == len(s.directional_lights) == 1175    assert ndl in s.directional_light_nodes176    assert len(s.cameras) == len(s.camera_nodes) == 2177    assert s.main_camera_node == nco178    s.main_camera_node = ncp179    s.remove_node(ncp)180    assert len(s.cameras) == len(s.camera_nodes) == 1181    assert s.main_camera_node == nco182    s.remove_node(n2)183    assert len(s.meshes) == 1184    s.remove_node(n1)185    assert len(s.meshes) == 0186    s.remove_node(nsl)187    assert len(s.lights) == 0188    s.remove_node(nco)189    assert s.main_camera_node is None190 191    s.add_node(n1)192    s.clear()193    assert len(s.nodes) == 0194 195    # Trigger final errors196    with pytest.raises(ValueError):197        s.main_camera_node = None198    with pytest.raises(ValueError):199        s.main_camera_node = ncp200    with pytest.raises(ValueError):201        s.add(m, parent_node=n1)202    with pytest.raises(ValueError):203        s.add(m, name='asdf')204        s.add(m, name='asdf')205        s.add(m, parent_name='asdf')206    with pytest.raises(ValueError):207        s.add(m, parent_name='asfd')208    with pytest.raises(TypeError):209        s.add(None)210 211    s.clear()212    # Test bounds213    m1 = Mesh.from_trimesh(trimesh.creation.box())214    m2 = Mesh.from_trimesh(trimesh.creation.box())215    m3 = Mesh.from_trimesh(trimesh.creation.box())216    n1 = Node(mesh=m1)217    n2 = Node(mesh=m2, translation=[1.0, 0.0, 0.0])218    n3 = Node(mesh=m3, translation=[0.5, 0.0, 1.0])219    s.add_node(n1)220    s.add_node(n2)221    s.add_node(n3)222    assert np.allclose(s.bounds, [[-0.5, -0.5, -0.5], [1.5, 0.5, 1.5]])223    s.clear()224    s.add_node(n1)225    s.add_node(n2, parent_node=n1)226    s.add_node(n3, parent_node=n2)227    assert np.allclose(s.bounds, [[-0.5, -0.5, -0.5], [2.0, 0.5, 1.5]])228    tf = np.eye(4)229    tf[:3,3] = np.ones(3)230    s.set_pose(n3, tf)231    assert np.allclose(s.bounds, [[-0.5, -0.5, -0.5], [2.5, 1.5, 1.5]])232    s.remove_node(n2)233    assert np.allclose(s.bounds, [[-0.5, -0.5, -0.5], [0.5, 0.5, 0.5]])234    s.clear()235    assert np.allclose(s.bounds, 0.0)236