여러사이트를 돌아다니며 사람이 T자로 서있는 데이터를 찾으려고 노력해보았다.
그 결과 24개의 데이터를 더 구할 수 있었다.
하지만 해당 데이터는 아래와 같이 mtl 파일이 아닌 jpg 파일에 색상정보를 저장하고 있었다.
그래서 obj + mtl 파일을 렌더링 하는 코드로 렌더링 할 시 색상 정보가 나오지 않는 문제가 발생한다. 그래서 코드를 obj + jpg 형식으로 수정해야한다.
전체 코드를 다 담기엔 너무 크니, 핵심 코드만 기록하겠다.
jpg 파일의 형식이 "tex-폴더명.jpg" 인 것을 이용하여 해당 jpg 파일명을 저장한다.
folder_name = os.path.basename(os.path.dirname(args.obj))
texture_file_name = 'tex-' + folder_name + '.jpg'
texture_filepath = os.path.join(os.path.dirname(args.obj), texture_file_name)
bpy.data.images.load(texture_filepath)를 사용하여 텍스처 파일을 Blender에 로드한다.
이렇게 로드된 이미지는 img 변수에 저장한다.
img = bpy.data.images.load(texture_filepath)
bpy.data.materials.new('TexMat')를 사용하여 새로운 머티리얼을 생성한다. 이 머티리얼은 mat 변수에 저장한다.
mat = bpy.data.materials.new('TexMat')
Blender의 머티리얼 시스템은 "노드" 기반이다. 각 머티리얼은 여러 노드로 구성될 수 있으며, 이 노드들은 서로 연결되어 복잡한 텍스처나 쉐이더 효과를 만든다.
mat.use_nodes = True를 설정하여 이 머티리얼에서 노드 사용을 활성화한다.
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
ShaderNodeTexImage 노드를 생성하여 머티리얼에 텍스처 이미지를 연결한다. 그런 다음, 이 텍스처 노드의 출력을 머티리얼의 'Base Color' 입력에 연결하여 텍스처가 머티리얼에 표시되도록 한다.
texImage = mat.node_tree.nodes.new('ShaderNodeTexImage')
texImage.image = img
mat.node_tree.links.new(bsdf.inputs['Base Color'], texImage.outputs['Color'])
마지막으로, 이 머티리얼을 오브젝트에 적용한다. 오브젝트에 이미 머티리얼 슬롯이 있으면 해당 슬롯에 머티리얼을 할당하고, 없으면 새로운 슬롯을 생성하여 머티리얼을 할당한다.
if obj.data.materials:
obj.data.materials[0] = mat
else:
obj.data.materials.append(mat)
나머지 부분은 fbx 변환 코드와 같다.
아래 사진처럼 기존 모델과 추가된 모델이 잘 렌더링 된 모습을 볼 수 있다.
아래는 추가된 모델의 렌더링 결과이다.
조금 더 자세히 보자
렌더링이 잘 된 모습을 볼 수 있다.
이제 렌더링된 사진들을 가지고 학습을 시켜보겠다.