본문 바로가기

Houdini/Houdini1_Particles

PARTICLE05_스파크 묘사 & IMG에서 합성하기 - Simulation data 활용

목차

  • 과제 풀이
    • 파티클 세팅
    • 렌더
    • 컴포지팅
  • 일기

Simulation 결과로 얻은 파티클을 여러 방면으로 활용해보자.  

  • 파티클 저장하기
  • 저장된 정보 다루기
    • sub steps가 높은 경우, 영리하게 활용해보기(slow motion 등)
  • 출력에 관한 두가지 이야기(render, compositing)
    • point를 얻었다고 끝이 아니다.
    • exr로 많은 정보를 가진 sequence를 얻었다고 해서 그게 끝이 아니다.
      • 이 결과 또한 러프한 면이 없지 않다.
    • 후디니에서 제공하는 compositing을 활용해보자.

 

 

직접 부딪혀서 해보고 강의를 듣자.
안그러면 스스로 성장의 기회를 박차는 것이다.(시간낭비일 뿐이다.)
꼭 직접 해보고, 어디가 문제인지, 어디가 불편한지, 어떤 부분에서 생각해볼 가치가 있었는지 느끼고 느낀 뒤에 수업을 듣자.

작업의 순서

  • 파티클이 나오는 시스템 구성
  • 충돌에 대한 정의 내리기
  • 포인트에 대한 정보 file cache로 저장하기
    • 시뮬레이션을 더 할 필요가 없게 된다.
  • 얻어낸 포인트 자료를 선으로 바꿔주기
    • 포인트 그 자체로 느낌을 내는데는 조금 무리가 있다.
  • 색에 대한 정의 내리기
    • 필요하다면 alpha에 대해서도 정의 내리기
    • material 적용하기
  • mantra에서 render view를 통해 결과를 확인하면서 render를 진행할 수 있을 정도의 적정 퀄리티 찾기
    • exr로 render
  • houdini image tap으로 가서 기본적인 compositing 진행

 

여기에 추가적으로 포인트에 대한 정보를 저장하는 단계에서 조금 더 부가적으로 짚고 넘어갈 부분에 대해 이야기

  • 좋은 퀄리티를 위해서 sub steps를 10으로 해서 결과를 출력할 경우, 우리가 얻게 되는 정보는 결국 한 프레임 당 하나의 정보일 뿐이다.
  • 만일, sub steps의 중간 단계의 자료들을 우리가 다 사용할 수 있다면, slow motion등의 작업에도 사용할 수 있을 것이다.

시뮬레이션 작업시, 이런 중간의 데이터를 낭비하고 버려지게 되는것이 아쉬운 순간들이 있다. 왜냐하면, 중간 데이터를 가지고 있었다면, 무언가 더 풍부한 자료를 바탕으로 다른 작업들(slow motion 등)을 진행할 수 있는데, 이 데이터들이 그냥 버려지게 된다면, 굉장히 아쉬울수밖에 없다.


파티클 시스템을 만든다.

  • 무엇이 필요한지 알고 있기 때문에 일단 노드를 불러서 달아둔다.(ground plane - 바닥, static object - 충돌할 물체, pop force - 중력)

기본적인 particle system

pop source는 scatter onto surfaces가 아닌 points로 한다.

  • all points가 아닌 이유는, all points로 할 경우, solver가 작동할 때마다 각 point에서 하나씩 파티클이 생성되는데, 우리는 포인트 하나를 사용하기 때문에, 많은 파티클을 뿌려주기 위해서는 points를 사용한다.

attribute wrangle로 초기속도를 세팅해준다.

  • 초기속도를 정의해주는 것만으로는 뿌려지는 느낌이 들지 않기 때문에, pop source의 attribute tap에 가서 우리가 가지고 있는 초기속도에 다른 정보들을 추가해준다.

파티클이 흩뿌려지는 모양에 대해서는 수정을 해보면서 본인이 이쁘다 생각되는 값을 찾아나가자.

const. birth rate를 20000으로 올렸다.

약간 각진 모습이 보인다. sub steps 조절로 해결해보자.

sub steps 3

포인트 life를 조절해준다.

life expectancy 0 / life variance 1.5


충돌에 대한 세팅을 만들어준다.

우리가 만들어준 volume 데이터를 사용해서 충돌영역을 정의해주자.(mode - volume sample)

  • 움직이는 static object 활용을 위해 use deforming geometry 체크를 해주자.

