트위터



2018/10/08 00:19

Houdini 후디니 vex 엘레멘트리넘버(elemnum)에 대해서 Houdini Memory

항상 ptnum이나 primnum을 써왔고
필요할때는 이를 id 로 바꿔 써왔다
예를들면 i@id = @ptnum;  이런식으로.

그런데 오늘 본 짤막한 영상에서 신선한 충격을 받았기에
이후에도 쓸 일이 있겠다 싶어 포스팅으로 남겨본다.

@elemnum
(elementry number)


사용처는 wrangle 의 작동방식(Run Over)이 Number 로 되었을 때
@elemnum 과 @numelem 을 사용할 수 있다.
일단 Number 작동방식이 되면 지정한 Number Count 만큼
작성한 전체 vex 구문이 반복된다.

즉, Number Count가 100이면 총 100번을 반복한다는 의미가 되고, 이것이 @numelem 이다.
반복 될 때 0번째, 1번째, 2번째, 3번째, ... , 99번째 까지 vex를 반복하게 되는데, 여기서 X번째의 X 가 @elemnum 이 된다.


곧바로 활용해보자. vex를 사용하여 회오리 형태의 선을 만들어 보았다.


attribute wrangle 에서 RunOver 클래스를 Number로 지정하고 100회 반복되도록 했다.
이후 작성한 vex는
addpoint(0, set(chf('valx')*@elemnum*sin(@elemnum),@elemnum*0.1,chf('valz')*@elemnum*cos(@elemnum)));

라는 길어보이지만 상당히 심플한 vex이다. 뜯어풀자면

0번째 인풋에 addpoint 로 포인트를 추가한다. (이 경우 인풋이 없으므로 자기자신이 됨)
어디에 추가할 지 set으로 지정하는데,
X축으로 chf('valx')*@elemnum*sin(@elemnum) // 임의의 valx * X번째반복 * sin(X번째 반복) 
Y축으로 @elemnum*0.1 // X번째반복 * 0.1
Z축으로 alz')*@elemnum*cos(@elemnum // 임의의 valx * X번째반복 * cos(X번째 반복) 

이 된다.

이 때 sin(@elemnum) 으로 인해 -1과 1을 계속 왔다갔다 하게되는데, 여기에 앞서 @elemnum 을 곱해줌으로써 반복되는 차수가 늘어날 수록 값은 점점 더 격차가 벌어지게 되는 결과를 가져온다. (임의의 valx 로 범위를 컨트롤 할 수 있도록 추가함)
cos(@elemnum) 도 sin과 마찬가지이지만, sin 과 sin 끼리 겹쳐버리면 서로 똑같은 플러스 마이너스를 가지게 될 것이므로 다르게 움직이게 하기 위해 sin 대신 cos를 사용했다.


애시당초 wrangle 을 Number 에서 돌려본 적이 한번도 없는 나에게 있어서는 상당히 신선한 내용이었다.





[ 참고링크 1 - 후디니 어트리뷰트 익스프레션 헬프문서 ]
http://www.sidefx.com/docs/houdini/nodes/sop/attribexpression.html

[ 참고링크 2 - 후디니 지오메트리 익스프레션 헬프문서 ]
http://www.sidefx.com/docs/houdini/nodes/dop/geometrywrangle.html

[ 참고링크 3 - David Kahl VFX Patreon페이지 ]

[ 참고링크 4 - Side FX 웨비나 VEX and VOPS 의 요약포스팅(일본어) ]

[참고링크 5 - Ryoji CG Memo 내 Wrangle 포스팅 ]


2018/10/04 14:36

Houdini 후디니 CGwiki ver.Japan 일본어번역 블로그가 화제 Houdini Memory

VEX
https://houdini.prisms.xyz/wiki/index.php?title=HoudiniVex

MainPage

kit2cuz's Twitter




