본문 바로가기
기타 공부하기/후디니

임시필드 Tempvel : 연기 디테일 추가하기

by 대마왕J 2024. 3. 21.

임시필드의 개념은 다른 필드와 좀 다르다. 기존에 '없던 필드' 에 디테일을 위해 임시 필드를 추가하는 것이기 때문에 만드는 방식이 다르고, 없는 필드기 때문에 매 프레임 만든 임시 필드를 삭제해야 한다. 

임시필드의 구조는 기존에 있던 노드의 내부구조랑 똑같이 만드는거다. 

임시필드는 그라디언트를 이용해 만드는데 이렇게 내부적으로 정의되어 있지 않는 구조를 새로 만들어 주는 이유는 , 기존 연기모습을 그대로 유지한 상태에서 추가적인 디테일을 주고 싶어서이다. 
옛날에 했던게 기억나는지 모르겠지만... 1D 정보가 3D 정보로 바뀌면서 영향을 줄때 advect 를 해준거랑 맥락상 비슷하다. 그래서 그 과정에 대한 사이클이 필요하다 

1. tempvel필드를 만든다 - gasmatchfield
2. 분석해서 값을 tempvel에 3D 그라디언트 정보를 넣어준다 - gasanalysis 
3. 값을 조절한다 - gasfieldVOP
4. 어떤 엔진을 이용해서 advect 해줄거냐 - gasadvectfield 
5. 어떤 계산을 할거냐 - gascalculate
6. 다 했으니까 임시 필드를 지우자. - gasLinearCombination 

기본 연기 만들기 

그러기 위해서 기본 연기를 만들고 보자. 

우선 소스 만드는건 기억날거다. density 와 temperature, 그리고 vel 을 만드는 것까지. 

volumeVOP 에서는 파라미터 달아서 걍 위로 올라가게끔 조치해놓은 상태입니다. 

소스 설정은 이제 끝났으므로, dopnet 을 돌려보자 

dopnet은 안에 외워야 하는데 참 안외워진다 

gasresizefluiddynamic 은 Max bound의 clamp 값을 끊어야 한다는걸 잊지말자. 

volumesource는 sop 패스를 불러오고 난후, operation을 3개 불러오는걸 역시 잊지 말자. 
각 operation은 다음과 같다 

그리고 확인. 어머나 밀도가 너무 낮네 

컨트롤 하나 만들어서 다 연결해주자. 헤헤 실수로 0.02 했다가 컴터 다운되는줄 알았네. ESC 를 누르면 취소시킬 수 있다! 

이제 적절히 부력은 0로 해주고 , 위로 올라가게 해주고 , 라이트도 넣고 volume visualiztion 도 넣어서 밀도도 올려주고 그랬다.  voloume VOP 에서 위로 은근히 올라가게만 해줘서 계산양도 절약해주고. 

자 그럼 이제부터 

tempvel을 만들어 보자 

자 그럼 위에 설명된 노드들을 dopnet에 깔고 보자 

gasmatchfield
만들 필드 이름 쓰고
레퍼런스 필드 이름쓰고
랭크는 벡터. 
매치 샘플하면 레퍼런스 필드랑 해상도를 맞춰준다는 말

gasanalysis

필드는 tempvel 이고
소스 필드는 density에다가 gradient로 분석해서 넣어주세요 

gasfieldVOP 

여기는 작업을 하게 되면 본격적으로 하게 될 곳이고, 일단 tempvel들을 vector로 입출력을 합시다. 뭐라도 하면 되겠지 

 

gasadvectfield

Field에 tempvel 넣어주고 
Advect Scheme에 BFECC 엔진을 선택해주고 Clamp 처리해준다. 이게 가장 좋은 엔진

겸해서 Smoke solver 에서도 advection scheme을 맞춰주는게 좋으니 하자. 

gascalculate

이제 계산을 하면 된다. 
우리가 원하는 계산은
tempvel을 vel 필드에 add 해주는 거니까 이렇게 . 

gaslinearcombination

이제 tempvel을 지워주도록 하자. 
tempvel을 copy해줘서 바꿔주는데, 아무것도 바꿔주는게 없으니 지워지는거다. 

결과보기 

일단 아무것도 없는 결과부터. gasfieldVOP 에다가 일단 0로. 

는 변화가 없다. 

하지만 -0.1만 줘도 아래로 힘이 추가되는걸 볼 수 있다. 

작동됨. 

오? 그냥 연결하면 난리가 남.

tempvel의 장점

이렇게 해놓고 보면

0일때는 이런 모양인데 

0.3정도 영향을 주면 이렇다 

넘 세네 0.1

이렇게 tempvel은 기본 모양을 부수지 않고, 기본 모양에 추가 값을 외각부분에만 넣어주는 느낌으로 적용이 된다. 
즉 tempvel은 과하게 쓰지 않고 막판에 살짝 디테일 넣어주는데 쓰는것임. 

GasTurbulence 

일단 tempvel  없고 gas turbulence 만 넣고 보자 

여기에 tempvel을 넣으면

이렇게 '모양이 유지된 채' 디테일이 추가된다는 거다. 하 시뮬레이션 오래 걸린다. 

 

좀 더 자연스럽게 temvel을 더해주자 - temvel 연산에 노이즈 넣기 

이번에는 좀 더 temvel에 자연스러움을 섞어주는거다. 

당장 기본형 tempvel에서부터 시작하자 

여기에 gas field vop 여기에 노이즈를 넣어 보자는 거다 

일단 다시 비교

temvel이 없는버전

temvel이 있는 버전
오메 확실히 디테일이 다르네

이제 tempvel에 노이즈를 주고 싶은데 

여기서 조금 주의해야 할게, tubnoise의 포지션을 그냥 볼륨의 position 을 써버리면, 그냥 볼륨공간에 노이즈를 주는거라 형태에 그라디언트에다가 값을 더 추가해주는 tempvel을 쓰는게 의미가 없다. 

그러니 같은 3D 공간인 tempvel공간을 노이즈 기준으로 삼아야 tempvel 노이즈가 된다. 

아 1 곱해주는거 잊었다 ㅋㅋ

어쨌건 이러고 나면

와우

 

이거 다시 차근차근히 비교해 보자. 

tempvel 없는 버전 tempvel 버전 tempvel에 노이즈 준 버전

 

 

와 값 따라서 확실히 다르다. 

 

그럼 여기까지

 

반응형

댓글