파티클 출력에 대한 굵직한 세팅은 끝났다.(파티클이 잘 나오고 있고, 충돌 또한 잘 일어나고 있다.)

하지만, 위의 이미지와 같은, 파티클 자체의 결과만을 본다면, 이것이 어떻게 잔상이 남는지 감이 오질 않는다.


이제 파티클을 선으로 만들어보자.

line 생성을 위해 trail 노드를 달고, add로 선을 만들어줬다.

난리났다...

우리가 원한 결과는 이게 아니다. 우리가 원한 결과를 위해 id를 활용한다.


이제 파티클과 ground, 파티클과 static object 사이의 physical을 조정해줄 필요가 있다.

그리고 파티클이 발사되는 폭이나 각도도 조금 아쉬울 수 있다.

이런 부분들은 pop source의 attribute 를 수정하거나, 초기 속도를 바꾸거나 하면서 조정해볼 수 있다.

 

이제부터 해야할 일은 tweak(수정)이다.

라고 쓰고 노가다 라고 읽힌다...

 

하나하나 값을 바꿔가면서 어떤 수치가 이쁜 결과를 만들어내는지 찾아내야한다.

 

파티클이 퍼져나가는 것이 아쉽다.

pop source의 attribute tap에서 variance를 조절한다.

중력이 아쉽다.

pop force의 중력 수치를 조절한다.

중력이 강해지니까 파티클이 뿜어져나오는 것이 약해보인다.

초기 속도를 조절한다.


이제 physical을 조정해보자.

바닥에 파티클이 부딪혔을 때, 너무 많이 튀어오르는 경향이 있다. ground의 마찰력(friction)을 높여주고, bounce를 낮춰주자. 그리고 파티클이 너무 멀리 퍼지는 경향이 있어서, 파티클의 마찰력 또한 높여주자.

 

이런 tweak은 예쁜 결과를 찾겠다고 하면 하루종일도 할 수 있다.

tweak을 더 하면 끝이 없기 때문에 일단은 여기까지...


dop network가 반환하는 포인트의 결과를 file cache에 저장해보자.

dop import를 활용하자.

dop network를 바로 file cache에 연결해도 상관은 없지만, dop import를 거쳐서 저장을 해보자.

DOP Network - 포인트의 결과를 반환하는 dop network의 경로를 기입한다.

dop network의 정보를 받기 위해서 import style을 바꿔줘야한다.

그리고 불필요한 데이터가 함께 들어오게 될 수 있으므로, object mask에서 pop object의 이름을 기입해준다.

경로를 설정해주고, save to disk를 해주면 된다.

 

file cache를 사용하게 되었을 때의 장점은, 더이상 dop network를 신경쓰지 않아도 된다는 점이다. 하지만, 모종의 이유로 dop network의 내용이 바뀌게 된다면, 그때는 다시 file cache를 사용해서 cache 데이터를 저장해줘야한다.

 

파티클 포인트의 갯수(const. birth rate)를 40000개로 늘려서 저장해주자.

그 이유는 얻은 결과에 대해서 불필요한 포인트들을 임의로 지워줄 것이기 때문이다.

예를 든다면, 어떠한 정보를 기반으로 포인트들을 선별하고, 선별된 포인트만 사용하고, 아닌 포인트들은 지워주는 것이다.

 

이렇게 시스템을 구축했을 때의 좋은 점은 cache의 포인트 중 원하는 %만큼의 포인트를 활용할 수 있고, 결과가 마음에 들지 않을 경우, seed 값을 적용해서 좀 더 마음에 드는 결과를 찾도록 해줄 수 있다.

각 점에 대해 @twaid 라고 하는 임의의 random한 float 값을 부여한다.

그리고 @twaid 가 임의의 limit보다 클 경우, 그 점은 삭제해준다.

 

limit는 우리가 얼만큼의 파티클을 사용할 것인지에 대한 비율이다 (1은 100%를 의미)


이제 색에 대한 정의를 해보자.

두가지 정보를 활용한다.(@age, @life)

@age는 시간이 지남에 따라 점점 증가한다.

@life는 파티클이 생성됨과 동시에 이미 정해져있다.

그렇다면, @age / @life는? 파티클의 진행비율(수명비율)이 될 것이다.

수명률이 -(음수)인 것들은 jitter birth time으로 인한 오차로 보인다.

 

@play를 가지고 에 channel ramp를 활용해서 @Cd를 바꿔준다.

