흔한생각 (recording)/Dynamo

dynamo 응용! 코로나 바이러스 만들고 blender 로 표면 다듬기

hnanmal 2022. 5. 1. 03:36
300x250

지난 2년 동안 참 오랫동안 코로나 바이러스가 사람들을 고생시켰죠.

어떻게 생겨 먹은 놈인가 해서 이미지를 찾아봤습니다.

 

둥근 공 같이 생겼는데, 뾰족 뾰족 뭐가 표면에 많이 돋아나 있네요.

저 뾰족한 부분이 스파이크 단백질이라는 부위이고, 우리 몸의 세포들에 있는 수용체에 결합하는 역할을 한다고 합니다.

 

 

 

다이나모로 COVID19 모델링하기

저는 다이나모를 좋아합니다.

형상적, 비형상적을 막론하고, 데이터를 처리하는 코드를 빠르게 짜고 피드백할 수 있기 때문입니다.

 

그래서 다이나모를 이용해서 코로나 바이러스의 모습을 모델링해보면 어떨까 하는 생각을 했습니다.

저도 모르게 해버렸어요.

 

머릿속으로 일단 동그랗게 생긴 몸통부터 만들어야겠다는 생각을 한 뒤 다이나모를 켰습니다.

 

 

 

몸만들기

바이러스 몸체에서 가장 큰 부피를 차지하고 있는 몸통을 만들어봅시다.

 

정말 간단합니다. 좌표평면의 원점을 중심으로 하는 구를 만들어 주기만 하면 되거든요.

다만, 뒤쪽의 작업을 위해서 솔리드로서의 구가 아닌, 구의 표면을 따로 떼어서 작업해야 하니, explode 노드로 처리해 줍시다.

 

 

 

스파이크 돌기 만들기

그다음에는 돌기를 만들어봅시다.

 

 

 

돌기 위치 잡기

돌기를 구의 표면에 어떻게 배치하면 좋을 까요?

 

여러 가지 방법이 있겠는데, 여기서는 어떤 표면의 상대적 위치 좌표를 나타내는 uv 노드를 이용해 봅시다.

 

쉽게 말하면 표면의 가로 방향을 u, 세로 방향을 v로 보고, 가로 전체의 길이를 1이라고 가정하고 세로 전체의 길이도 1이라고 가정해봅시다.

 

 

0부터 1 사이의 어떤 수를 u축의 위치와 v축의 위치를 찾을 수 있겠죠?

 

그때부터는 바로 좌표평면처럼 생각할 수 있습니다.

 

0부터 1 사이의 어떤 수를 u축의 위치와 v축의 위치에 대입하면 해당 위치에 포인트를 찍어주게 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

돌기(스파이크)의 줄기 만들기

 

줄기의 시작점은 이미 확보해 두었습니다.

 

그렇다면 줄기의 길이만큼, 그리고 아까 만든 (구의 중심으로부터 비롯된) 벡터를 활용해서 줄기의 끝점을 만들어 낼 수 있겠죠?

 

 

줄기를 만들기 위해 저는 Cone.ByPointsRadii노드를 사용했습니다.

 

Cone.ByPointsRadii 노드는 startPoint와 endPoint를 입력받은 다음, startPoint에서는 startRadius에 해당하는 원을 그리고, endPoint에서는 endRadius에 해당하는 원을 그린 후, 두 원을 이용해서 콘 형상을 만들어 주는 노드입니다.

 

위 그림의 코드를 한번 따라 해 보세요. 각 노드의 기능에 대한 설명이 없지만 따라 해 보면 각 부분이 무슨 역할을 하는지 금방 감이 오실 거예요.

 

 

만약 이해 안 되는 부분이 있다면 따로 댓글 남겨주세요.

 

중요한 핵심은, 스파이크 줄기를 만들기 위해 구의 표면에 있던 점들을, 구의 바깥을 향하는 방향으로 일정 길이만큼 이동시켰다는 것입니다.

 

 

 

돌기(스파이크) 끝부분 만들기

 

줄기를 만든 방식을 그대로 응용하면, 넓적한 끝부분의 형상도 쉽게 만들어 낼 수 있습니다.

 

여기서도 마찬가지로, ‘줄기의 끝점’을 넓적한 부분의 시작점으로 삼고, 이 시작점을 적정 거리만큼 이동시켜 끝점을 만들어내면 되겠죠?

 

 

그렇게 만들어진 두 개의 점을 다시 Cone.ByPointsRadii노드로 전달해주고, 적당한 반지름을 입력해 주면 드디어 코로나 바이러스의 전체 형상이 완성됩니다.

 

 

흠 너무 기계 같은 모습이군요.

 

 

다이나모가 만들어낸 형상은, 레빗에서도 가상의 파란선으로 표현됩니다.

 

 

 

만들어진 코로나바이러스를 레빗 DirectShape으로 전환하기

다이나모로 각고의 노력을 거친 끝에 코로나 바이러스의 형상을 만들어내는 데 성공했습니다. 그런데 이 형상은 다이나모를 끄면 곧바로 사라지는 물거품과도 같기 때문에, 좀 더 견고한 데이터로 저장해주고 싶은 마음이 드는군요.

 

그래서 이 형상을 레빗으로 옮겨버리기로 했습니다.

 

 

DirectShape.ByGeometry노드를 사용하면 제가 세운 계획을 현실로 만들 수 있습니다.

위의 코드까지 똑같이 따라 하면 레빗에도 형상이 생길 겁니다.

 

 

바로 이렇게요!!!

 

그런데 선들이 너무 많이 겹쳐 보여서 잘 알아보기는 어렵네요.

다른 프로그램으로 옮겨서 더 자세히 살펴보고 싶습니다.

 

 

 

Blender 3d로 보내기

 

레빗 화면 좌상단의 File버튼을 누르고, Export 탭으로 가서 FBX를 선택해 줍니다.

fbx는 3d 프로그램 간의 호환을 위해 만들어진 파일 포맷이라고만 일단 이해하세요.

 

 

파일 이름을 정하고 잘 저장해 줍니다.

 

 

이제 blender를 실행해준 뒤, File > Import > FBX를 눌러줍시다.

 

 

저장해둔 경로로 가서 파일 선택 후 Import FBX.

 

 

짠 import 되었습니다. 그런데 크기가 너무 작네요? 레빗에서 작게 만들어서 그렇습니다.

크기야 키워주면 되겠죠?

 

 

단축키 s를 이용해 바이러스의 사이즈를 키워줍시다~.

 

 

 

엣지를 부드럽게 만들기

너무 각지게 모델링 된 바이러스의 표면을 좀 부드러운 느낌으로 바꿔주고 싶은데요.

 

 

그럴 땐 위 gif처럼 상단의 Sculpting 메뉴로 이동한 뒤, 우측의 Remesh기능을 이용해 다듬어 주면 됩니다. 분위기가 확 바뀌었죠?

 

 

 

여러 개 복사해서 공기 중 떠다니는 바이러스 샷 찍기

 

여러 개 배치한 후에 그림처럼 공기 중 바이러스를 확대한 듯한 설정샷 하나 찍고 마무리했습니다~.

 

 

 

 

 

 

 

 

 

따라 해 보시면 꽤 재밌을 거예요~!

반응형