2018. 7. 7. 13:34ㆍStudy/Houdini
BUILDING NODE
건물을 VORONOI로 쪼개고 세우는 과정
SIM 결과 밑에 부분이 지탱하지 못하고 죽어버리 때문에
wangle을 통해 VEX 로 해결해준다.
1 2 3 4 5 6 | if (@P.y < ch("y_position")){ i@active = 0; } else { i@active = 1; } |
하나의 구조물을 만들고 COPY NODE 를 이용하여 건물을 만들기 때문에 S@NAME ATRR 가 겹치는 경우가 생긴다. 그렇기에 @ptnum 을 이용해서 sprintf 로 이름을 새로 써준다.
1 2 | s@old_name = s@name; s@name = sprintf("piece%d",@ptnum); | cs |
PIECE PROXY (INSTANCE) 만들기
PIECE NODE
고퀄리티 PIECE로 SIM 과 PREVIEW를 하게 되면 RAM과 시간이 오래걸리기 때문에 PROXY를 만든다.
ATTRIBUTE VOP 을 이용하여 PIECE 마다 굴곡을 준다.
조각마다 접근을 해야하기 때문에 DELETE NODE 를 이용한다.
@class == `$F` 를 사용해 FRAME 마다 조각에 접근한다.
FILE CACHE PATH 는 잘알아두어야 한다.
INSTANCE 설정시 사용하여야 한다.
NAME ATTRI 도 중요하기 때문에
1 | `prims("../delete3/",0,"name")` | cs |
prims 를 이용해 접근한다.
GLUE
GLUE 생성 전체 NODE
"Connect adjacent pieces" "cluster" 를 이용하여 만든다.
assemble 로 압축을 했기 때문에 "packed edit" 를 이용하여 조각마다 중심포인트를 얻어 낸다.
"Attribute VOP" 을 이용해서 Cluster attri 를 생성한다.
"Voronoise" 를 이요해서 Cd로 뽑아내고 "bind export" 로 attri를 생성한다.
cluster 는 glue 가 뭉쳐있게 해준다.
"Attribute Wangle" 을 이용해서 "glue_inside" , "glue_outside" 를 생성한다.
기본 GLUE 생성(basic)
1 2 3 4 5 6 | s@constraint_name = "glue"; f@strength = 1.0; if(rand(@primnum) < 0.5){ f@strength = 1000; } | cs |
glue inside , outside
cluster 를 이용한 inside, outside 생성 (암기)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int pt0 = vertexpoint(0, primvertex(0, @primnum, 0)); int pt1 = vertexpoint(0, primvertex(0, @primnum, 1)); int cluster0 = point(0, "cluster", 0); int cluster1 = point(0, "cluster", 1); if(cluster == cluster1){ s@constraint_name = "glue_inside"; } else{ s@constraint_name = "glue_outside"; } f@strenght = 1.0; | cs |
SIM
proxy (Timeshift)
"File cache" 까지는 일반적인 Node 구성
그 이후부터는 instance 를 이용한 proxy 구성
조각 Proxy 만들고 저장했던 CACHE PATH를 instance_lo / instance_hi 에 각각 심어준다.
저장된것을 불러오는 방법
1 2 3 | s@instance_lo = sprintf("$JOB/instance_lo/v%d/%s.bgeo.sc",chi("../controll/iver"), s@old_name); s@instance_hi = sprintf("$JOB/instance_hi/v%d/%s.bgeo.sc",chi("../controll/iver"), s@old_name); | cs |
"instance" 에서 위에서 만들어준 attri 속성을 적용해준다.
"Time Shift" node 에서 Frame 을 1 로 설정한다.
(아직 이유를 모르겠음)
그냥 연결하게 되면 point 에 붙기만 하고 pivot과 transform이 다 맞지 않기 때문에 설정하여 준다.
(Time Shift proxy)
추후 렌더링을 할 때 motion blur 가 필요하기 때문에 "P", "v", "w" 를 불러온다.
1 2 3 4 5 6 7 8 9 | matrix3 transform = primintrinsic(1, "transform", @ptnum); vector pivot = primintrinsic(1, "pivot", @ptnum); setprimintrinsic(0, "transform", @ptnum, transform); setprimintrinsic(0, "pivot", @ptnum, pivot); @P = point(1, "P", @ptnum); @v = point(1, "v", @ptnum); @w = point(1, "w", @ptnum); | cs |
TIP
"DOP Network" 에서 "object" 를 ^ground* 해주면 ground 가 빠져 SIM이 된다.
그래야 PROXY POINT 와 SIM POINT가 맞아 연결이 된다.
SIM INSIDE
GLUE가 두개로 나뉜다.
"POPS SPEED LIMIT" 을 이용해서 속도 LIMIT 을 해준다.
SOPSOLVER
"GLUE" 가 POPMETABALL 을 만났을때 사라지는 부서지는 것을 만들어줌
"암기"
RBD 에서 Geomerty를 가지고 온다.
point 와 name attri 를 찾는다.
각각 mass 와 force 도 지정해준다.
여기서는 attri 설정
1 2 3 4 | int pt = findattribval(1,"point","name",@name); @P = point(1, "P", pt); f@mass = point(1,"mass", pt); v@force = point(1, "force", pt); | cs |
"Attribute Promote" 를 이용해서 point 에 있는 것을 primitive 로 옮겨준다.
force 와 mass 를 이용해 가속도를 구한다.
그 가속도를 이용해서 activate 설정을 만들어준다.
ch를 이용해 hi에 넣을 것인지 lo에 넣을 것 인지 설정해준다.
1 2 3 4 5 6 | float accel = length(v@force / f@mass); if(accel > ch("max_accel_thresh")){ @group_hi_activate = 1;} else if (accel > ch("min_accel_thresh")){ @group_low_activate = 1;} | cs |
low와 outside가 만나면
또는 hi에 들어가면
broken 이 작동되어진다.
1 2 3 4 | if(@group_low_activate && s@constraint_name == "glue_outside"){ @group_broken = 1;} else if (@group_hi_activate){ @group_broken = 1;} | cs |
WEDGE
"WEDGE" 를 이용해서 여러가지 SIM 을 자동으로 돌릴수있으며 PREVIEW 가 가능하다.
"WEDGE"는 "Channel" 과 "Range" Path 만 유의해 주면 된다.
SIM 이 끝난 "Wedge" 를 preview 하는 방법은 "For Loop" 를 이용해서 preview 한다.
path 에
1 | `detail("../repeat_begin1_metadata1/","iteration",0)` | cs |
이 detail "iteration" 을 넣어줌으로써 자동으로 wedge ver이 불러와진다. (반복이 되어지면서 숫자가 올라간다.)
(단 "Wedge" 에서 경로가 똑같게 설정해주어야 한다. 변하는 부분은 숫자만)
그렇게 불러들이고 "instance" 를 이용하여 바꾸어준다.
Cache path에 있던 parameter 들
만들어 주어 연결한다.
'Study > Houdini' 카테고리의 다른 글
SMOKE (0) | 2018.07.14 |
---|---|
GROUND_DESTROYED (0) | 2018.07.12 |
voronoi_fracture (0) | 2018.03.25 |
round_to_integer (0) | 2018.02.08 |
volume_curl (0) | 2018.02.07 |