edit parameter interface에 가서 ramp type을 float > color로 바꿔준다

@alpha에 대해서도 추가해줬다.


이제 render이다.

mantra를 만들고, camera와 light를 세팅한다.

각각의 물체에 material 노드를 연결한다.(box, grid, particle)

principeld shader를 만들어서 각 material에 적용해준다.

결과가 맘에 들지 않는다. 너무 두껍게 표현되었다.

  • 그 이유는 현재 wire의 @width 값 때문이다. wrangle을 달아서 @width 값을 조절해준다.

line의 길이가 너무 길어보이기 때문에, carve를 사용해서 조절해준다.

constant material
glow material

spark에 사용할 때는 glow를 추천한다. 특별한 기능이 있다.

Glow ramp rate가 0일 경우, constant와 차이가 없다.

Glow ramp rate 4, Glow color 6, 6, 6

나중에 compositing 단계에서 높은 수치의 glow color는 우리에게 도움을 주게 된다.


exr sequence 자료로 출력을 진행해보자.

그리고 후디니 안에서 약간의 합성까지 진행해보자.

 

주의할 점, file cache를 사용할 때, 우리는 시작프레임이 11 프레임 이었던지라, 1~10 프레임 사이에는 불러올 정보가 없다.(그래서 file cache 노드도 플레이 할 때, 앞의 10프레임까지는 빨간색 느낌표 딱지가 붙는다.)

그래서 mantra를 돌리면 render가 터지게 된다.

이것을 방지하기 위해 switch 노드를 활용해준다.

file cache 노드와 null 노드를 switch에 연결해주고, 데이터가 들어오는 11프레임에는 select input을 file cache 노드의 input 숫자로, 10 프레임에는 null 노드의 input 숫자로 키를 준다.

 

image viewer를 켜주자.(Mplay 이다.)

sequence를 불러오면, 처음 플레이시에는 자료를 불러와야하기 때문에 약간의 버벅임이 존재한다.

 

composite view를 만들어준다.

그리고 새로운 img network view를 만들어준다.

이 두 view는 같은 넘버링으로 핀을 박아서 링크해준다.

 

※ 이곳은 3D 공간이 아닐수도 있다. 

이 image network 노드 안으로 들어가서 작업이 진행된다.

 

file을 불러온다.

후디니의 기본 이미지가 composite 창에 띄워진다.

default.pic
composite > file parameter

file에 우리가 작업을 필요로 하는 sequence로 바꿔준다.

큰 맥락은 동일하다. display flag가 켜져있는 것이 출력된다.

 

composite view를 보면서 플레이를 해서 보는것은 권장하지 않는다. 이곳에서는 compositing 작업을 진행하고, 작업한 결과를 다시 뽑아서 Mplay에서 보는 것을 추천한다.

  • exr을 뽑는 render는 오래 걸리지만, compositing 작업이 진행된 결과물을 뽑는데는 그리 긴 시간이 걸리진 않는다.

 

compositing 작업은 2d 작업이다. 그래서 용어가 조금 다르다.(하지만 맥락은 같다.)

3d에서는 같은 위치에 서로 다른 정보가 있는 것이 큰 문제가 안되었지만, 2d에서는 같은 위치에 서로 다른 정보가 있을 경우, 신경써줘야 할 부분이 있다. 무엇을 먼저 보여줘야할지, 같은 위치에 있는 정보들을 어떻게 계산해야할지 이러한 부분을 신경써야한다.

3d 노드와 2d 노드의 비교

3d의 merge

들어오는 input에 대해 다른 후작업을 해주지 않는다면, 서로 독립적인 것으로 인지한다. 같은 위치에 있더라도 독립적으로 겹쳐있다.

ex) merge에 {0,0,0}, {1,0,0}, {0,0,0}, {1,0,0} 네개의 포인트가 들어왔을 때,

아웃풋으로는 {0,0,0}, {1,0,0} 이렇게 두개의 점이 보이겠지만, 각각의 위치에 점이 2개가 겹쳐있는 상태이다.

 

2d에서는 위와같은 방식으로 그냥 겹쳐준다의 개념이 아니다.

file 넘버링 옆의 숫자는 pixel의 정보이다. (3x2 pixel)

안의 내용은 흑백의 정보를 뜻한다. 1은 하얀색, 0은 검은색

 

이 file 4개를 layer에 넣어보자.

size가 다른 file을 layer로 합쳐준 결과이다. 위치는 임의로 지정이 가능하다.(layer > transform 또는 transform 노드 활용)

 

