Unity/Unity Industrial

[Unity Pixyz] CAD 메타데이터를 유니티에서 사용하는 방법

pnltoen 2024. 1. 1.
반응형

CAD metadata

Unity Technologies


 

서문

이전에 작성한 "CAD 데이터의 최적화를 통한 실시간 백서 리뷰" 이 후 Metadata 관련 정리글을 작성해보고자 한다. 단순하게 유니티에서 어떻게 쓸 수 있어요!는 문서에 잘 나와있으니... 실제 겪게되는 문제점을 함께 기술하면서 진행하고자 한다.

 

나사 규격이랑 각 부 명칭은 기억이 안나서 아래의 링크를 참고하였다.

 

 

나사 불량(흠집·크랙·굴곡 등) 관찰의 효율화 | 자동차·항공 관련 업계 | 4K 디지털현미경 해석

나사란 원통 형상 축의 측면에 나선형의 홈을 낸 고정 부품입니다. 일반적으로 작은 나사는 비스로 불리기도 하며, 너트와 세트로 사용하는 것은 볼트라고 불립니다. 또한, 목공용으로 나사부의

www.keyence.co.kr

 

 

나사 규격표|MISUMI|미스미 종합 Web 카탈로그

 

kr.misumi-ec.com

 

이 후 간만의 모델링이여서 다음의 영상 또한 참고하였다.

 

 

결과적으로 Fusion 360에서 m2 screw 하나 모델링 후 metadata를 추가하는 것 부터 시작하려고 했는데... 메타데이터는 나사 규격표 보고 넣어야 겠다 했는데... threads 누르자마자 fusion 360이 종료되었다 ^^... 핸드폰 번호 바꾸고 로그인 부터 잘 안되서 스트레스 였는데 파일 날라가니까... 정신줄도 같이 날라감...

 

 

자동저장은 정상적으로 켜져있고 문서를 참고하여 확인해보았는데 CrashRecovery 폴더 자체가 없다. 혹시 몰라서 숨김인가 하고 봤는데 숨김 폴더에도 없음.

 

How to find recovery files in Fusion 360

 

www.autodesk.com

 

빠른포기 후 모델링에서 도망치자... 서론이 길었다.

본문

모델 선정 및 metadata 확인하기

매번 사용하는 Demo Brake 파일을 사용해보도록 하자.

 

 

여기서 "메타데이터란?"과 관련해서 한번 생각해보고자 한다. 메타데이터 자체의 뜻은 데이터를 구조화한 데이터 형태를 말한다. CAD에서 쉽게 이야기 하면, 일반적으로 각 부품의 정보를 담고 있다. 예를 들어서, 위의 폴더의 경우, 각각의 볼트가 어떠한 규격을 따르기 때문에 어떤 부품과 체결이 되는지, 누가 모델링을 했는지, 제작년도가 어떻게 되는지? 등의 정보는 담지 못한다. 단순한 데이터라면 파일명으로 저장할 수 있으나, 위와 같이 많은 데이터 추가적으로 조직이 원하는 데이터를 담고 싶을 때는 정리하는 것이 어려운 편이다.

 

메타데이터는 일반적으로 Import 시 import Metadata 설정을 체크함으로써 가져올 수 있다.

 

이렇게 가져온 메타데이터는 metadata 컴포넌트에서 확인할 수 있다.

 

 

사실 모델링을 잘 안하지만... 이전에 모델링을 했을 때도 metadata를 작성하거나 관리한 적은 없었다. 비단 나만 그런 것이 아니라 실제 현업에 계신 분들을 만나보면 보통 도면이 있으면 다행... 업그레이드가 반영되지 않은 경우가 많고 CAD 모델이 있어도 실제 업데이트가 되지 않은 경우가 대다수이다. 원점 조차 맞춰지지 않았는데 메타데이터가 있는 경우가 많지 않고 대부분 CAD 파일을 받는 입장이기 때문에 이런 부분을 강력하게 건의할 수가 없다고 하였다.

 

