Sunday, September 12, 2010

dynamic component 와 Ruby Plugin(4)

좀더 고난이도인 작업을 시도해봤다.
사실 여기에 등장하는 모델 자체는 dynamic component를 접한지 얼마 안되어서 만든것이다. 초기에 멋도 모르고 가능성에 놀라가면서 만들었던건데 당시에는 지금 사용하고 있는 loft  기능을 몰랐기 때문에 면을 만들지 못하고 선형부재들의 복사물로 되어 있던 모델이다. 다른 작업을 하다가 이 모델이 생각이 났고 Loft by spline 기능을 통해 마침내 자신의 온전한 모습을 갖게된 것이다. 다시 Curviloft 1.0c 링크 .
더불어 수식을 조금 수정해서 비슷하지만 다른 모델도 하나더 만들어냈다.


간단하게 원리를 설명하면

1. 최초의 단면 프로파일이 될 두개의 선을 그려 두 선이 만나는 지점을 각각의 기준점으로 잡아 콤포넌트를 정의한다

2. 원형복사 식을 이용해 복사를 해주고, 복사되면서 한바퀴 돌면 두콤포넌트의 높이 합만큼  위로 올라갈 수 있게 Z좌표도 지정을 해준다.

3. Z에 수식을 걸수 있고, 적절한 LenZ 및 콤포넌트의 폭(LenX)에도 수식을 지정해주고 서로 어긋나지 않게 잘 더하고 빼준다.

4. 적절히 복사할 개수를 늘려 준다.

5. 원하는 형태가 되면 콤포넌트 내부로 들어가모두 선택 후 ctrl+c, 밖으로 나와 paste in place 한뒤 explode 한다.(반드시 이렇게 해야 한다)
앞서 설명한 적이 있는데 제자리에 붙여넣기를 하지 않아도 어차피 제자리로 돌아오는데 콤포넌트 수가 많아서 연산하느라 오랫동안 버벅될 소지가 있다. 혹은 콤포넌트 자체를 옆으로 복사한 후 explode를 하는 방법도 있겠는데 이것도 최상위의 component를 explode하면 제자리로 돌아가면서 버벅될 가능성이 크다. 이 경우는 안에서부터  explode 하면서 나오는게 해결책.
이 모두는 콤포넌트가 수식으로 constrained 되어 있기 때문이니.

6. 선택된 상태 그대로 옆으로 적당히 이동시킨다.

7. Curviloft 의 loft by spline 기능을 이용해 면을 완성한다.
이때 한꺼번에 면을 만들려면 면이 깨지는 수가 있다.
적당히 나눠서 해준뒤 나중에 합친다.
(앞서 말한 바 있지만 이렇게 하면 연결부위가 자연스럽지 못하게 되서 다시 손을 봐줘야 한다. dynamic component 와 Ruby Plugin(2) 포스트에서 설명을 한바 있다.)





모델을 만든지 한달정도 된것 같은데 수식을 다시 이해하려니 시간이 좀 걸렸다.
가장 중요한 한가지만 체크해보자.

below 의 LenZ =450+500*sin(x/20)-300*sin(x/20) 인데(수식 자체는 임의로 지정)
450은 원래의 길이이고 뒷부분 수식은 모두 변위가 되겠다.

한바퀴 돌아 올라가면 이 길이의 변위가 바로 아래에 있는 upper와 간섭을 일으키므로
upper 의 LenZ=450-500*sin(x/20)+300*sin(x/20) 로 위 변위만큼 빼준다.
한바퀴 돌면 어차피 한주기를 도는 셈이라 다른 수식의 필요 없이 간단히 해결

Z에 일부 같은 모양의 수식이 있지만 그건 임의로 넣은 것이다.
각각의 내각이 15*copy 이므로 한바퀴엔 24개의 복사본이 배열된다.

보다시피 돌아올라가면서 각 콤포넌트의 높이(LenZ)가 바뀌고 높낮이위치(Z)도 바뀐다. upper의 LenX가 홈의 깊이를 나타내는데 여기 함수를 걸어 깊이 또한 변하게 해서 움푹파인 홈의 깊이와 높이가 모두 바뀐다는 것을 알 수 있다.


이미지를 더 살펴보자. 다음의 세가지 타입을 소개한다.


첫번째는 이 모델의 초기 프로토 타입정도랄 수있는데 한바퀴만 도는 타입이다.
extrude edge by rails 루비로도 시도 해봤는데 아주 안되는 건 아닌데 자연스러운 곡면이 만들어 지지 않았다. 그래서 시도하게 된 모델. 저 자연스러운 곡면이라니@@




두번째는 위의 설명에 등장한 모델







마지막은 위의 모델을 조금 변경한 것으로
upper 의 LenX 즉 깊이 변수를 상수(500)로 바꿔준 것이다.
깊이감은 더해졌지만 깊이의 변화는 없는 형태되겠다.







수식 자체는 별로 까다로울 것이 없어 보이므로 사실 크게 어려운 작업은 아니다.
단면 그릴때 라인의 세그먼트를 고려하지 않고 작업한 탓에 로프트 작업시 조금 시간이 걸린것만 빼면 별 무리가 없었다.
조금 아쉬운 것은 전체 실린더의 볼륨에 변화를 줄 수 없단 점.
회전 반경자체 늘리고 줄이는 건 일도 아닌데 위로 올라가며 형태를 유지하며 변화가 되는 것을 말한다. 아주 불가능한 건 아닌데(비슷한 수식을 만들어 놓은게 있긴 있다 ^^) 손이 워낙 많이 가는 종류라 일단 보류. 언젠가 필 받으면 위로 올라가면서 다이내믹하게 변하는 볼륨의 모델이 탄생하게 될지도. @@

DC로 또 한 걸음 나간 기분이다.


ps. 모델의 표면이 (매우)조금 울퉁불퉁한 곳이 있는데 이는 로프트를 할때 부분으로 나눠서한뒤 붙인 흔적이다. 원칙적으로 수정이 가능한데(일부는 수정을 해서 올린것 임) 모델 단면프로파일의 세그먼트 수가 많아서  면이 세밀하게 분할된 관계로 용량이 커져 작업이 용이하지 못해서 일부는 그냥 뒀다. 다시 말하면 원칙적으로 수정이 가능하며 해당 플러그인이 아직 베타 버전이므로 향후 로프트 과정에 오류가 줄어들게 된다면(순전히 나만의 바람;;) 문제가 될 것이 없다.

이거 추가..다른 쓸모가 있어서..;

No comments:

Post a Comment