houdini/연습

블럭 부수기

HUII 2020. 1. 4. 19:28

어제만든 블럭을 부숴보려고 한다.

 

우선 하나의 블럭 객체를 만든다.

작은 단위의 블럭를 만든후 복사할 point로 블럭객체를 복사하면 되는 간단한 과정이다.

 

geometry는 houdini내의 test_geo인 rubbertoy를 사용했다.

이제 DOP Network를 이용해 물체를 떨어뜨리자

우선 dopnet 노드를 생성하고 toy 를 0번째에 이어줬다.

 

toy를 RBD object, rigidbody solver DOP에 연결하고 

GroundPlane을 생성해 static solver DOP에 연결했다.

이제 둘이 충돌하도록 merge하고

gravity force를 적용했다.

결과는 블록이 부서지지 않았다.

저런.

 

fracture된 객체가 아닌 붙어있는 객체라 그런것 같다.

 

가장 단순하게 자연스럽게 물체를 쪼갤수(fracture) 있는 방법으로 Voronoi Fracture SOP을 사용해보려 한다.

voronoifracture추가

voronoifracture의 원리는 입력0에 물체, 입력1에 부수고자 하는 점을 입력하면, 그 점들 사이 수직이등분 선으로 물체를 쪼갠다.

voronoifracture의 장점은 scatter를 이용해 자연스러운 단면을 만들어준다는 것이다.

오늘은 그냥 블록단위로 쪼개지는것을 원하므로 scatter를 적용하지 않겠따.

 

블록의 부서짐을 위해 전체 블록모양을 0에, 복사가 된 point를 쪼개는 지점으로 처리했다.

+ copy된 object들을 바로 particle로 다루는 방법이 있을것 같아서 따로 알아보려 한다.

fracture이 적용될 point들

fracture을 할때마다 컴퓨터가 많이 힘들어한다. 금방이라도 이륙할것같다.

 

자 이제 DOP Network에서도 object를 바꿔주자

fracture적용을 했으니, 사용될 object는 rbdfractured object다.(균열 obj전용)

결과는 성공! 블럭이 바닥에 닿자 부서지기 시작한다.

여기서 남은 2가지 문제

1. 밑부분이 부서지기 시작하면 윗 부분도 모두 부서지는 문제

2. 블럭 단위로 쪼개지면서 나오는 파편이 너무 많은 문제

 

어떻게 해결해야할까..

 

1번 문제는 glue처리를 통해 해결할수 있을것 같다.

2번 문제는 조금 더 정밀하게 나눈다면 나아질까?

 

2번 문제는 쉽게 해결했다.

explodedview SOP로 간단히 확인 가능하다.

voronoifracture의 cut 옵션중 cut Plane Offset을 블럭보다 크게 올리면,

파편 사이의 간격이 점사이의 간격보다 넓어지게 되면서 새로운  cut을 추가하지 않는다.

offset을 블럭 크기보다 작게 뒀을 경우 파편이 생긴다.
이제 블럭단위로 부서진다.

 

문제1을 해결하기위해 Glue를 적용할거다.

일단 기본이되는 셋업을 한다

Dynamic필드에서 Glue Constraint Relationship DOP, Constraint Network DOP추가

Geometry필드에서는 Connect Adjacent Pieces SOP, Attribute Create SOP를 추가한다.

기본 접착 셋팅

Connect Adjacent Pieces SOP 는 인접한 파편끼리 연결하는 edge를 만드는 노드다.

Attribute Create SOP로 constraint_name과 type속성을 추가한다.

(constraint_name = conRelGlue, constraint_type = all)

왜? constraint 사용하려면 이 변수들이 필요하니까~

 

Dynamic필드의 constraintnetwork 노드의 GeoSource를 두번째 연결노드로 설정한다.

그러면 아까 connectAdjacentPieces SOP로 만들었던 edge를 참조해 접착을 한다.

 

glueconrel의 Strength 파라미터에서 접착의 강도를 변경할 수 있다.

 

앗 세상에.. voronoifracture node의 2번째 출력값이 constraint 였다.

connectadjacentpieces는 불필요하다...☆

 

문제가 발생했다.(또르륵)

문제 2를 해결하기 위해 사용했던 offset설정때문에 constraint에 이용될 분할선이 없어지기 때문인지 파편을 연결하는 edge가 생성되지 않는다. offset을 다시 정상적으로 돌려야 할까..ㅡㅡ

 

offset 을 기본 0으로 돌리면, 렌더링 시간도 늘어날뿐 아니라 다시 문제2(블록 내부의 파편)가 생긴다.

 

voronoifracture node를 두개로 만들어, 1은 piece나눔용, 2는 constraint용으로 쓰기로 결정했다.

2개를 쓰는것이 더 안정적인것 같다.

오예~ 이제 바닥에 떨어지는 부분부터 부서진다.

접착강도를 조절로 다양한 표현이 가능하다.

여기서 끝내려다가 블록마다 색을 입히고 마무리 하고싶어졌다.

texture로 부터 색을 추출하기 위해  attrib vop SOP 추가, Run Over 속성 Verteces로 변경
attribvop내부에서 uvcoords VOP, texture VOP 추가후 연결.
attribpromote SOP추가후 Cd추출 설정.   
Attrib Transfer SOP추가후 Points를 Cd로 적용해서 해당 속성을 각 texture색상으로 바꿔준다.
copy to points로 연결하면 끝!
칙칙하군
Texture Map의 사진을 바꾸면 다른 사진의 색상으로 변경 가능하당  

 

   

와르르 무너지는 레고돌이들
Smooth Shaded, Subdivision Surface
Flat Shaded, Full Geo

블럭 옆부분이 붙어있는건 부자연스럽긴 하다만 이용해서 건물을 만들면 유용할것 같다.

블럭 부수기 끝~