조금 더 CAD 메타데이터를 알아보던 중 SAP에서 작성한 CATIA V5 Assembly 문서를 보게 되었다.

 

CATIA V5 Assembly - SAP Documentation

Common Defines the general settings including tessellation (arrangement and density of the polygons)  NoteIf you enter 0 (zero) for any of the tessellation settings, they are not taken into effect during the tessellation process. End of the note. Geometry

help.sap.com

 

본문의 내용을 통해, 메타데이터는 각 부품에 저장할 수도, 최상위 (유니티로 이야기 하면 parent) 오브젝트에 저장할 수도 있는 것으로 확인하였다. 관련해서 Pixyz Studio와 Pixyz Plugin에서 비교를 해보았는데 메타 데이터 값을 잘 읽어오는 것을 확인하였다. 

 

 

 

살짝 돌아와서 현업에서의 문제점을 보자. 백서에서 기재되어 있었지만 가장 큰 문제는 적절한 데이터가 부족하다는 점이다. 따라서 대부분의 사용자는 metadata가 없는 CAD 파일을 마주하게 될 것 이다. 이 때 metadata를 수정하고 추가하는 방벙데 대해 정리해보자.

 

CAD 프로그램에서 Metadata 값 수정 및 추가/제거

 

CAD 프로그램에서 각 파트를 저장할 때 값을 지정해줄 수 있다. 각각의 방법을 정리할 경우 글의 길이가 너무 길어지기 때문에 해당 내용은 다루지 않을 예정이다.

 

Pixyz Studio 프로그램에서 Metadata 값 수정 및 추가/제거

GUI를 통한 수정 (Basic)

 

Pixyz Studio의 경우 GUI 및 Python Scripting를 통해 해당 값을 수정할 수 있다.

GUI의 경우 아래의 gif와 같이 손쉽게 가능하다.

 

 

Python Scripting (Advanced)

 

파이썬 스크립팅을 하기 전에 다음의 문서를 확인하는 것을 추천한다. 무턱대고 API 문서를 확인한다면 entity, metadata, occurence에 대한 개념을 이해하기 어렵다. How to Python script in Pixyz 문서를 확인해보자.

 

How to Python script in Pixyz | Built with Notion

Whether you want to script short helper functions in Pixyz Studio or advanced data preparation scenarios for Pixyz Scenario Processor, this document should help you get started or improve your knowledge.

pixyz.notion.site

 

파이썬 스크립팅과 관련된 자세한 내용은 별도의 문서로 작성할 예정이다. 노션 문서에도 예시 코드가 있지만 다음과 같이 조금 변경해보았다.

 

from pxz import *

occurrences = scene.findByProperty('Name', '.*') #씬 전체에 있는 파트의 occurrences를 리스트로 받음
metadataComponents = scene.getComponentByOccurrence(occurrences, scene.ComponentType.Metadata) #메타데이터가 없는 경우 0 반환
metadataDefinitions = scene.getMetadatasDefinitions(metadataComponents) #전체 메타데이터

for occurrence, definition in zip(occurrences, metadataDefinitions):
	print(f'{scene.getNodeName(occurrence)} contains {len(definition)} metadata')
	if len(definition) == 0:
		metadata = scene.addComponent(occurrence, scene.ComponentType.Metadata)
		scene.addMetadata(metadata, "Author", "pnltoen")
	else:
		metadata = scene.getComponent(occurrence, scene.ComponentType.Metadata)
		scene.addMetadata(metadata, "Author", "pnltoen")
		for propValue in definition:
			print(f'{propValue.name}:{propValue.value}')

 

노션에 있는 샘플 스크립트는 단순하게 오브젝트가 몇개의 메타데이터를 갖고 있는지 그리고 각 메타데이터가 어떠한 값을 갖고 있는지만 출력할 수 있다.

 

