https://www.twahoudini.com/course/starterparticles1
오늘은 Source를 활용하는 여러가지 방법을 배워보겠다.
1. Noise를 활용하기
2. Geometry가 겹치는 부분을 특정하기
3. MIXAMO 자료에서 Source를 골라 만들기
4. 경계 특정하기
1. Noise를 활용하기
먼저 기본 셋팅이다.
POP Source에서 Add to inherited velocity를 이용하여 하나의 point로부터 Particle이 퍼져나가게 해주었다.
Emission Type은 Points로 두었다.
Substeps를 3으로 설정해둔 상태이다.
왼쪽은 원운동에 $F를 사용하였고, 오른쪽은 $FF를 사용하였다. 확실히 $FF를 사용한 쪽이 부드러운 것을 볼 수 있다.
($FF의 작동방식이 궁금하다면 Particle02에서 공부해보자.)
이제 Particle에 Noise 효과를 입혀보려한다. Source로 Attribute Vop을 생성해준다.
1. aaflownoise를 이용하기 위해선 4D의 정보가 필요하다. vector to vector4를 활용해 v@P와 f@Time을 합쳐 4D정보로 만들어준다.
2. 4D로 들어온 정보는 이후 v@P의 3D Noise로 결과가 나올 예정이기에 반드시 4D input, 3D noise로 설정해두도록 하자.
- 이때 4D input, 1D Noise로 설정해둔 정보를 @Cd에 넣으면 흑백의 값을 얻을 수 있다.
3. 4D Frequency를 조절해 Noise의 Swirl Size를 조절할 수 있다.
4. Particle의 움직임에 Noise를 주고 싶기 때문에 @P를 output으로 설정해준다.
만약 조금 더 멋진 효과를 주고 싶다면 POP Wind를 활용해 연기가 뿜어져 나가는 것과 같은 효과를 만들어보자.
Amplitude와 Swirl Size를 조절해 원하는 만큼의 효과를 만들자.
이제 앞서 말했던 4D input, 1D noise를 활용한 흑백 Noise를 사용할 차례이다.
1. 우리는 Noise로부터 얻은 정보를 Color 값에 사용할 것이 아니기 때문에 따로 Bind export를 활용해 @density라는 값으로 빼내어 준다.
2. 이때 생성된 density의 값은 마이너스 값도 존재한다. 마이너스 값은 의미가 없기 때문에 clamp를 활용해 전부 0으로 만들어준다.
이때 얻은 @density를 POP Source의 Emission Attribute에 넣어주게 된다면 우리는 @density의 값을 활용해 Points를 생성할 수 있게 된다.
불규칙적인 움직임의 Particle을 얻게 되었다. 이러한 방법은 여러 방면으로 많이 사용할 수 있을 것 같다.
2. Geometry가 겹치는 부분을 특정하기
그 다음 우리는 Grid에 Object가 지나갈 때 그 지나간 라인에서 Particle이 생성되는 효과를 만들어 보겠다.
Grid에 Object의 정보가 지나간다라고 했을 때 바로 Attribute Transfer를 떠올릴 것이다.
앞의 Sphere와 Grid에 Color를 준 뒤 Distance Threshold와 Blend Width 값을 조절해준다. 이때 고리의 디테일이 썩 좋지 않다면 Grid의 Row, Column 값과 Sphere의 Frequency를 늘려주자.
이제 우리는 고리 부분에서만 Points가 나오길 원하기 때문에 붉은 색의 고리부분을 따로 떼어놓길 원한다.
f@density = @Cd.r;
을 이용한다면 붉은색으로 표현된 부분만 따로 떼어낼 수 있게 된다.
필요가 없어진 붉은 색은 Attribute delete로 제거해준 뒤 Source로 활용해준다.
Grid와 Sphere가 만나지 않을 때는 points가 생성되지 않길 원한다.
하지만 Grid와 Sphere가 만나지 않을 때 Grid 전체에 points가 생성된 것을 알 수 있다.
그 이유는 바로 눈으로는 보이지 않던 points가 Geometry Spreadsheet에서는 전부 남아있기 때문이다. 즉, 눈에만 보이지 않을뿐 point의 정보가 삭제되지 않은 것을 뜻한다.
만약 density가 0일때 points가 전부 제거되게 해주었다.
1. Sphere와 Grid가 접촉해 있을 때의 정보이다. density의 값이 다양한 것을 알 수 있다.
2. Sphere와 Grid가 떨어져 있을 때의 정보이다. density의 값이 전부 0인 것에 비해 위치 정보를 확인하면(P.y가 0) Poitns가 Grid의 정보로서 전부 살아있는 것을 알 수 있다.
3. Sphere와 Grid가 떨어져 있을 때의 if 문을 활용해 density가 0인 points를 전부 제거해주었다. points의 정보가 없는 것을 알 수 있다.
확실히 @density가 0일 때 Grid 전체에 생성되는 points가 사라진 것을 확인할 수 있다.
그러나 아쉽게도 완벽하지는 않다.
@density가 0일 때 아주 작게 꼬다리처럼 남아있는 모양을 확인할 수 있다.
이를 제거해주기 위해선 앞선 식에서 약간의 수정이 필요하다.
removepoint를 사용했을 때에는 오로지 point의 정보만 삭제되었다. 그 말은 즉슨 Primitive의 정보는 아직 남아 있다는 것이다.(우리는 앞서 Attribute Transfer를 사용할 때 Type을 Primitives로 정해두었다.)
points와 primitives의 정보를 모두 제거해주기 위해서 removeprim을 사용해준다.
removeprim에서는 removepoint에서 없는 마지막 숫자를 기입하는 part가 있다. 이때 0을 기입한다면 point를 제외한 primitive만 지워달라는 의미이고, 1을 입력한다면 point와 primitive 모두 제거해달라는 의미이다.
1을 입력해 points와 primitves 전부 지워준다.
원하던 느낌의 깔끔한 particle을 생성하였다.
이제 Particle에 추가적으로 퍼져나가는 효과를 더해주려 한다.
그렇다면 Points가 퍼져나가는 쪽으로 방향을 잡아줄 필요성이 있다.
1. Transform을 활용해 원래의 고리의 x축, z축을 늘려 준다. 이때 늘려진 곳의 point number는 변하지 않는다고 보면 된다.
2. point number가 변하지 않으니 그대로 둘을 빼줌으로써 방향을 잡아줄 수 있다. transform의 정보에서 원래의 고리의 정보를 빼준다.
이대로도 나쁘지 않지만 Noise 효과를 주어 더 불규칙하게 만들어보자.
앞서 만든 Particle에서 points가 딱맞게 나오는 느낌이 있다. Noise를 활용해 불규칙한 느낌을 주자.
1. 우리는 float의 값인 density로 정보를 내보낼 예정이기 때문에 1D noise를 활용해준다.
2. Bind export를 활용해 f@density를 생성해준다.
3. Particle이 끊기면서 생성되는 느낌을 지워주기 위해 clamp에 0.1을 더해준다. 이렇게 함으로써 point가 생성되지 않는 부분의 범위를 줄여 좀더 자연스럽게 points가 생성되게 된다.
왼쪽은 Clamp에 0.1을 더해주지 않았을 때, 오른쪽은 더해주었을 때의 결과이다.
확실히 0.1을 더해줌으로써 훨씬 자연스러운 결과를 얻을 수가 있었다.
3. MIXAMO 자료에서 Source를 골라 만들기
먼저 MIXAMO에 들어가서 Sliding하는 Brute를 다운받아준다.
1. Agent node에서 FBX 파일을 불러온다.
2. Clip Offset은 처음에 정해진 Animation에 따라 설정되어 있다. Animation의 시작과 끝의 파라미터 숫자를 잘 확인한 뒤 Channel Delete 해준다.
그 다음 확인해두었던 숫자들로 새롭게 Frame에 Animation을 설정해준다.
Ex) 1 Frame에 0, 47 Frame에 1.7로 Animation이 끝나게 설정되어 있다. 이를 24 Frame에 0 96 Frame에 1.7로 변경해준다.
이때 Animation을 새롭게 설정하게 되면, 원래 기본값으로 설정되어 있던 Animation과는 다르게 흐름에 굴곡이 생기게 된다.
원래의 Animation의 느낌을 가지기 위해 Animation Editor에서 편집해주겠다.
1. 전체 Graph를 drag&drop으로 선택해준 뒤 Untie Handles를 눌려주면 Graph의 각도를 조절해줄 수 있다. 직선 모양으로 변경해준다.
왼쪽 Animation이 수정 전, 오른쪽이 수정 후의 Animation이다.
왼쪽 Animation이 시작과 끝에서 느려지면서 확실히 부자연스러운 느낌이 든다.
그 다음 Attribute Transfer를 활용하기 위해 Grid를 만들어준다.
Grid의 Rows와 Columns의 수가 균일해 정사각형이 되어아 하기 때문에 끝에 1을 더해준다.
Grid와 Object에 Color를 입혀준 뒤 사용하지 않는 정보들은 Attribute Delete를 활용해 전부 지워준다.
아래의 Attribute Wrangle은 앞서 사용한 Removeprim을 활용한 if 식이다.
Grid와 닿는 부분의 Points의 갯수가 부족해 Transfer의 퀄리티가 떨어지는 현상이 발생한다. 이를 방지하기 위해 Object에 Subdivide를 연결해주자.
복잡한 Source가 완성된 후엔 반드시 File cache를 활용해 저장해주자.
이때 Animationd이 96Frame에서 끝나기 때문에 End Frame을 96으로 저장해주자.
사진에서는 잘못 연결되어 있는데 filecache는 DOP network 아래에 달아주어야 한다.
Brute가 Sliding으로 지나간 지점에 Particle이 생성되게 하였다.
4. 경계 특정하기
Grid에 1D noise를 활용해 흑백의 Noise를 생성해준다.
1. 앞서 1D Noise를 사용했기 때문에 Cd의 rgb 정보가 모두 동일하다. 그렇기 때문에 Cd.x의 정보만 가져와서 float 정보로 사용하겠다.
2. chramp로 twa의 정보를 활용한다.
3. Cd를 twa로 다시 정의내려 주기 전에 Cd의 값을 {0,0,0}으로 변경해준다.
4. Cd 값이 twa에 의해 조절되게 만들기 위해 set(twa,twa,twa)로 다시 정의내려준다.
5. 범위를 사진과 같이 둔다면 원하던 것처럼 흑백의 경계가 특정된다. 만약 범위를 늘려주고 싶다면 좀 더 펴진 모양의 그래프를 만들어주자.
마지막으로 아래에 sA를 달아주어 경계에서 Particle이 만들어지도록 해보았다.
'TWA Houdini1 > Starter & Particles' 카테고리의 다른 글
TWA 후디니 1 Particle_08 : 충돌감지(Collision Detect) POP Solver (0) | 2023.02.09 |
---|---|
TWA 후디니 1 Particle_07 : Star (0) | 2023.02.08 |
TWA 후디니 1 Particle_05 : 스파크 묘사 & IMG에서 합성하기 (0) | 2023.02.04 |
TWA 후디니 1 Particle_04 : 파티클에서 중력과 충돌 적용 (0) | 2023.02.03 |
TWA 후디니 1 Particle_03 : POP Solver 시작 (1) | 2023.02.02 |