이전에 CGwiki 의 VEX구문을 번역한답시고 삽질하며 포스팅 했었던 적이 있었다만,
(그 포스팅 아직 있다. http://dsharp.egloos.com/4132022 틈틈히 수정하며 내용 늘려나갔다)
영어실력 후달리는것이 가장 큰 문제여서 영 진척이 나질 않았던 와중에

최근 일본의 한 블로그에서 CGwiki의 대부분 내용을 일본어로 번역된 게 화제가 되어 소개 겸 포스팅을 남긴다.
특히 좋은 점이라면, 일본어는 구글 크롬으로 번역 시 한글로 읽기 쉽게 번역이 되기때문에
상당히 많은 도움을 받을 수 있으리라 생각.


왼쪽부터 CGwiki (Original), CGwiki ver.Japanese, CGwiki ver.Japanese with GoogleChrome Translate, My Blog Page




2018/10/02 17:54

후디니 (Houdini) Boolean SOP에서 자주 볼 수 있는 에러에 대하여 Houdini Memory

지난번 boolean에 대해서 짤막한(?) 경험담을 포스팅 한 적이 있었는데,
톡방을 눈팅하다가 또 한번 boolean에 대한 이야기가 나돌길래
다시금 생각과 참고 링크들을 정리하기 위해 포스팅.

지난 글




일단 boolean sop을 사용하기 위해서는 몇가지 조건이 필요한데,

 - 노말(N) 이 모두 바깥을 향하는 연속성을 가져야 하며, 뒤집혀있지 않을 것
 - 엣지의 면들이 서로 찢어져 있지 않을 것
 - 열린 오브젝트(지오메트리)인지 닫힌 오브젝트(솔리드)인지 확실히 구분될 수 있어야 할 것
 - 모든 면들이 삼각형으로 만들어 질 수 있어야 할 것

물론 이런 문제들이 발생할 경우 boolean sop이 자체적으로 에러를 해결하려고도 시도하지만
보통 10번중 절반정도는 fix되지는 않는다.

fix되지 않을 경우에는 에러메세지가 뜨는데, 후디니가 '여기 이 부분이 이렇게 문제있어요' 라고는 알려주지 않으며
수많은 경우의 수와 그걸 검출할 과정 또한 상당히 무거워지기 때문에 알려줄 방법도 거의 없다시피 한다.

대신 Warning 메세지로 뱉어내는 문구가 있는데
'Nonmanifold edges in solid A or B' 이다.
좀 더 디테일하게는 위에 언급한 조건들 중 하나라도 엇나가서 auto fix조차 불가능 할 경우 무조건 이 메세지를 보게 될 것이다.

대체 저 문구가 뭐길래 하나로 퉁치는것인지 자료를 찾아봤고,
마찬가지로 후디니 유저들의 약소한 도움이라도 되고자 찾았던 참고자료들과 생각을 정리해둔다.





manifold 매니폴드, 다양체 라고 한다
처음 보는 생소한 단어에 이해하려고 노력하기보단 일단 설명을 찾아보았다.
갑자기 상대성이론부터 우주이론까지 나온다. 갑자기 이해를 위한 의욕이 팍 꺾인다.
좀 더 이해하기 쉬운 글을 찾다보니 '다양체' 를 가장 쉽게 이해하는 문구를 찾았다.


예를 들면 구 모양을 하고 있는 축구공을 생각하면 축구공은 여러 개의 가죽 헝겊을 붙여서 만든 것인데 하나의 가죽 헝겊을 펴서 보면 평면의 일부가 된다. 이런 관점으로 구는 우리가 존재하는 현실공간인 3차원이 아니라 종이와 같은 차원인 2차원이 되며 2차원 다양체라고 한다. 

원문보기: 



그렇다고 한다.
쉽게 풀어 생각하자면 매니폴드(다양체)는 주사위 전개도 마냥 펼쳐놨을때 하나로 다 붙어있는 것이라고 이해하면 될 것 같다.
위 기사문을 읽고나서 다시 본 위키피디아 문서 사진이지만, 여전히 뭔 말인지 이해되지 않으니 일단 넘어가도록 하자.



다시 에러 메세지로 돌아와서,
'Nonmanifold edges in solid A or B' 메세지는
'다양체가 아닌(non-manifold) 엣지가 솔리드 A나 B에 포함되어 있습니다' 라고 해석할 수 있다.

이게 무슨 소리냐 하면,
'니가 만든 오브젝트는 벽면이든 둥근면이든 어떻게든 붙여보려고 해도 할 수 없다' 가 된다.
한마디로 '이딴 모델링으로는 하지 않겠소' 라는 것이다.

대표적인 원인은 2가지이다.
 : 빵꾸냈거나
 : 파고들었거나

빵꾸냈거나.gif

파고들었거나.gif

구멍난 경우는 특히 많이 발생한다. 아니 많이 겪었다. 이전 포스팅할때도 대부분 구멍난 경우였고
정확한 해결방법은 당연히 구멍을 메워주면 된다.

하지만 이렇게 수많은 구멍이 생길 경우가 있다. 일일이 수작업으로 하기에는 당연히 부담될 수 있는 물량이다.
제일 쉬운 처리 방법은 remesh sop 을 사용하면 모든 면이 삼각형으로 바뀌면서 빈 공간까지 메워지게 된다.
혹은 vdb로 만들었다가 convert 해서 polygon 으로 바꿔 메울 수도 있다.
혹은 fuse로 한번에 다 메워버릴수도 있다.
물론 계산방법이 잘못되었을 수도 있으므로 boolean 의 method 등의 옵션을 바꿔서 해결할 수도 있다.
운이좋으면 auto fix로도 잡힐 수도 있다.
다만 이렇게 자동적인 방법으로는 원래 지오메트리의 형태가 바뀌거나 하는 등의
원하지 않는 방향으로도 흘러 갈 수 있으므로 주의해야 됨을 겪었다.

물론 파고들었을 경우나 다른 에러메세지 또한 위와 같은 유사한 방법으로 처리할 수도 있지만,
우선적으로 에러메세지가 뜨면 boolean sop을 클릭한 뒤에 Scene View에 마우스를 올리고 엔터를 입력하면
에러난 부분의 엣지를 직접 빨간색으로 표시해준다.
이를 직접 보면서 수작업으로 해결할 수 있는 양의 에러라고 판단되면 가급적 수작업으로 해결하도록 하는 편이다.


물론 다른사람들은 모르겠다. 어디까지나 내가 쓰는 방법, 내가 이해한 것들만 정리했을 뿐이다.



[참고링크 정리]

논-매니폴드가 무엇인가

3D 인쇄에 있어 논-매니폴드를 해결할 방법
Boolean 의 에러들이 이해가 안된다면 반드시 정독하고 모든 영상을 보도록 할 것을 권장

다양체(매니폴드)란 무엇인가

다양체를 쉽게 이해하기 위한 언론기사문

1 2 3 4 5 6 7 8 9 10 다음