Knowhow/Vision

Unit cube vertices, faces index (pytorch3d cube 만들기)

침닦는수건 2024. 8. 5. 15:47
반응형

open3d는 다음과 같은 method가 주어져서 cube를 만드는게 뚝딱이다. 

cube = o3d.geometry.TriangleMesh.create_box()

 
아쉽게도 pytorch3d에는 이게 없어서 직접 cube의 8개 vertex와 face를 지정해준 뒤 직접 만들어야 하는데, 이게 매번 할 때마다 엄청 귀찮다. 
 
정육면체니까 6개 face만 만들면 될 것 같지만 triangle face기 때문에 12개의 face를 만들어야 하고, 구성하는 vertex indexing 순서에 따라 normal이 뒤집힐 수도 있기 때문에 렌더링까지 잘되게 하려면 face 방향도 매번 신경써야 한다. 엄청 귀찮다...
 
반복 노동을 줄이기 위해 복사 붙여넣기 용으로 기록해둔다.
 

from pytorch3d.structures import Meshes
from pytorch3d.renderer import TexturesVertex

vertices = 0.5 *torch.tensor([[[1, 1, 1], [1, 1, -1], [1, -1, 1], [1, -1, -1],
	   						   [-1, 1, 1], [-1, 1, -1], [-1, -1, 1], [-1, -1, -1]]], dtype=torch.float32).reshape(-1, 3).cuda()
faces = torch.tensor([[[0, 1, 2], [1, 2, 3], [0, 4, 6], [0, 2, 6],
					   [0, 4, 1], [4, 1, 5], [2, 3, 6], [6, 7, 3], 
					   [5, 4, 6], [6, 7, 5], [5, 7, 1], [3, 7, 1]]], dtype=torch.int64).reshape(-1, 3).cuda()

textures = TexturesVertex(vertices[None])
cube = Meshes([vertices], [faces], textures)

 

반응형