실감
실감 공통편 나이아가라 시스템 제어
안녕하세요 박현상 입니다
이번 시간에는 나이아가라 시스템의 제어에 대하여 알아보려고 합니다
이펙트는 컨텐츠 실행 중에 변화를 만들어냅니다
따라서 시스템과 연계되어 다양한 그래픽, 외부 변수와의 연동을 활용할 수 있는데요
블루프린트,3D 메시 데이터와 연계되어 사용하거나
머티리얼을 나이아가라에서 직접 제어하는 것도 가능합니다
다이나믹 머티리얼을 통한 머티리얼 효과 제어
우선은 스타트 컨텐츠에서 프랍에 머티리얼 항목으로 가시면 됩니다
프랍 안에 있는 머티리얼 폴더입니다
의자를 사용할 것이기 때문에 M 언더바 체어라고 되어 있는 것을
우리의 VFX 폴더로 드래그해서 카피를 해줍니다
그러면 프랍 폴더에 있던 머티리얼이 VFX 폴더로
이렇게 카피가 된 것을 확인하실 수가 있죠
동일한 이름이 혼종이 되면 안되니까
이름을 리네임을 통해서 체어 언더바 디졸브라고 지어 주겠습니다
더블 클릭해서 열겠습니다
우리는 의자에 사용된 이 머티리얼을 약간 변형해서
디졸브 효과를 만들어 줄 겁니다
우선은 약간 이렇게 노드들이 들어갈 수 있는 공간들을
전체적으로 선택을 해서
좀 밀어서 확보를 해 주고요
현재는 마스터 노드를 확인해 보면
opacity와 관련된
서서히 사라져야 되니까 투명도가 바뀌어야겠죠
그러니까 이 투명도를 우리가 사용할 수 있게끔
블렌드 모드를 OPEQUE가 아닌 MASKED로 바꿔서
오파시티 마스크 항목을 활성화 해줍니다
기본적으로 오파시티 마스크는 0.5를 입력해도 보이는데
반투명을 지원하지 않고
0을 입력하면 이렇게 아예 안 보이고
0.3을 입력해도 지금 보는 것처럼 안 보이고
오로지 일정한 숫자를 기준으로 해서
0 아니면 1만
보인다 안 보인다 라는 개념만 가지고 있는 것이 마스크드 입니다
자,우리의 마스크드 효과를 파티클에서 제어할 것이기 때문에
파티클에서 이 나이아가라 시스템에서 제어할 것이기 때문에
머티리얼에 나이아가라에서 직접적으로 값을 넣어 줄 수 있게끔
Dynamic Parameter라는 노드를 생성해 주도록 하겠습니다
여기에서 단순하게 보면 색깔을 지정하는 것처럼 보이지만
여기에는 개별적으로 전부 다 플롯
소수점을 입력할 수 있는 데이터의 형태로
총 4개의 파라미터가 이렇게 주어집니다
그래서 우리는 이 4개의 파라미터를 잘 구성 해서
디졸브 효과를 제어해 볼 겁니다
우선은 각각의 파라미터들의 이름부터 먼저 지어주고
기본 값을 정해 주도록 하겠습니다
첫 번째는 Noise Scale 이라고 먼저 지겠습니다
두 번째는 Dissolve Value 를 이렇게 지어 주고요
Dissolve Edge 라고 만들고
마지막 파라미터는 Emissive Power 라고 지어 주도록 하겠습니다
저 같은 경우에는 예제를 이미 준비해 놓은 입장이니까
이러한 이름들을 먼저 지정해 놓고 시작할 수가 있는데요
여러분들이 실제로 어떤 효과들을 만들 때는
이러한 이름들은 나중에 다른 사람들을 위해서
나중에 지어지는 경우들이 꽤 많습니다
처음부터 노리고 이렇게 예상하고 만든다기 보다
효과를 만드는 중에 꼭 필요한 것들을 골라 담다 보니
어쩔 수 없이 나중에 지어지는 경우들이 많은데
우선은 이렇게 해 놓고
디폴트 벨류에서 여기에서 얘기하는
Red 라고 되어 있는 파라미터 0번 하고 연결되어 있고
그린은 1번, 블루는 2번, 알파가 3번으로
차례차례 매칭이 되게끔 값이 설정이 됩니다
그래서 Red 에다가 기본 값으로 0.01을 입력해 주겠습니다
그린은 0.5, 블루는 0.2, 마지막으로 알파는 8 입니다
이렇게 해서 값을 설정해 놓으면
나중에 노이즈 스케일에선
빨간색이 0.01 이라는 값이 출력이 되는 겁니다
그래서 여러분들이 디폴트 벨류에 있는 이 색깔을
너무 신경 쓰지 않으셔도 됩니다
얘네들은 서로 색깔을 만들기 위해서 쓰는 건 아니니까요
우선 이미지가 자연스럽게 사라지기 위해서는
노이즈를 이용해서 적용을 해 줘야 되는데
여기에서 노이즈를 만드는 일반적인 노드는
노이즈라고 하는 머티리얼 노드가 있습니다
여기에는 포지션 값이 들어가게 됩니다
그래서 월드 포지션 이라고 검색을 하면
Absolute Position 이라고 되어 있죠
여기에 우리가 스케일 값까지 함께 멀티플라이를 통해서
0.01 이라는 값을
포지션 값과 0.01 이라는 값을 계산해서
월드 포지션에 넣어 주게 될 겁니다
그래서 이것을 일단 오파시티 마스크에 가지고 가 보겠습니다
그러면 지금 보시는 것처럼
이렇게 중간 중간 찢겨진 것 같은 형태의
보이거나 투명하거나
이렇게 두 가지 값만 상태로 존재하게 되는데
이것을 메인 베이스 컬러 노드에다가 잠깐 연결을 끊고
이렇게 베이스 컬러에 연결을 해 보면
이런 식으로 노이즈의 형태로
이렇게 이미지의 형태로 되는데
흰색 영역과 검은색 영역
흰색은 보이는 거,검은색은 안 보이는 거
이렇게 적용이 되는 거고요
만약에 우리가 스케일을 바꾸지 않은 상태에서
이걸 집어 넣는다면 굉장히 자잘자잘해 보이는데
서서히 확대를 해 보면
아주 자잘자잘한 노이즈가 생긴 것으로 확인하실 수가 있습니다
이게 월드 유닛을 기준으로 적용이 되는 것이기 때문에
일부러 이 노이즈의 패턴을 좀 크게 만들고자
유닛 값을 0.01을 곱해서 수정한 것이고요
이렇게 노이즈를 사용하는 방법 중에는
이 노이즈 노드 말고 텍스처를 활용하는 방법도 있습니다
이 텍스처 샘플을 하나 만들어 가지고요
텍스처 항목에서 노이즈라고 검색을 해 보시면
여러 가지 노이즈 텍스처들이 있습니다
그래서 제가 한 번 비슷한
Offset Noise Distance Field
선택을 해 가지고
이 노이즈를 한번 베이스 컬러에다가 연결해 볼 건데요
이런 식으로 노이즈가 적용된 것을 확인하실 수가 있죠
이건 보통의 노이즈 텍스처는 타일링이 되기 때문에
텍스처 코디네이트 같은 것들을 이용해서
반복하는 횟수를 세 장씩 반복하라던가
이런 식으로 해서 UV 항목에 연결해 주면
이렇게 자잘자잘하게 만드는 것도 가능하고
크게 만드는 것도 가능합니다
다만 이 텍스처 샘플이라고 하는 UV 값 같은 경우에는
3D 오브젝트의 UV가
폴리곤을 평면으로 펼친 형태의 영향을 받기 때문에
이걸 만약에 그대로 오파시티에다가 적용을 하게 되면
어떻게 UV가 펴졌느냐에 따라서
이렇게 흔히 심이라고 얘기를 합니다
이렇게 갈라져 있는
폴리곤이 갈라진 이 경계
UV들끼리 서로 떨어져 있는
만약에 육면체를 UV를 핀다고 하면
우리가 흔히 생각하는 이런 전개도의 형식으로
이렇게 펼 수도 있겠죠
혹은 6개의 면을 다 따로 펼 수도 있을 것이고요
그때 이렇게 갈라져 있는 이런 부분들을
우리는 심 이라고 부르는데
이렇게 심 때문에 패턴이 연속되지 않고
지저분해 보이는 것을 확인할 수가 있습니다
그래서 그런 것들을 방지하기 위해서
노이즈 텍스처를 쓰는 건데요
노이즈 노드를 사용하는 건데
노이즈 노드를 사용하다 보면
지금 보시는 것처럼 월드의 포지션 값을 기준으로 생성된 노이즈이기 때문에
UV 심에 영향을 받지 않으면서도 깔끔하게 효과를 적용할 수가 있습니다
불필요한 효과는 지워주고
텍스처랑 이건 지우고
베이스 컬러를 다시 원래 색상이 나올 수 있게끔 연결해 주겠습니다
자 우리는 이러한 노이즈 값을 바탕으로 해서
추가적인 디졸브 효과를 만들 겁니다
우선 Step 이라는 노드를 이용해 가지고
먼저 노이즈와 스텝 값으로 스텝을 이용해서
X에다가는 노이즈 값을
Y에다가는 디졸브 밸류값을 연결해 줬습니다
이런 식으로
그리고 나서 이것을 알파 오파시티 마스크에다가 연결을 해 주게 되면
이제 그린 채널이죠
디졸브 밸류 인덱스 1번
그린 채널에 있는 값을 낮추게 되면
마이너스를 좀 많이 낮춰 보겠습니다
이런 식으로 보이는 영역이 많아지게 되고요
이 그린 채널의 값을 높여주게 되면
점점 높여서 어느 순간 1보다 커지는 상황이 되면
거의 보이지 않게
이렇게 값이 변화되는 것을 확인하실 수가 있죠
그래서 우리는 이 스텝 노드를 통해서 보이고 안 보이고의 영역이
디졸브 밸류에 따라서 보이고 안 보이고의 영역이 컨트롤되게끔 만들어 놨습니다
여기에다가 스텝 노드를 하나 더 Ctrl-C, Ctrl-V로 복사를 해 주고요
이번에는 디졸브 밸류에다가 더하기로
디졸브 엣지 값
0.2라고 우리가 정해 둔 값이 있었죠
더해서 이것을 복사된 스텝의 y
그리고 노이즈는 동일하게 노이즈로 연결을 해 줬습니다
그리고 나서 Subtractive를 이용해서
Subtract 라고 하는 빼기
덧셈 뺄샘의 빼기 노드를 이용해서 디졸브 밸류만 연결된 것을
임의의 a 라고
지칭하기 쉽게 a 라고 지칭할 거고요
디졸브 밸류와 엣지가 합쳐진 값을
스텝에 적용한 것을 b 라고 지칭하겠습니다
이것을 Subtractive로 넣어서
이 결과를 확인해 보면
지금 보는 것처럼 노이즈 패턴의 경계만 이렇게 나오는 걸 볼 수가 있는데요
이 스텝이라고 하는 노드는 우리가 블랙에서 화이트까지
이렇게 그라디언트 라고 보통 얘기를 하죠
중간에 그레이 톤을 이용해서 이렇게 부드럽게 표현이 되던 것을
내가 지정한 임의의 값을 기준으로 해서
이를테면 0.5 보다 작다면 무조건 0으로 만들고
0.5 보다 크다면 무조건 1로 만드는 이러한 기능을 하는 게
바로 이 스텝이 가지는 일입니다
그래서 1이 되면 보이는 것이고요
0이면 안 보이는 게 되겠죠
만약에 우리가 디졸브 밸류 값을 0.5 라고 지정을 했다면
이렇게 딱 블랙에서 화이트까지
절반을 기준으로 해서 보이고 안 보이는 게 결정이 날 겁니다
근데 여기에다가 엣지 값을 추가 했죠
0.2 라고 하는 엣지 값을 추가 했죠
이 빨간색 선을 엣지라고 하겠습니다
그러면 전체적으로 보이는 영역이 훨씬 줄어들게 되겠죠
이 빨간색의 보이는 영역이 b 입니다
그래서 실제로는 한 장의 메쉬에다가 노이즈 패턴을 집어넣는다고 했을 때
그린색이 a 라고 생각하시면 되고
빨간색이 b 라고 생각하시면 됩니다
이런 식으로 영역이 서로 다르게 나오는 결과가 생기고요
여기에서 a 에서 b 를 뺀 결과가
주황색으로 이만큼만 보이게 되는 겁니다
이러한 원리를 통해서 엣지를 만들어 줬고요
이 엣지를 이용해서 디졸브 색상을 정할 수 있는
벡터 파라미터 로드를 이용해서
이미시브 컬러라고 이름을 짓고
이걸 빨간색으로 한 번 설정해 두겠습니다
여기에다가 이미시브 파워 값을 멀티플라이를 해 줘 가지고요
한 번 더 서브트랙티브한 결과랑 멀티플라이를 해 주겠습니다
그것을 이미시브 컬러에다가 연결을 해 보면
이제 이 선의 간격에
선의 영역에 이런 식으로 발광하는 느낌을 만들어 줄 수가 있게 되고
다시 한번 a 영역
이것을 퍼시티 마스크에 연결한다면
보이는 영역에서 안 보이는 영역을 뺐으니까
제가 녹색으로 한 번 표시해 보겠습니다
이게 a 영역입니다
녹색이 a 영역
이 a 영역에서 빨간색의 b 영역을 뺀 겁니다
b 영역을 빼면 자연스럽게 밝게 빛나는 경계 값을
우리가 찾아 줄 수가 있는 것이죠
이렇게 디졸브 머티리얼은 만들어졌고요
이것을 저장 하고요
이 머트리얼을 인스턴스화 시키겠습니다
머티리얼을 인스턴스로 만들어서
나중에는 여러분들이 미리 보기 할 때
이 파라미터 값 같은 것들이 나중에 인스턴스로
혹은 색깔을 다르게 하고 싶다거나 할 때
이런 것들을 바꾸고자 한다면
여기에서 이미시브 컬러 값을 임의로 녹색으로도 바꿀 수 있다거나
블루를 첨가한다거나
이런 식의 변경이 가능하겠죠
그래서 일부러 이런 식의 베리에이션을 위해서 인스턴스로 따로 만들어 둔 것이고요
이제 우리가 해야 할 일은
이 다이나믹 파라미터에 나이아가라를 통해서 접근해 가지고
여기에 있는 값의 변화를 만들어 주도록 할 겁니다
머티리얼은 준비가 되었으니까
이제 나이아가라 에셋을 만들도록 하겠습니다
브라우저 창에서 오른쪽 클릭
나이아가라 시스템으로 클릭을 해 줍니다
이번에는 템플릿을 이용할 건데요
여기 있는 여러 가지 템플릿 중에
블로잉 파티클이라고 하는 이쁘게 날아가는 파티클이 있습니다
그래서 이걸 먼저 선택을 해서 Create 버튼을 눌러 주도록 하겠습니다
그리고 나이아가라의 이름은 FX_Chair Dissolve로 만들어 주고요
그러면 우리가 앞서서 선택한 블로잉 파티클이라고 하는
이미터가 추가된 상태로 시스템이 생성이 된 것을 확인할 수가 있습니다
우선은 불필요한 모듈들을 원래는 삭제를 해야 맞겠지만
저 같은 경우에는
여러분들이 화면을 보면서도 삭제된 것들을 확인하실 수 있게
활성화되어 있는 걸 꺼놓고 진행을 하겠습니다
우선 파티클 스폰 영역에 있는 Shape Location을 비활성화 시키고요
그리고 Gravity Force라고 하는 것도 비활성화 시키겠습니다
그러면 아래로 이렇게 날리던 꽃잎 같은 효과들이
이제는 옆으로 이렇게 날리는 것들을 확인하실 수가 있죠
그리고 여기에다가 파티클 스폰 영역 중에 플러스 버튼을 눌러서
StaticMesh Location 모듈을 추가해 주겠습니다
Static Mesh Location의 Preview Mesh 영역을
sm_chair로 지정을 해 주면 이렇게 경고창이 하나가 뜹니다
이 Static Mesh가 가지고 있는 여러가지 옵션들 중에
CPU Access라고 하는 옵션이 현재 비활성화 되어 있어서
문제가 된다는 뜻이고요
이것을 Fix Now 버튼을 눌러서 고쳐 주시면 됩니다
자 여기에서 Initial Mesh Orientation도 잠시 끄고
그리고 여기서 Wind Force라던가 이런 것들을 꺼가지고
현재 우리가 추가한 StaticMesh Orientation의 역할에 대해서 보여드리면
언뜻 보면 의자의 형상이 보이죠
움직임이 있어서 제대로 형태 파악이 좀 어려웠었겠지만
지금 보시는 것처럼 StaticMesh Location은
Mesh 자체를 파티클이 스폰 되는 영역으로서 쓰일 수가 있습니다
그래서 이걸 통해서 의자의 외형에 맞춰 가지고
파티클 입자들이 자연스럽게 생성돼서 사라질 수 있게끔
이렇게 설정을 해 놓은 것이고요
여기에서 Emitter를 차근차근 바꿔 주도록 하겠습니다
지금 Emitter같은 경우에는 24시간 쉬지 않고돌아가는
인피니티의 형태로 세팅이 되어 있습니다
이것을 딱 한 번만 작동하게끔 둘겁니다
그리고 반복되지 않으니까 딱 5초 동안만 가동되게끔 해놨고요
그리고 스폰 레이트 값은 현재 15로 되어 있는데
이것을 초당 100개씩 생성하게끔 개수를 더 많이 늘리도록 할 겁니다
Initialize Particle 항목에서는 라이프 타임이 현재 12초로 굉장히 긴데
이것을 Minimum 3초에서 최대 5초까지로
입자가 짧게
금방 사라질 수 있도록 수정을 해 놨고요
시작할 때 컬러는
우리가 앞서 Material에서 Red 색상
RGB에서 Red, Green 0, Blue 0으로 기본 값을 이렇게 해 놨었죠
여기에다가 곱하기 8을 했었습니다
이것은 Dynamic Parameter에서 알파 채널에 해당하는
이미시브 파워값을 8로 설정을 해서
결과적으로는 Red가 8인 상태
그래서 밝게 빛나는 상태로 계산을 했었는데요
그거랑 유사한 값이 되게
Red가 8, Y는 1, Green은 1, Blue는 0.2 이렇게 해가지고
약간 완전히 새빨간 색이 아니라
살짝 붉은 기가 강하게 도는 컬러로 바꿔 줬습니다
그리고 나서 이 사이즈 자체가 조금 크기 때문에
이것을 2에서 5 사이의 사이즈로 바꿔서 조금 작은
마치 꽃잎과 같은 형태로 인식될 수 있게끔
이게 Particle 자체가
만약에 앞서서 원래 값이었던 4에서 8이라고 한다면
일반적으로 꽃잎이라고 보기에는 조금 크죠
그래서 약간 꽃잎 같이 느껴지게끔 사이즈를 줄여 가지고
이렇게 조금 더 자잘한 이미지로 만들어 줬습니다
그리고 나서 Wind Force의 값을
단순히 너무 강하게 날려서 의자의 형태가 안 보이면 효과를 제작하기 어렵겠죠
그래서 이 Wind Force에서 X축
앞으로 날아가는 값은 20으로 줄여서
처음에 생성이 될 때 의자의 형태가 사람들에게 인식될 수 있게끔 해 놓고요
그리고 앞으로 날아가는 게 아니라
약간 위로 타오르면서 불꽃처럼 사그라들듯이 표현되도록
Z값을 50으로 바꿔 놓도록 하겠습니다
그러면 지금 보시는 것처럼 입자가 사라라락 하면서 생겨났다가
초반에 의자의 형상이 어느 정도 보였다가
사라락하고 사라지는 형태를 보실 수가 있죠
자 제가 수정한 값들이 있는 이 모듈들만 선택해서 보여드리면 이렇게 됩니다
Emitter 스테이트,스폰레이트 값도 바꿨죠
순서대로 나오게 하면 이렇게 되겠네요
이펙트는 현재 이 Particle은 이 정도까지만 하겠습니다
그래서 제가 바꾼 Particle에 대한 묘사는 이 정도까지만 하겠습니다
물론 이 안에는 메시 오리엔테이션 이라던가 이런 것들을 통해서
앞서서 설명하지 않은 빌보드가 아닌 형식으로
이렇게 자세히 보면 입자들이 회전을 하게끔
스프라이트를 회전시키는 기능이라던가
이런 것들이 더 추가가 되어 있습니다
이런 것들이 추가되어 있어서
이런 것들은 나중에 여러분들이 효과를 껐다 켰다 해보면서
어울리는 효과 같은 것들을 생각해 보시면
어떻게 사용했는지 확인해 보시면 좋을 것 같고요
정리하면서 우선은 Emitter, 스폰레이트
Initialize Particle, StaticMesh Location, 그리고 Wind Force까지
제가 세부적인 Parameter 값을 바꾼 모듈들을 한 번에 쭉 선택해 보여드리면서
이거는 마무리 하겠습니다
이번에는 또 다른 모듈을 추가할 건데
이번엔 Particle을 위한 모듈이 아니고요
의자를 보여주기 위해서 만들 겁니다
현재는 의자의 실루엣에 맞춰서 Particle은 생성되지만 의자 자체가 보이지는 않죠
우선은 오른쪽 클릭해서 Add Emitter를 눌러줍니다
그리고 여기에서 보면 Single Looping Particle 이라고 하는 템플릿이 있습니다
이것을 Add 버튼을 클릭해서 추가해 줍니다
그러면 화면상에 흰색의 Particle이 생성된 것을 확인하실 수가 있죠
이번에도 사용하지 않을 모듈을 비활성화 해 줄 건데
이번에는 메쉬를 쓸 것이기 때문에 스프라이트 렌더러를 꺼 줄 겁니다
그렇게 되면 현재 눈에 보이는 게 아무것도 없죠
렌더러에서 메쉬 렌더러를 추가해 주겠습니다
이 메쉬 렌더러에 우리가 의자를 추가할 건데요
메쉬를 클릭하고
현재는 기즈모의 형태의 메쉬가 등록된 것을 확인하실 수가 있죠
화살표 모양의 기즈모
이걸 보실 수가 있는데
메쉬를 열어 가지고 언더바 체어를 검색해 줍니다
그래서 이 체어를 등록해 주시면 의자가 눈으로 확인할 수 있게 되죠
그럼 지금과 같은 상태에서 이 의자가 가지고 있는 기본 Material이 보이게 되는데
우리는 이걸 사용할 게 아니죠
Material을 Dissolve Material로 바꿔 줘야 됩니다
현재는 StaticMesh Editor에서 기본 설정되어 있는 Material 값이 보이는 거고
Material 값을 새로운 걸 사용하기 위해서
바로 밑에 있는 Material Override 항목을 활성화해 줍니다
그럼 아래쪽에 Override Material을 플러스 버튼이 클릭할 수 있는 형태로 활성화가 됩니다
이 플러스 버튼을 눌러 가지고 열어 보면
인덱스 항목에서 우리가 임의로 지정한 Material을 덮어 씌워서
기존에 있던 Material 대신 보여 줄 수 있게끔 설정을 할 수 있습니다
그래서 우리는 여기에서 M Chair Dissolve로 연결해 주도록 하겠습니다
이렇게 Dissolve의 형태로 보이게 되죠
이제 우리는 Material이 가지고 있는 다이나믹 파라미터에 접근을 해야 되기 때문에
업데이트 항목에서 플러스 버튼을 눌러서
다이나믹 Material 파라미터 모듈을 업데이트에 추가해 줄 겁니다
업데이트에다가 추가하는 이유는
시간이 지남에 따라서 서서히 사라지거나 색이 바뀌거나 해야 되니까
이렇게 추가를 해 준 것이구요
이미 이 Emitter 자체에 설정되어 있는 Material에
여기 Material이 있죠
다이나믹 Material이 있는 데이터가 Emitter에 바로 연결이 되기 때문에
우리가 별도의 어떤 세팅을 하지 않아도
지금 보시는 것처럼 파라미터의 이름들이 자동으로 리스트업 된 것을 확인할 수가 있구요
현재는 우리가 미리 Material에 설정해 놨던 기본 값들은 무시가 되고
모듈에서 설정되어 있는 값들이 등록이 되어 있습니다
만약에 여기에서 노이즈 스케일 값을 키워주게 되면
지금 보시는 것처럼 노이즈의 크기를 임의로 변경할 수가 있구요
Dissolve Value 값을 키우게 되면
사라지고 나타나고, 사라지고 나타나고를 컨트롤 해 줄 수 있습니다
당연히 이미시브 파워로 엣지 값이 0 이니까 경계가 안 보이는데
엣지 값을 살짝 놔둔 후에
이미시브 파워를 강하게 어떻게 세팅 하느냐에 따라서
지금 보는 것처럼 우리가 했던 8 이라는 값을 넣게 되면
지금 보시는 것처럼
이렇게 사라지는 경계 부분이 빛나는 것을 확인하실 수가 있죠
엣지의 두께도 우리가 임의로 더 넓게 보이게 하거나
더 좁게 보이게 하거나
이런 것들도 수정이 가능합니다
그래서 이 값이 단일 값으로 쓰이는 게 아니구요
경우에 따라서 노이즈 같은 경우에는 단일 값으로
0.01 정도로 둘 수 있겠으나
Dissolve Value 같은 경우에는 완전히 온전하게 보이는 상태에서
서서히 사라지게끔 해야 되기 때문에
이 값이 단일 값이면 안 되는 거죠
그래서 값의 타입을 값의 오른쪽에 있는 아래쪽 화살표를 눌러서
Float From Curve를 통해서 값을 바꿔 줄 겁니다
지금 보시면 라이프 타임
이 Particle 입자가 가지고 있는 라이프 타임에 맞춰 가지고
10초라는 라이프 타임에 맞춰서
시작할 때는 1이였다가
100% 10초가 다 흘렀을 때는 0이 되게끔 해서
우리가 원하는
보여지는 상태에서 서서히 사라지는 게 아니라
안 보이는 상태에서 서서히 나타나듯이 표현이 되고 있죠
그래서 이 그래프의 형태를 역방향으로 뒤집어 줄 겁니다
우선 템플릿을 통해서 뒤집는데
여기가 0이 되면 온전하게 보이는 상태는 아니기 때문에
잠시 줌을 눌러서 그래프를 화면에 맞게 두고요
시간이 0%일 때 Value 값을 마이너스 2 정도로 두고
보이는 것에서 사라지게끔 만들어 줄 겁니다
마찬가지로 시간이 100%일 때 Value 값을 2로 두고
1까지만 하면 완전히 사라지지 않기 때문에
완전히 사라질 수 있게끔
지금 보는 것처럼 이렇게 사라질 수 있게끔
다시 한번 줌을 눌러서
마이너스 2에서 2까지
값이 시간에 따라서 서서히 바뀌게끔 표현을 해봤습니다
여기에서 여러분들이 원하신다면
중간에 커브의 형태를 Auto로 바꿔서
사라지는 속도에 대한 변화도 만들어 줄 수가 있겠죠
빨리 사라지다가 서서히 천천히 바뀌게끔 한다던가
아니면 이 커브에 반대되는 형태로
이런 식으로 경사가 급해질수록
변화가 많아진다는 뜻으로 이해하셔도 됩니다
이거는 여러분들이 한 번 재미있는 효과나
이런 것들을 만들어 보시는 것도 좋을 것 같습니다
이런 식으로
그래서 여러분들께서 이런 식의 그래프를 통해서
시간에 따라서 어떻게 바뀌는지
이런 것들을 제어해 보시면 좋을 것 같고요
현재는 이 이펙트 자체
Blowing Particle 자체가 공장 라인의 가동시간은 5초이고
그리고 Particle 입자의 라이프 타임은 최대 5초입니다
최대 5초
그러면 어떤 일이 발생하냐면
공장에서 5초 동안 만들었던
5초 때 만들어진 Particle이 추가로 5초 동안 라이프 타임을 가지고 살아가게 되니까
이때 뿅 하고 사라지게 되겠죠
그래서 이 Blowing Particle은 10초라고 하는
전체 최대의 보여지는 시간이 10초 정도로 예상이 됩니다
근데 이 Single Looping Particle의 기본 입자의 시간이 10초로 되어 있습니다
10초
이렇게 된다면 입자들이 다 사라지고 난 다음에도
계속해서 남아 있게 되겠죠
의자가 사라진 모습이 완전히 없어지지 않고
지금처럼 약간 남아 있는 형태가 될 건데
이거는 여러분들이 제어할 수 있는 방법이 여러 가지가 있습니다
첫 번째로는 이 Dynamic Parameter의 그래프를 직선으로 바꾸겠습니다
Linear 형태로 바꿔주고
마찬가지로 Linear 형태로 바꿔주고
라이프 타임 동안 100% 살아라가 아니라
절반만 살아라
절반동안만 값을 빠르게 바꿔줘라
이런 식으로 바꾸는 방법도 있구요
추가로 뭐 여기에서 임의로 5초를 해주면 되는데
매번 이런 하나의 값이
여기도 5초
Blowing Particle도 ,이미터 타임도 5초
이런 식으로 하나만 바꿔도
나머지가 한 번에 바뀌면 관리하기가 편하겠죠
이런 식으로 개별의 값들을 바꾸는 게 아니고
하나의 값을 통해서 전체적으로 제어가 쉽게 할 수 있는 방법에 대해서
한 번 알려드리겠습니다
우선 Initialize Particle의 Lifetime을
Emitter State와 같은 값을 가지게끔 연결을 해 줄 겁니다
만약에 Lifetime의 화살표 아래쪽 화살표를 눌러서
여기에서 Emitter에 있는 Looping Duration
Current Looping Duration을 선택하게 되면
이제 Particle 입자의 Lifetime이 Emitter State와 동기화가 된 겁니다
이렇게 State와 동기화가 된 거고
그러면 이 두 개의 State값을 서로
여기 보면 Single Looping의 State값과
Blowing Particle의 State값이 서로 다르죠
이것을 동기화하기 위해서는 User Parameter 항목으로 좀 가야 됩니다
User Parameter에서 Plus 버튼
Make New에서 Common
그리고 플롯을 선택합니다
이 Parameter의 이름을 Share Loop Duration이라고 지어 주도록 하고
기본 값을 5라고 설정을 해주겠습니다
자, 이것을 앞서 했던 것과 같은 요령으로
Blowing Particle의 Emitter State, Loop Duration 항목을
아래쪽 화살표 눌러서
ShareLoop Duration이라고 검색을 하면
User Parameter 항목의 내용이 검색이 되면서 연결해 줄 수가 있게 됩니다
연결이 되었죠
마찬가지 맥락으로 Single Looping의 Emitter State 항목도
Lifecycle 모드를 Self로
그리고 Loop Behavior는 Once로
Duration 값은 ShareLoop Duration으로
이 아래쪽 화살표를 눌러서 연결을 해 주게 되면
이 Share에 있는 이 값들이 모두 다
각각의 Emitter State 항목들의 Loop Duration과 연동이 된 겁니다
그러면 저는 하나의 값만 바꾸더라도
Emitter State에 있는 값이 또 Particle의 Lifetime하고도 연결이 되어 있었죠
이런 식으로 하나의 값을 통해서 여러 개의 Emitter의 값들을 제어할 수 있게 된 겁니다
같은 맥락으로 우리가 앞서서 Material과 Material Instance를 만들었습니다
여기 보면 현재 우리가 Mesh Render에 연결된 것은 Material이죠
이것을 그대로 Material에 연결을 해 주게 되면
연결해 보겠습니다
이제 우리는 Material이 아닌 Material Instance를 연결했습니다
이 Instance 창을 보게 되면 Dynamic Parameter 항목은 눈에 보이지 않죠
반면에 Dynamic Material Parameter에서는
Material이 가지고 있던 Noise Scale, Loop Value,
이러한 값들이 그대로 전달이 되고
실제로 의자에 적용이 돼서 작동을 하는 데는 아무 문제가 없습니다
그래서 우리가 유저의 Parameter를 이용해 가지고
여러 군데 공유를 해줬던 이러한 연결 관계들이
이 Initial Particle에도 연결을 해 줬죠
Material에서 Instance로
그리고 Instance는 Mesh Render로
그리고 마지막으로 Dynamic Parameter로
단순히 나이아가라 시스템 끼리 데이터 연동이 되는 것뿐만 아니라
외부 애셋과도 연결이 계속해서 이어지는 것을 확인할 수가 있습니다
나이아가라 제어를 위한 블루프린트 설정
이제는 예제의 마무리로 Blueprint와 나이아가라
그리고 Static Mesh 이 세 가지를 엮어서
효과를 제어하는 방법에 대해서 다뤄보겠습니다
우선 블루프린트를 애셋을 하나 만들어 주도록 하겠습니다
블루프린트의 기본 클래스는 Actor로 할 겁니다
그리고 이름을 BP_Dissolve로 먼저 생성해 두도록 하고요
더블 클릭해서 블루프린트 창을 열도록 하겠습니다
일반적으로 블루프린트는 크게 보면 두 가지 역할을 가지고 있죠
하나는 그룹을 만들어 주는 역할이 있습니다
또 다른 역할로는 프로그래밍을 하는 역할이 있죠
그룹을 만들 때는 일반적으로
서로 성질이 다른 종류의 액터들
이를테면 나이아가라에서 여러가지 이미터를 묶어 줬던 것처럼
우리는 Static Mesh와 나이아가라를 이용해서 엮어 줄 것이고요
이것을 간단한 프로그래밍을 통해서
인터랙션으로 이 두 가지를 껐다 켰다 하는
간단한 제어 방식을 활용해 볼 겁니다
특히 나이아가라 같은 경우에는
유저들이 어떠한 상황에 따라서
유저 행동에 대한 리액션을 보여주기 때문에
우리가 원하는 상황에 맞춰서
이펙트를 발현시키거나 끄거나 할 수 있어야겠죠
우선은 컴포넌트 구성부터 맞춰 보도록 할 겁니다
Add를 눌러서 StaticMesh 컴포넌트를 추가해 줍니다
여기 Static Mesh 항목에는
가장 기본이 되는 sm_chair
이것을 먼저 설치를 할 겁니다
그리고 또 다른 것은 플러스 버튼을 눌러서
나이아가라 파티클 시스템 이라고 하는 컴포넌트도 추가해 줄 겁니다
StaticMesh에 생성하고 나서 추가된 컴포넌트들이
보통 직전에 생성한 컴포넌트의 자식으로 생기는 경우들이 있는데
지금은 뭐 위치상 크게 상관은 없고
만약에 이 부모 자식 관계가 이렇게 되어 있는 것은
Root에다가 다시 드래그해서 Attach 항목을 해주시면
이렇게 서로가 분리돼서 나이아가라가 따로 움직인다던가
StaticMesh가 따로 움직인다던가
별도의 각각 제어를 할 수 있게 되죠
자,이 나이아가라에는 우리가 만들었던
FX_Chair Dissolve를 연결하도록 하겠습니다
자 이렇게 됐죠
Add 버튼을 눌러서 Box Collision을 추가해 줄 겁니다
마찬가지로 다시 Root에다가 끌어 넣어서 Attach 해 주겠습니다
이 Box Collision이 하는 일은
유저들, 유저가 조작하는 플레이어, 플레이어 캐릭터가
이 의자에 가까이 접근을 했을 때 서서히 사라지게 만드는 것을
감지하는 역할을 하게 될 겁니다
그래서 간단하게 Scale을 이용해서
크기라던가 이런 것들을 임의로 여러분들이 키워 주시면 되구요
자 이러면은 컴포넌트 구성이 끝났고
지금은 의자가 보이고 있고
그 다음에 나이아가라가 있죠
두 개가 동시에 보이는 상황입니다
그래서 우리는 Box에 유저들이 접근을 하게 되면
유저가 컨트롤하는 캐릭터가 접근을 하게 되면
StaticMesh를 비활성화해서 잠시 꺼둔 다음에 나이아가라를 실행시키게 될 겁니다
우선 Compile을 눌러서
기본적으로 이 세 가지 컴포넌트들이 잘 인식되도록 만들어 주고요
이 다음으로는 이벤트 그래프 항목에서 간단한 프로그래밍을 해 볼 겁니다
우선은 처음에 시작할 때 Particle이 마음대로
스스로 사라져 버리면 안 되겠죠
그래서 우리가 취해 줘야 될 조치는 두 가지가 있는데요
우선은 여기에서 보면 흐릿하지만 Begin Play라고 하는 이벤트 노드가 있습니다
Begin Play, 액터가 월드상에 처음 배치가 되거나
혹은 이미 배치가 되어 있는 것이 시뮬레이트 버튼을 눌렀을 때
이때 한 번 딱 신호가 전달이 되는 노드인데요
나이아가라 컴포넌트를 드래그해서 끌고 오겠습니다
한마디로 시작할 때 나이아가라의 액티브가 비활성화 되게끔
액티브 상태가 비활성화가 되게끔 먼저 설정을 해 둡니다
Set Active라는 노드를 이용해서
New Active라고 하는 체크박스 보이죠
이 체크박스를 비활성화 시켜서 꺼지게 만들어 두고요
이 나이아가라 컴포넌트 자체에서도 보면
기본적으로는 오토 액티브가 활성화되어 있습니다
그래서 이것도 꺼주도록 할겁니다
이제 유저가 우리가 만든 블루프린트에 부딪혔다 라는 신호를 주는 Begin Overlap,
Actor Begin Overlap이라는 노드에다가는
나이아가라와 Set Active 노드를 Ctrl-C, Ctrl-V를 해서
복사를 해 준 후에 연결을 해 주고요
그리고 여기 액티브를 활성화 해 주고 Reset도 활성화 합니다
Reset을 활성화 한다는 건
이 Particle 자체가 나이아가라 시스템이
아래쪽에 타임라인을 기준으로 해서 보면
우리가 일시적으로 멈춰 놨다가 다시 시작하는 것이 아니라
Set Active와 Reset이 함께 되어 있으면 0초에서부터 쭉 실행한다는 의미입니다
그래서 이렇게 두 가지 세팅을 해 놓고 컴파일을 눌러 주겠습니다
이 상태에서 레벨로 돌아가서 한 번 배치를 해보고
간단하게 테스트를 해 볼 겁니다
월드상에 이 디졸브 체어를 먼저 가져다 놓고요
플레이 버튼을 눌러서 실행을 해 볼 겁니다
이제 실행이 될 때
Third Person 캐릭터가 화면에 나오게 되고
클릭해서 뷰포트를 조작할 수 있죠
이제 의자에 다가가 보면
천천히 다가가겠습니다
조금씩 다가가서 의자의 박스 컬리전 영역 안으로 들어가게 되면
이런 식으로 이펙트가 발현되는 것을 확인할 수가 있습니다
이제 의자가 여전히 사라지고 있지 않아서 어색하죠
그래서 블루프린트에서 한 가지 작업을 더 해 줘야 되는데
이렇게 Begin Overlap 상태일 때
플레이어가 박스 컬리전 영역 안에 들어갔을 때
StaticMesh에 컴포넌트를 드래그해서 가지고 와서
보이는 기능을 꺼 줄 건데
이것은 Set Visibility 입니다
Set Visibility
그래서 눈에 보이지 않도록 해줄건데요
그럼 여러분들 입장에서는
이 액티브와 비즈빌리티의 차이에 대해서 조금 아실 필요가 있습니다
자 우선 컴파일을 돌리고요
다시 한 번 실행해 보겠습니다
플레이 버튼을 눌렀을 때
이런 식으로 다가가 보면
사라지죠
근데 여러분들 이상한 거 못 느끼셨습니까
자 다시 한 번 보여드리겠습니다
ESC를 눌러서 실행을 멈추고
여러분들이 의자의 그림자를 한 번 주목을 해 보세요
플레이 버튼을 눌러서 다시 실행하겠습니다
조금 바깥쪽으로 돌아서 의자에 그림자가 있죠
컬리전에 부딪히게 되면
Particle은 문자 그대로 Effect로서 작동하기 때문에
평소에는 그림자를 그리고 있지 않습니다
작동하지 않을 때는 StaticMesh를 배치를 해 둬서
우선은 월드 상에 배치돼서 그림자가 그려질 수 있게끔
해 줄 필요가 있는 것이고요
ESC를 눌러서 되돌아 갈 겁니다
만약에 이 Begin Play에서
일단 Active를 활성화 해 놓고
잠시 이건 비교를 위해서 잠깐만 하는 거니까요
나이아가라의 Visibility를 끄도록 한번 해 볼 겁니다
Set Visibility를 펄스로 두고
그러면 연결이 안된 Set Active나 StaticMesh에 Set Visibility는 작동을 안 하겠죠
나이아가라의 Visibility를 끈 겁니다
그러면 시작할 때 제가 후다닥 달려가서
박스 컬리전 영역에 들어가면 보이는 게
이 Effect가 발현되는 게 꺼지겠죠
우선 컴파이를 걸겠습니다
Play를 눌러서 테스트 해보겠습니다
Effect가 발현 중일 때 입자에다가 가면 갑자기 사라지죠
다시 한번 입자가 있을 때 딱 가면
갑자기 입자가 사라지죠
이게 Visibility와 Active의 차이라고 할 수 있는데요
기본적으로 Active는 이것을 펄스로 둔다는 의미는
공장에 대한 가동을 중단하는 겁니다
공장에 대한 가동을 중단하더라도
이미 생산이 완료가 된 Particle 같은 경우에는
월드상에 계속해서 남아 있게 됩니다
반면에 Visibility를 비활성화 해 두면
이 두 가지 모두를 비활성화 하겠다는 뜻이 되기 때문에
Particle도 안보이고 공장도 중단된 상태라고 볼 수가 있겠죠
그래서 발현되던 Effect가
갑자기 눈에서 뿅 하고 사라진 것처럼 보이는 겁니다
그래서 여러분들이 Particle이 자연스럽게 사라지게 하고 싶다면
이미 생성이 된 Particle은
자기 라이프타임 부여받은 것만큼 작동을 하다가 사라질 수 있게
Particle을 안보이게 할 때는
Visibility가 아닌 Active를 이용해서
활성화되거나 비활성화되는 것을 제어해 주시는 것이 좋습니다
자 우선 이렇게 뒀습니다
여기에서 조금 특이한 증상이 있어서 하나를 보여 드릴 건데요
우리가 계속해서 의자 뒤쪽을 보고 다가가니까 좀 이상하죠
이거를 회전시켜 보겠습니다
이렇게 회전
그리고 나서 플레이를 누르고
가까이 가보겠습니다
그럼 갑자기 의자가 다시 180도 휙 돌아간 상태로 작동이 되었죠
이 이유는 Effect에서 작동이 되는 공간이
Local Space로 작동되게끔 체크를 해 주셔야
우리가 월드상에서 의자를 돌린다고 하더라도
돌아간 Actor 자체가 돌아갔기 때문에
자식으로 붙어있는 나머지 컴포넌트들
메시나 나이아가라나 박스도 모두 다 돌아가 있겠죠
여기에 맞춰서 작동을 하기 때문에
여러분들이 여기 있는 싱글 루핑 파티클
그리고 블로잉 파티클도 로컬 스페이스
이것을 체크해 주셔서
플레이를 눌렀을 때 비교해 보겠습니다
로컬 스페이스를 누르면
이제는 가까이 다가갔을 때도
정상적으로 사라지는 것을 확인하실 수가 있습니다
마지막으로 이러한 보이고 안 보이고 제어하는 것 뿐만 아니라
내가 만약에 파티클에 이 재생되는 시간
사라지는 시간이 너무 오래된다 혹은 늦게 된다
이런 것들을 우리는 지금 Share Loop Duration 이라는 것을 통해서
일관되게 제어를 해 주고 있죠
그렇기 때문에 블루프린트에서 재생되는 시간을
내가 임의로 늘리거나 줄이는 것도 가능합니다
Begin Play에서 나이아가라에서 Set Parameter 라고 검색을 해보면
여러가지 파라미터 변수들에 대해서 우리가 값을 지정해 줄 수가 있는데요
우리가 루프 듀레이션은 플롯이라는 형식을 통해서 생성을 했기 때문에
나이아가라 플롯이라고 하는 노드를 먼저 생성을 하고요
이벤트 그래프를 연결해 주고
Value 이름은 똑같이 대소문자까지 맞춰서
Share Loop Duration 이라고 지어주고
내가 2초 동안만 짧게 발현되게 하고 싶다 라고 하면
지정해 놓고요
Play를 해 보겠습니다
이제 부딪히게 되면 좀 더 빠르게 사라지고요
만약에 10초 정도로 길게 설정을 한다면
이런 식으로 10초 정도 길게 해서 플레이를 해 보면
훨씬 오랫동안 작동이 되는 것을 확인하실 수가 있죠
여러분들이 이런 식으로 이펙트를 다룰 때는
굉장히 여러가지 요소들을 가지고 다뤄야 되는 만큼
이 강의 영상에서 다루는 것 뿐만 아니라
많은 테스트를 통해서
여러분들만의 멋진 이펙트가 제작이 되었으면 좋겠습니다
이번 시간에는 디졸브 머티리얼 제작 실습을 통해
나이아가라 시스템을 제어하는 기능들에 대해 알아봤습니다
이펙트는 실시간으로 변화하는 애셋이기 때문에
시간 제어, 이펙트 등에서 3D 매치나 머티리얼보다는
사전의 설계나 계획이 중요하다는 점을 강조드립니다
그럼 이번 시간 학습한 내용을 정리하면서 마무리하겠습니다
감사합니다
다이나믹 머티리얼을 통한 머티리얼 효과 제어 다이나믹 파라미터 나이아가라에서 머티리얼을 직접 제어하기 위해 Dynamic Parameter노드 생성
Noise 텍스처 World Position과 NoiseScale 파라미터 Multiply Noise 노드를 생성하여 Multiply 결과 World Position 연결
일반적인 Texture사용 시 UV으로 인해 패턴이 어색해질 수 있음
나이아가라에서 머티리얼을 직접 제어하기 위해 Dynamic Parameter노드 생성
Dissolve 머티리얼 만들기 Step 노드 생성 후 X에는 Noise를,Y에는Dissolveval연결 Dissolveval에 DissolveEdge연결
넓은 면과 좁은 면의 경계를 이용해 Edge 생성
나이아가라 생성하기 StaticMesh Location모듈 추가 에러 메시지가 뜨면 Fix Now를 눌러 해결
Emitter 설정 Particle Update에 Dynamic Material Parameters추가 Dynamic 머티리얼 데이터가 Emitter에 바로 연결됨
User Parameter 각각의 Emitter State 선택 후 ShareLoopDuration으로 연결 하나의 값으로 여러 개의 Emitter값을 제어할 수 있음
머티리얼 Instance를 머티리얼과 연결할 수 있음 나이아가라 시스템 내부와 외부 애셋까지 연동할 수 있음
나이아가라 제어를 위한 블루프린트 설정 Blueprint 생성 StaticMesh 컴포넌트 추가
NiagaraParticleSystem 컴포넌트 추가 Box Collision 컴포넌트 추가