게임잼에서 Unity로 Pixel 3D개발 이야기 - 4) Fire-Fx 최적화 및 기능구현
이번 포스트는 제가 작업했던 Fire Fx입니다.
이슈케어나 그런 이야기는 아니지만, 흥미롭게 작업을 진행한 걸 보여주고 싶어서 쓰는 포스트입니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
위 영상은 제가 제작한 이펙트 머티리얼입니다.
단순하게 보면 그냥 불의 꼬리부분이 좌우로 움직이고, 불의 중심 부분은 정지에 가까운 애니메이션뿐인 그런 영상아닌가?
하지만 최적화적으로 아주 괜찮은 걸 만들었단 걸 자신할 수 있게 제작했습니다.
ShapeTexture [512×512×4byte ≈ 1MB], CurveTexture [256×1×4byte ≈ 1KB]
단 2개의 리소스로 저런 형태를 구현을 했습니다.
✔ 텍스쳐 메모리 고려
✔ 샘플러 최소화
✔ 시퀀스 없이 생동감 구현
✔ 확장성 있음 (색, 세기, 흔들림 파라미터화)
픽셀 셰이더를 쓰던 게임이기에 더 ShapeTexture을 더 작게해서 디테일을 뭉게도 괜찮았지만,
마감 기간에 촉박했기에 512^2 Texture로 만족했습니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
위 영상에서 성냥과 캠프파이어불에 사용된 모습입니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
위 영상에서 성냥을 킬 때, 성냥을 끌 때의 라이팅과 불의 변화를 만들기 위해서 프로그래머와의 역할을 잘 분담하기 위해
저는 다음과 같이 코드 작업을 진행했었습니다.

저는 성냥에 불을 붙이기 위한 입력 이벤트에 대한 정보도 충돌처리 로직에 대한 코드를 읽은 적이 없지만,
개발자에게 OnFire와 OffFire 함수에 대한 설명과 언제 콜해주면 좋겠다.만 알려주었습니다.
그런 다음 저는 서서히 불을 붙이고, 서서히 불을 끄는 로직만 구현하면 되었습니다.
개발자가 저에게 추가적인 물음 없이 안정적인 기능 붙이기에 성공했습니다.
이는 SOLID원칙을 제법 잘 지킨 경우에서의 협업하는 사례입니다.
코드를 짜던 당시에 오브젝트의 소멸 속도나 불 붙이는 애니메이션의 시간 타이밍에 대해서 정보가 없었기에
코드 호출하는 쪽에서 해당 타이밍을 알고 있으니 SOLID관점에서 약간 타협한 경우입니다.
게임의 핵심 로직은 구현은 안했지만, 에셋의 디테일 위해 필요한 코드 작업은 잘했던 게임잼이었습니다.
다음 포스트는 저희 게임의 대한 평가와 거기서 배우고 느낀 점에 대해서 다룰 예정입니다.