Unity 검색

#unitytips Dev Takeover: Harry Alisavakis가 전하는 VFX와 셰이더 관련 팁

2021년 11월 4일 게임 | 10 분 소요
Artwork
Artwork
공유

Is this article helpful for you?

Thank you for your feedback!

#unitytips Dev Takeover는 @unitygames 트위터 계정에서 진행 중인 시리즈로, 유니티 팀에서 커뮤니티 슈퍼 유저들을 초대해 인사이트와 꿀팁, 기술을 팔로워에게 제공합니다. 이번에는 Jumpship Studio의 테크니컬 아티스트이자 VFX의 귀재 Harry Alisavakis를 모셨습니다.

아직 Harry를 모르시는 분들도 셰이더 이야기가 나올 때마다 등장하는 형광 녹색 아바타는 아실 겁니다. Harry가 시각 효과 분야에서 어떻게 대단한 스타로 부상했는지 간략히 소개해 드리겠습니다.

현재 Jumpship 스튜디오의 테크니컬 아티스트로 근무하고 있으며, 출시 예정인 게임 Somerville을 개발 중입니다. '여가' 시간에는 VFX와 셰이더를 공부합니다. 매주 게임 개발과 관련된 트윗을 종합하여 제공하는 'Technically Art'를 통해 크리에이터들에게 영감을 주며, 여기서 재능 있는 아티스트들의 작품을 홍보하기도 합니다(트위터에서 Harry를 팔로우하세요). 그리고 Discord 채널 'Technically Speaking'에서 테크니컬 아트, 유니티 크리에이티브 챌린지, AMA를 주제로 한 챗을 통해 사용자의 질문에 최대한 많이 답하려 하고 있습니다. 여기서 확인해 보세요.

해리의 최근 작업물을 스틸 이미지로 살짝 소개합니다. 더 많은 이미지를 보려면 그의 포트폴리오를 확인하세요.

Artwork
Artwork
Artwork
Artwork

이제 Harry Alisavakis가 말하는 #unitytips를 소개합니다.

파티클 시스템 타임라인

간단하게 시도해 볼 수 있는 VFX 기술부터 소개하겠습니다. 여러 파티클 시스템 효과의 타이밍을 설정하는 일은 다소 번거롭지만, 타임라인을 사용하여 시각 효과를 반복 작업할 수 있는 간단한 방법이 있습니다. 🧵

Unity의 타임라인에는 파티클 시스템에 대한 지원이 기본적으로 제공되므로, 커스텀 스크립팅이 필요하지 않습니다. 타임라인에 끌어다 놓기만 하면 파티클 시스템을 쭉 살펴볼 수 있습니다.

 

이러한 트랙을 애니메이션이나 다른 타임라인과 결합해 보면, 개별 애니메이션 요소를 어떻게 함께 동기화할지 더 좋은 아이디어를 얻을 수 있어, 흥미로운 VFX를 제작할 수 있습니다.

커스텀 버텍스 스트림

파티클 시스템과 커스텀 셰이더를 사용하여 가성비 좋은 효과를 만드는 재미있는 방법이 있습니다. 커스텀 버텍스 스트림을 사용하는 건데요,

커스텀 버텍스 스트림이란 무엇인지, 고급 파티클 효과를 얻기 위해 어떻게 사용할 수 있는지 알아보겠습니다. 🧵

아시다시피 Unity에서 렌더링된 모델은 버텍스로 구성된 삼각형으로 만들어집니다. 버텍스에는 각 모델의 위치, UV 좌표, 버텍스 컬러 등 해당 모델과 관련된 모든 필수 정보가 포함되어 있습니다.

근사한 점은 유형에 관계없이 임의의 데이터를 버텍스에 추가하여, 커스텀 셰이더에서 원하는 방식대로 사용할 수 있다는 것입니다. ✨ 파티클 시스템의 커스텀 버텍스 스트림의 진가는 여기서 드러납니다. 이를 통해 버텍스에 파티클 관련 정보를 전달하고 필요할 때만 활용할 수 있습니다.

커스텀 버텍스 스트림을 추가하는 옵션은 파티클 시스템의 Renderer 모듈에서 찾을 수 있습니다. 옵션을 활성화하면 UV 좌표와 버텍스 컬러 등 이미 사용 중인 버텍스 스트림이 모두 표시됩니다.

셰이더 그래프 살펴보기

마지막으로 셰이더 그래프를 사용하여 간단한 파티클 시스템용 디졸브 셰이더를 만들어 보겠습니다. 여기서는 알파 클리핑이 있는 언릿 양면 URP(유니버설 렌더 파이프라인) 셰이더를 다룹니다. 주목할 만한 흥미로운 점은 디졸브 효과를 유발하는 것이 UV의 세 번째 컴포넌트라는 사실입니다.

특히 X 및 Y 컴포넌트를 통한 텍스처 샘플링에 UV 좌표를 사용하는 경향이 있기 때문에 그 이유가 궁금하실 겁니다.

각 스트림의 이름 옆에는 해당 데이터가 저장된 위치가 표시되어 있습니다.

여기서 새로운 스트림은 첫 번째 텍스처 좌표 채널(즉, UV0.z)의 세 번째 컴포넌트에 해당하는 TEXCOORD0.z에 저장됩니다. 수명 나이 비율(lifetime age percentage)을 추가하면 이 값은 파티클 수명 동안 0에서 1로 이동합니다.

여기에 셰이더를 사용하면 시간이 지나며 디졸브되는 파티클이 만들어집니다. 파티클 시스템에 셰이더를 적용하여 다음과 같은 멋진 결과물을 만들 수 있습니다.

그런데 파티클 수명을 보다 섬세하게 제어하려면 어떻게 해야 할까요? 나이 비율을 사용해도 좋지만, 이는 상당히 선형적이어서 보다 복잡한 효과를 만들 때는 별로 유용하지 않습니다. 솔루션은 이 Custom Data 모듈에 있습니다.

나이 비율 대신 Custom1.x를 사용하여, 파티클의 수명에 걸쳐 값을 변경하는 커브를 이용할 수 있습니다. 이는 Size over Lifetime과 같은 빌트인 커브와 유사합니다.

이제 파티클이 시간에 따라 디졸브되는 방식을 보다 섬세하게 관리할 수 있습니다. ✨ 정말 멋지지 않나요?

물론, 이외에도 커스텀 버텍스 스트림에 전달할 수 있는 데이터는 굉장히 많으며, 이를 커스텀 셰이더 내에서 활용할 수 있는 방안도 다양합니다.

커스텀 버텍스 스트림을 활용하는 나만의 팁이 있다면 아래 댓글로 알려주세요.

그럼 즐거운 VFX 작업이 되시길 바랍니다! ✨

더 많은 #unitytips를 알고 싶나요?

유니티의 Unity for Games 트위터를 팔로우하여, 매주 화요일에 #unitytips 소식을, 매달 Dev Takovers 소식을 받아보세요. 그리고 트위터 Dev Takeovers에서 다음에 어떤 분을 소개하면 좋을지 아래 댓글로 알려주시기 바랍니다.

2021년 11월 4일 게임 | 10 분 소요

Is this article helpful for you?

Thank you for your feedback!