https://www.youtube.com/watch?v=rgMfNBi_lM8

목표. Goal

샘플의 와이어는 실린더나 박스형태의 폴리곤으로 되어있습니다. 이것을 spline으로 변경하고 Sweep을 이용한 구조로 수정합니다.

샘플 출처. Sample link

Pirate Ship phase-2 | 3D model

파일 정리. Organize unnecessary content

FBX를 불러오면 모델링 하나와 많은 null 이 있습니다. 모델링만 남기도 다 지워주세요.

모델링은 Polygon Group to Object 로 분리하고 JS Random Display Color 를 이용해서 색을 변경해주세요. 이중 와이어 정리를 해볼 것이기에 와이어만 골라내 주세요.

https://www.cgtrader.com/free-3d-models/vehicle/other/pir-c881e7eb-29f1-41e6-8ac8-58afadb55e96

https://www.cgtrader.com/free-3d-models/vehicle/other/pir-c881e7eb-29f1-41e6-8ac8-58afadb55e96

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1bddb2de-1a7e-413f-b8d6-338912f0b0fb/Untitled.png

wire_only.zip

스크립트 실행 방법. How to run script.

https://youtu.be/33UYJ0LHGeM

스크립트 실행 과정. Process

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c8d49958-a5e1-451e-a4f0-f64786b5efc1/screenshot_138.png

  1. 오브젝트의 한 포인트를 기준으로 다른 포인트들과의 거리를 구합니다. (0과1의 거리), (0과2의 거리), (0과3의 거리)...
  2. 경우의 수만큼 두 점간의 거리를 비교하여 0.5cm 보다 작다면 하나의 그룹으로 판단할 수 있습니다. [0,1,2,3,4], [5,6,7,8,9]...
  3. 그렇게 찾아진 그룹들의 포인트 위치값을 모두 더하고 포인트 수로 나누면 중심위치값이 나옵니다. 포인트 포지션은 c4d.Vector(0,0,0) 타입이고 더하고 나누는 과정에서 같은 성분끼리 계산합니다. 위 그림으로 보면 총 5개의 그룹을 찾을수 있고, 5개의 중심점의 위치를 찾습니다.
  4. 찾은 값은 Z 값을 기준으로 정렬하고, X 값을 기준으로 다시 정리합니다. 정렬을 하지 않으면 스플라인 생성시 꼬인 모양이 됩니다. 이 정렬로 완벽히 해결되진 않지만, 대부분 정상적인 스플라인이 생성됩니다.
  5. 찾은 중심점의 수와 위치값을 기반으로 Spline Object 를 생성합니다.
  6. 1~5까지의 과정을 와이어 오브젝트 수 만큼 반복시킵니다.
  7. 꼬여있는 스플라인을 찾아 다시한번 정렬합니다.