위의 조금 수정한 코드는 메타데이터가 없을 경우, 메타데이터 컴포넌트를 추가하고 메타데이터에 Author : pnltoen 값을 추가한다. 만약 메타데이터가 있을 경우에는 메타데이터 컴포넌트를 가져오고 동일하게 Author : pnltoen를 추가한다.

 

 

Pixyz Plugin & Unity Editor에서 Metadata 값 수정 및 추가/제거

GUI를 통한 수정 (Unsupported)

 

기본적으로 Editor - Inspector에서 메타데이터를 확인할 수 있다. 하지만 Pixyz Plugin은 Studio와 달리 GUI를 통한 메타데이터 수정을 지원하지 않는다 (Read-Only)

 

 

C# Scripting (Advanced?)

 

간단한 C# 코드를 통하여 Studio에서 작동하는 것과 동일하게 만들어보았다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Pixyz.UnitySDK.Components;

public class usingMetadata : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //Metadata metadata = gameObject.GetComponent<Metadata>();
        ToAllChilds(transform);
    }

    void ToAllChilds(Transform parent)
    {
        for (int i = 0; i < parent.childCount; i++)
        {
            Metadata metadata = parent.GetChild(i).gameObject.GetComponent<Metadata>();
            if (metadata != null)
            {
                metadata.addOrSetProperty("Author", "pnltoen");
            }
            ToAllChilds(parent.GetChild(i));
            /*string name = metadata.getProperty("PartNumber");
            if (name != null)
            {
                Debug.Log(name);
            }*/
            //GameObject child = parent.GetChild(i).gameObject;
        }
    }
}

 

주석 부분은 오브젝트 이름을 가져오기 위해 테스트 해본 부분이다. 위의 코드를 실행해보면 메타 데이터가 있을 경우 동일하게 Author : pnltoen을 추가하는 것을 확인할 수 있다.

 

 

여기서 주목해야 할 부분이 있다. Pixyz Plugin의 using metadata는 저장이 되지 않는다. 따라서 런타임 도중에만 저장이 되고 실행이 되는 것으로 이해하는 것이 빠르다.

 

결론 

 

구분 특징 결론
CAD 소프트웨어에서 직접 수정
(모델러)
파일의 유지 보수 및 배포 쉬움 매우 추천
Pixyz Studio에서 수정
(개발자 || 엔지니어)
별도의 도면 정보 습득 필요
자동화 및 최적화 진행 가능
상황에 따른 추천
Pixyz Plugin에서 수정
(개발자 || 엔지니어)
런타임에서만 수정사항 반양 UI의 경우 때에 따라 유용할 수도...?

 

기본적으로 CAD 데이터의 수정은 모델러가 계속 진행하는 것이 맞다고 생각한다. 만약 엔지니어나 개발자가 유니티 또는 Pixyz에서 수정을 한다면...? 그 순간은 빠르게 업무가 진행될 수 있으나 이러한 파일을 재차 업데이트 하는 과정이 필요하다. 

 

예를 들어서 파트 A에 메타데이터 추가 및 최적화를 모델러가 진행한다고 하자. 그 경우 기존 프로세스를 따라 파트 업데이트, 어셈블리, 최종 배포의 과정을 가져갈 수 있다. 하지만 Pixyz Studio 및 Plugin에서 개발자 또는 엔지니어가 직접 수정할 경우 일반적으로 다시 모델러에게 파일 공유가 되기 쉽지 않다. 그 결과 모델러는 최신이라고 믿지만 실제 최신 파일이 아닌 파트를 수정 및 업데이트 하게 되고 이는 비효율적인 과정이 될 것으로 생각된다.

 

물론 클라우드 및 VCS로 업데이트 하는 방법이 있지만... 이는 조금 나중에 정리해서 올릴 예정. 개인적으로는 업무 역할을 분할해서 맡은 사람이 쭉 맡는게 좋을 것으로 생각된다.

반응형

댓글