ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [후딘이] Flipsolver > Reseed/ID/ Pop attract/ Enumerate
    Houdini 2024. 5. 23. 11:16
    728x90
    반응형

    FlipSolver 노드

    유체 동역학 시뮬레이션을 위한 주요 도구. 블렌더 플립플루이드 애드온과비교하면

    마치 Domain같은 기능을 하는것처럼 보인다. 

    FlipSolver 내에서 여러가지 설정을 바꿀수있는데 그중에서도 Reseed 기능에 대해 알아보za

     

    Reseed?

     

    시뮬레이션 도중 유체를 구성하는 입자의 밀도가 일정 수준을 유지하도록 보장한다. 

    유체가 움직이면서 입자들이 퍼지거나 모이게되는 경우 이 옵션을이용해 자동으로 조정하는데,

    유체가 빠르게 흐르거나 큰 변형을 겪는 상황에서 입자들이 너무 멀리 떨어져 유체의 표면이 끊기거나

    반대로 너무 밀집하여 계산 비용이 불필요하게 높아지는 것을 방지한다. 

     

     

    작동방식

    -입자 추가:

     유체의 일부 영역에서 입자의 밀도가 설정된 임계값보다 낮을 경우 'reseed'는 자동적으로 추가 입자를 생성해

    그 지역을 채운다

    -입자 제거:

    너무 많은 입자가 특정 영역에 밀집되어 있을때는 일부 입자를 제거해서 계산 효율을 높이고 메모리 사용을 최적화한다.

     

     

    활용방법

    높은 품질의 유체 표면 : 유체 시뮬레이션에서 유체 밀도를 조절함으로써 더 매끄럽고 정교한 유체 생성가능. 시각적으로 더 사실적인 결과물을 제작하는데 필수적이다.

     

    효율적인 시뮬레이션 :  메모리와 처리 시간을 절약하면서도 유체의 품질을 유지할수있다. 시뮬레이션 중 필요에 따라 동적으로 입자 수를 조절하기때문에 전반적인 성능 최적화에 도움이된다.

     

     

    Particle Separation

    입자의 크기와 밀도를 제어하는 중요한 역할

    유체를 구성하는 개별입자들간의 초기 거리를 설정함

    입자들이 얼마나 밀집되어있는지, 유기의 전체적인 해상도를 어떻게 형성할지를 결정하는 중요한역할을한다.

     

    Particle separation 값이 적을수록 입자수가 많아지고 디테일이증가, 비용이 높아짐

    높은 디테일 요구시 작은 particle separation을 사용함. 작은 물방울이나 물표면의 잔물결 등

    세밀한텍표현시 사용

     

    대규모의 유체 시뮬레이션(바다, 홍수, 파도 등)에서 높은 particle separation값을 줘서 속도를 높이자.

    대량의 물을 다루는 장면에서 유용하게 사용가능

     

    일반적으로 중간 정도 사이즈로 성능과 품질 사이의 균형을 맞추는것이 일반적.

     

     

    음 머리아프니까 여기까지만알아보자..

    아무튼reseeding은 일정된 수의 파 티클을 쭉 유지하고싶을때 쓰면된다는 정도만 알자!

     

    ID

     

    ID파라미터를 사용하려면  

    pop force에서 vexpression을 켜주고  Ranomize Magnitude로 선택해줌

     

    그럼 vexpression 칸에 이런 ..것이 뜨는데

    무슨뜻인가?

    위 코드는 각 입자의 힘의 크기를 무작위로 조정하는데 사용된다. 

    float amt = rand(@id);

      rand() 함수는 0과 1 사이의 무작위 값을 생성한다. (random의 rand임!)

    이때 @id를 시드값으로 사용하여 각 입자마다 고유한 랜덤값을 얻음.  이렇게하면

    모든 입자가 동일하지않고 각기 다른 패턴을 가지게됨

    force * = fit01(amt, 0.5, 1.0)

    fit01()함수는 첫번째 인자로 받은 값을 0과 1사이의 범위에서 새로운 범위로 조정한다.

    이 결과값으로 기존의 힘을 조정함. 

    즉 각 입자에서 적용되는 힘의 크기가 최소 50%에서 최대 100%사이로 무작위로 조정됨

    (0.5~1.0  가 바로  50%~100% 사이라는뜻)

     

    와 뭔소리야!!

     

    암튼 위 코드 적용된 모습의 시뮬레이션

     

     

     

    그럼 비교군으로 위의 id 를 사용하지않은,

    즉 버텍스마다 다른 값 부여하지 않은 시뮬레이션은 어떨까?

     

     

    흠.. 위에것보다 균일한..편인가? 잘모르겠지만ㅇ ㅏㅁ튼 그런것으로..

    균일해야하는데 안균일하다면 내가 뭔가 설정을 덜 껐거나 뭔가를 잘못한것...

     

     

     

    정리

    아무튼 ID는 각 파티클이나 버텍스에 다양한 힘의 크기를 적용하여 더 자연스럽고 

    다같이 한꺼번에 움직이지 않는 모습을 만들수있다.

     

    특정 id를 가진 입자들에게만 특별한 행동을 적용하거나 조건을 설정가능

     오이건 블렌더의 버텍스그룹과 비슷한데?

    이 ID는 파티클이나 버텍스가 시뮬레이션 내에서 생성된 순서에 따라 자동으로 할당되며 이를 통해 각각의

    개체를 구별하고 개별적인 조작이 가능해진다.

     

     

    굳이 id를 매번 설정하지않아도 attribute 노드를 사용하는방식으로도 사용가능하다고함

    그렇게 함 해보자  하지말자 튜토리얼과 버전이 달라서 하다가 못쪼차감...

    이 밑에서부터는 무시!

     

    ----------------------------------무시선-------------------------

    enumerate노드를 primitive 다음에 추가해줌

    Group type: points

    Attribute: id 라고 바꿔줌

     

     

    잠깐! enumerate노드는 또 뭔가요?ㅠ 아는게없네 다모르겄네

     

    Enumerate 노드

    각 점(point), 입자(particle) 또는 기타 요소에 연속된 번호를 할당하는데 사용됨

    아! 그럼 아까그 ID랑 비슷한데 또 다른... 그런거구나

     

    주로 데이터의 순서를 부여하거나 각 요소를 식별하기 위한 고유한 번호를 제공하는데 쓰인다.

    배열이나 리스트와 같은 집합 내에서 각 요소에 순차적인 번호를 부여, 나중에 루프 처리나 조건부 연산에서 사용가능하다.

     

    활용예시

    - 모션그래픽: 특정 순서대로 애니매이션 효과를 적용하고싶을 때

     enumerate노드로 각 요소에 번호를 부여하고 이 번호를 기반으로 애니매이션의 딜레이를 설정할수있다.

    - 데이터분류: 다양한 데이터 포인트를 그룹화하고 각 그룹에 인덱스를 할당하여 관리할수 있다.

     

     

    대충 챗지피티가 생성했는데 번호는 엉망으로 생성한....

    아무튼 이렇게 나열된 상자에 할당된 번호 순서대로 색상이 바뀌는 그런 애니매이션을 할수있따고

    설명하고 싶은모양!! 

     

     

    Null 이름변경 후 ctrl+c 로 복사

     

     

    그리고 이번에는  obj>flip>dopnet 노드로 들어와서

    pop attract 노드를 맨위에 넣어주자. (pop force는 hide)

     

     대충 이름에서 느껴지는 파티클을 끌어당기는? 역할을하는 노드같음

    sop path부분에 아까 만든 null 경로 복사

    -------------------------무시선 끝----------------------

     

     

    암튼 대충 그렇다고함!

    이제 머리속 저장장치 한계에 육박했다

    잠깐 멈추고 다시 다른 베이직 튜토리얼을 파자

     

     

    728x90
Designed by Tistory.