layer parameter

현재 layer된 방식은 global operation에서 확인이 가능하다.(현재는 over 이다)

add가 된다면 어떻게 될까?

layer의 오른쪽으로 들어온 정보가 왼쪽으로 들어온 정보에 일방적으로 더해졌다.

 

multiply의 경우는?

오른쪽으로 들어온 두번째 인풋이 가진 검정색 구간들이 사라지게 된다.(왜냐하면 * 0 을 해주는 것이기 때문이다.)

오른쪽으로 들어온 두번째 인풋의 색이 있는 곳에서만 왼쪽으로 들어오는 첫번째 인풋의 색을 보여주게 된다.

 

fit function과 비슷한 levels parameter

Input levels의 첫번째 값을 바꿔줌으로써 어두운 구간에 변화를 줄 수 있다.

값을 올려주면 어두운 구간이 사라진 것처럼 보인다.

하지만, 사라진 것이 아닌, 음수값을 가지고 있다.

 

input levels 0, 1
input levels 0.1, 1

0.1이 0으로 확대된다면, 0.1보다 작은 값을 가진 부분들은 0 이하의 음수값으로 표현된다.

 

input levels의 두번째 값을 바꿔줌으로써 밝은 구간에 대한 변화를 줄 수 있다.

input levels 0, 0.5 (밝은 부분이 더 밝아졌다.)

상대적으로 뜨거울 것 같은 구간만 남겨보도록 하자.

 

blur

blur가 적용될 경우, 이미지의 사이즈에 변화가 생긴다.

blur size 50의 경우, 원본 크기에서 더 커진 파란 가이드라인이 보인다.

levels를 적용함으로써 생긴 음수구간으로 인해 layer에 더해주게 되면 주변 검은 부분이 상당히 날아가게 된다. 그것을 방지하기 위헤 levels를 적용해주고 이어서 limit를 적용해서 0이하는 0으로 제한을 걸어주면, 우리가 원하는 결과를 얻을 수 있다.

limit 적용 전
limit 적용 후

 

color map

levels와 같은 개념이다.

빨간색만 극도로 표현이 가능하다.

blur를 약간 먹여주고, layer에 넣어서 더해주게 되면, 밝은 부분에 대해 붉은색 글로우 효과를 얻을 수 있다.

layer의 weight 값을 조절해서 원본 데이터에 적용되는 layer 데이터들의 세기를 조절할 수 있다.

 

우리가 뽑게되는 sequence가 0과 1이 아닌, 1을 넘어가는 구간이 존재할 경우, 동영상 플레이어나 핸드폰 등의 화면에서 다르게 보일 수도 있다.

그렇기 때문에 layer의 마지막에도 limit를 붙여주는 것이 좋다.

 

출력을 위해서는 rop file output 노드를 달아주면 된다.

좌측 : comp file / 우측 : exr render file

 


아... 어젯밤에 내가 렌더가 터진 이유가 file cache의 1프레임 데이터가 없는거 때문에 그런거였구나...

왜 터지지 하면서 위에서부터 노드 따라서 display render flag 다 켜보고 엄청 그랬었는데 아예 데이터가 없어서 생기는 터짐이었네...

 

compositing은 정말 실무를 진행하면서도 많이 듣던 단어지만, 나하고는 하나도 상관없다 라고 생각했던 그런 단어였는데, 그 부분에 대한 아쉬운 부분을 긁어낼 수 있어서 매우 좋았다.

 

오늘의 강의에서 또 한가지 명심해야겠다 라고 생각한 부분은 작업의 파이프라인이었다.

 

어제 과제를 진행할 때는 급한 마음에 제대로 된 파티클의 움직임도 만들지 못했으면서 부랴부랴 렌더를 진행해보겠다고 설치다가 렌더가 진행되는 시간도 낭비하고, 제대로 된 결과물도 얻지 못했던 것 같다.

 

탄탄한 아이디어와 명확한 파이프라인을 몸에 익히는 것이 필요하다!!!

 

(중간에 렌더 시간이 또 있어서 공부일지 쓰는 것도 잠시 중단... 했다가 부랴부랴 다시 작성중이다.)

 

시간이 아쉽다.

반복작업을 진행해보고 싶고 계속 고민해보고, 또 해보고 또 해보고 싶은데,

지금은 다른 어떠한 아쉬움보다 작업 시간 확보에 대한 아쉬움이 제일 큰 나날이다...