
작년부터 제가 제작에 참여한 게임이 드디어 공개되었습니다!
이 게임에서 제가 맡은 일은 블렌더를 사용한 3D셰이더 및 리소스 제작 프로세스 구축, 캐릭터 애니메이션 일부입니다. 게임은 언리얼 엔진을 사용, 일러스트가 아주 멋진 게임입니다.
지스타2025의 웹젠부스에서 시연을 할 예정입니다. 잘 됐으면 좋겠어요.
게임 만드는 노약자

작년부터 제가 제작에 참여한 게임이 드디어 공개되었습니다!
이 게임에서 제가 맡은 일은 블렌더를 사용한 3D셰이더 및 리소스 제작 프로세스 구축, 캐릭터 애니메이션 일부입니다. 게임은 언리얼 엔진을 사용, 일러스트가 아주 멋진 게임입니다.
지스타2025의 웹젠부스에서 시연을 할 예정입니다. 잘 됐으면 좋겠어요.

오른쪽 눈이 충혈됐다. 두 달 쯤 된 것 같다. 병원에 가니 결막하출혈같으니 약을 써보라고 해서 2주간 치료를 했으나 나아지지 않았다. 별 수 없이 시간을 보내다 다른 병원에 갔더니 이번엔 상공막염이라고 한다. 인터넷 사진을 찾아보니 이게 맞다. 돌팔이 의사 때문에 죄없는 눈에 괜히 스테이로드만 잔뜩 때려부었네. 난생 처음듣는 병명에 새로운 소염제와 스테로이드를 처방받았다. 하지만 스테로이드는 부담이 돼서 소염제만 썼다. 의사도 스테로이드는 권하지 않았다. 처음엔 효과가 있는 것 같더니 다시 번진다. 그렇게 두 달이 흘렀다.
인터넷에서 동병상련의 처지에 있는 자들의 글을 보니 상공막염은 완치가 힘든 병이다. 발병의 원인도 모르지만, 한 번 발병하면 꾸준한 관리 외엔 방법이 없다. 하지만 증상은 약하기 때문에 눈이 그냥 빨갛게 충혈될 뿐 아프거나 시력에 영향이 있지는 않다. 다만 남들이 보기에 굉장히 피곤해 보일 뿐이다. 피곤한 상태에서 쪽잠을 자고 일어났을 때처럼 눈이 빨간 상태가 지속되는 것이다. 하지만 내부시스템은 멀쩡하다. 엄살떨기 좋은 병이다.
두 달 정도 이 병을 달고 살다보니 면역력과 관련이 있다는 사실을 알아냈다. 면역력은 수면과 관련이 있다. 최근에 수면이 부족한 것은 사실이었으나, 난 이 사실을 인지하지 못했다. 잠이 부족해도 내 몸은 움직였고, 지금까지 그랬으니 앞으로도 그럴 것이란 안일한 생각 속에 살았다. 하지만 이제 나도 늙었다. 난 이 눈병이 내 몸의 적신호를 강렬하지만 상냥한 방법으로 내게 알려주는 경고같이 느껴졌다.
평시엔 회사에서 10시간을 보낸다. 9시 반~6시 반. 출퇴근에 3시간을 사용하고, 자는데 8시간을 쓴다고 치면 21시간을 내 의지대로 사용할 수 없다. 남은 시간 3시간 중에 집안일과 육아를 빼면 1시간 정도가 남는다. 이 1시간동안 취미생활을 할 수 있다. 내겐 이 취미가 배틀퀸의 개발이었다.
하지만 게임개발이 그리 호락호락하지 않다. 많은 시간이 필요하다. 그래서 잠을 쪼갰다. 적어도 3시간은 작업해야 무언가 볼만한 게 나온다. 그래도 주말에는 좀 오래 잘 수 있으니까… 습관이 되니 6시간만 자도 그럭저럭 견딜만해졌다. 하지만 회사에서 크런치라도 하게 되면 이 1시간마저 사라진다. 집에 와서 잠을 자고 나면 바로 다시 회사에 나가야 한다. 다시 시간을 쪼개자. 주말에 몰아서 자면 괜찮겠지… 하지만 아무래도 무리였나 보다. 내 오른쪽눈에는 기어이 경고등이 켜지고야 말았다.
몸이 망가지는 건 한 순간이다. 난 이 경고를 무시하지 않으려고 한다. 당장 회사일이 바쁘니, 취미는 잠시 접어두기로 하자. 건강보다 중요한 것은 없으니까.
아이시 모델링으로 넘어가기 전에 잠깐 짚고 넘어가고 싶은 주제가 있어서 짚고 넘어가 보자.
배틀퀸 디스코드 서버에서 프레임레이트에 관한 이야기가 있었다. 배틀퀸 targetFrame을 60프레임제한을 걸어둔 상태지만, 어쩐지 이 코드가 뚫리는 컴퓨터가 있다. 때문에 프레임이 폭주해 300프레임 가량이 나오면서 GPU사용량을 5배나 증가시키는 것으로 보인다. 그래서 몇가지 테스트를 해보았다.

비어있는 씬을 실행하기 전의 상태이다. 이제 ctrl+p로 게임을 실행시키면

기본적으로 40%의 자원을 먹는다…?!

작업관리자의 GPU도 같은 비명을 지른다.
배틀퀸은 최적화에 꽤 신경을 썼다. 뒷배경은 대체로 2D로 이루어져 있고, 일단 쓰기만 해도 무거운 Transparent도 거의 사용하지 않았다. 그럼에도 불구하고, GPU사용량은 높다. 왜일까.
다른 게임을 켜보자.

지금은 가지고 있는 게임이 이것밖에 없다(…) Out of Space. 이 게임도 37%. 이것 역시 유니티로 만들어졌다.
URP가 문제일 수 있다. 레거시로 재생해본다면 어떨까.

흐음.. 레거시 템플릿도 마찬가지다.

가장 부하가 적을 것 같은 템플릿을 켜보자.

지자쓰! 소폭 줄어들긴 했지만 큰 차이는 안난다.
뭐, 디버그 모드는 원래 자원을 많이 먹을 수 있다. 빌드해보자.

아무 것도 없는 ‘모바일 2D씬’조차 GPU를 24%나 먹는다.

배틀퀸에 사용한 셰이더는 무겁지 않다. 전부 Unlit이다. 렌더 스케일이 2배라서 그게 좀 무겁긴 한데, 그래도 잘 버틴다. 중요한 건 뭔 짓을 해도 GPU사용량은 줄어들지 않는다는 것이다. 고급옵션들을 몇 개 켜봤는데 딱히 사용량이 늘지도 않는다.
현재는 유니티 6를 사용 중이다. 0.45빌드도 유니티 6를 사용했다.
그냥 유니티 엔진 자체에서 GPU를 일정량 확보하는 것으로 보인다. Out of Space가 저런 걸 보면 최신 버전이 문제는 아닐 것이다.
결론. 할 수 있는 게 없다. 그냥 하던대로 하자.
결론이 변하지는 않았으나, 몇가지 알아낸 사실들에 대해 기록해두자.
먼저 프레임레이트는 모니터의 주사율에 따라 달라진다. 주사율이란 화면이 1초에 얼마나 갱신되느냐를 나타내는 단위인데, 흔히 사용하는 60MHz의 모니터는 60번 갱신되는 것이다. 모니터에서 화면갱신이 일어나지 않는다면, GPU에서 화면을 새로그려도 의미가 없기 때문에 유니티에서는 프레임레이트를 주사율에 맞추는 처리를 기본으로 한다. 이것이 VSync이다.

그리고 이를 CPU가 제어하는 방법이 targetFrameRate지정이다. 코드는 다음과 같다.
Application.targetFrameRate = 60;
그런데 이렇게 코드로 제어하는 CPU의 제어방식이 하드웨어 제어인 VSync보다 우선순위가 떨어진다.
Every V Blank는 매프레임, Second V Blank는 2프레임당 한 번씩 갱신한다. 내가 사용하고 있는 모니터의 주사율이 60MHz니까, 60프레임에 정확히 들어맞는다. 문제는 게이밍 모니터의 경우 더 높은 주사율을 보이는데, 이 때 화면갱신은 초당 60을 뛰어넘을 수 있다. 화면갱신횟수가 늘면, 자연히 GPU사용량도 늘어난다.
안정적인 프레임을 유지하는 것은 VSync가 맞다. 하지만 모니터에 따라 게임스펙이 달라지는 것 또한 곤란하다. 때문에 이는 Don’t Sync로 맞추고 CPU를 기준으로 계산해야 한다. 그런데.. 그렇다고 GPU사용률이 크게 달라지는 않았다. 좀 더 들쭉날쭉할 뿐, GPU는 여전히 40%정도를 사용한다.
왜 이렇게 연산을 많이 소모할까? 내가 조사했던 수많은 최적화 관련된 항목 중 가장 큰 영향을 끼치는 것은 렌더링 스케일이었다. 배틀퀸은 무려 HD의 2배 크기로 렌더하고 있었다.(어쩐지 깔끔하더라!) 물리적인 연산이 많으니 GPU를 4배 많이 사용한다. 그런데 그것치곤 늘어나는 폭은 15%정도이다. 남는 장사.
그리고 두번째가 안티앨리어싱이다. 사양 고려않고 그냥 High프리셋을 썼더니 MSAA 4x를 사용하고 있었다. 4번 더 그리는 것이니 실질적으로 2배크기로 렌더한 것과 비슷한 효과…일까?
여튼 그렇다고 해도 GPU사용률이 아주 높지는 않기 때문에 현 세팅을 바꿀 생각은 없다. 하지만 프레임레이트는 고정될 필요가 있겠다. 1초에 60번을 갱신하는 것도 이미 굉장한데..!
어느 덧 3월도 중순에 접어듭니다. 과학은 지구온난화로 인해 더워진 지구를 이야기하지만, 그래도 벚꽃은 예정된 4월 초에 필 것 같습니다. 이 쯤이면 매화가 피어야 하는데, 너무나 바쁜 나머지 아파트 단지 내의 나무를 들여다 볼 여유도 없었네요. 맞아요. 최근엔 정말 바쁘게 살고 있어요.
회사가 크런치 모드에 들어갔기 때문에 9시 반에 출근해서 9시 반에 퇴근합니다. 12시간이나 있는 셈이예요! 그래도 여유가 있다면 유튜브든 뉴스든 살펴볼텐데 그럴만한 틈도 없이 일을 하고 있어요. 물리적인 시간은 있지만, 심리적으로 피하게 됩니다. 지금은 새로운 정보를 더 이상 받아들이고 싶지 않은 상태예요.
최근엔 정말 여러가지 일이 있었습니다. 회사일은 둘째치고서라도 3월은 여러모로 바쁜 달이예요. 신학기가 시작되면 아이도 어른도 바빠집니다. 대부분의 일은 아내가 처리를 하지만, 괜시리 덩달아 마음이 바빠져요. 거기에 배틀퀸도 두번째 이정표를 넘었기 때문에 다음 이정표를 위한 구상을 해야 해요. 최근에 늘어난 영미권 유저들과 소통하려면 영어도 배워야 합니다. 새벽에는 일찍 일어나 배틀퀸의 개발을 하고, 출퇴근 지하철에서는 영어공부를 하며, 회사에서는 10시까지 일을 한 후 집에 오면 바로 잠자리에 들 시간이예요. 회사일이 물리적으로 힘든 것은 아니기 때문에 몸의 피로는 그럭저럭 유지가 되지만 정신적으로 꽤 힘든 시간을 보내고 있어요.
허나 아무리 복잡한 일이더라도, 하나하나 치우다보면 결국은 정리가 됩니다. 태산이 높다 하되 하늘 아래 산이므로, 오르고 또 오르면 못 오를 리 없지요. 모든 것이 결국 한 걸음에 달렸습니다. 천천히 가다 보면 도착하는 길이고 안가본 길도 아닙니다. 하지만, 휴식이 좀 필요하긴 하겠네요.
주말이라 다행이예요. 블로그도 유튜브도 다 내려놓고 휴일을 보낼 예정입니다. 여러분도 주말 잘 보내세요!


개발을 할 수 없는 시간에 이것저것 구상을 하는 편인데, 최근들어 예전부터 쌓여온 궁금증을 몇가지 해결하고 싶은 마음이 부쩍 커졌습니다. 배틀퀸의 작업에 좀 지친 감도 없진 않습니다만, 그것보단 몇가지 테스트와 몰랐던 것을 공부해보고 싶은 마음이 더 큽니다. 일주일 정도면 끝날 일정이기에 담주에 돌아오겠습니다.

실은 저번 주 수요일부터 출근을 시작했습니다. 작업이 절로 뜸해졌습니다. 이를 보완하기 위해 생활패턴을 바꾸는 중인데, 잘 되어가는 것 같다가 일요일이 되자마자 12시간을 넘게 잤습니다.(…) 큰일이다! 오늘 저녁엔 일찍 자야 하는데!
출근 3일차인데, 아직도 회사원이 됐다는 것이 실감이 나질 않는 탈백수였습니다.
기존까진 이펙트를 붙이는 과정이 순탄치 않았다. 프리팹을 만들고, 붙이는 것이 스크립트를 통해 이루어지다보니 offset정보등을 실시간으로 확인하기가 어려웠고, 그마저도 풀을 사용해서 프리팹 리소스 자체도 실시간 갱신이 되질 않았다.
게임마다 리소스의 관리 사정이 다르기 때문에 많은 팀에서 이펙트를 붙이는 툴은 별도로 만드는 편인데, 이게 하기 싫어서 지금까지는 수동으로 코드 리로드해가며 붙이고 있었다.

그래서 툴부터 만들어 보자.
제대로 된 툴이라고는 할 수 없지만, 이펙트 제작 시 가장 시간을 많이 먹는 부분이 오프셋 조절이기 때문에 이걸로도 충분할 것 같다. 게임과 별로 다를 게 없어보이지만, 풀 제어를 하지 않아 리소스가 실시간 갱신된다는 점, 오프셋 조절을 실시간으로 할 수 있다는 점이 쓸만할 것이다.

요걸로 가동한다.

으와.. 편해.역시 툴은 중요하다.

2채널의 SDF를 사용하는 웨이브는 전에 제작하다가 실패한 적이 있다. 하지만 어쩐지 오늘은 될 것 같아 재도전해본 결과, 성공! 이는 2장의 SDF를 사용하는데 온전한 모양->바스러지는 모양으로 컷아웃시킨다. 원리는 단순히 A와 B를 밸류에 따라 변화시키는 것이다.
half mask = lerp(ch.r, ch.g, v) - v * 0.5;
이는 프리오리의 반장풍을 구현할 때 사용될 것이다. 그런데 반장풍 개념도 기존엔 없던 거라 새로 만들어야 한다. KOF 97이후의 테리가 사용하는, 발사되다가 마는 장풍이다. 작업을 해보자.
이펙트까지 모두 붙였다. 프리오리의 작업완료! 출근하기 전에 끝나서 참 다행이다.
이제 벨의 작업으로 넘어가 보자.
전에는 댓글을 쓸 때 그냥 글만 쓰면 됐는데, 이렇게 되니 누가 누군지 헛갈리는 현상이 있었어요.
그래서 글을 쓸 때 이름과 이메일을 입력하도록 변경했습니다. 이름만 쓰게 하고 싶은데, 워드프레스엔 그런 옵션이 없어요. 흑흑

그래서 좀 불편함을 감수하도록 하죠. 우리.

10월이 되자마자 제주도로 가족여행을 다녀왔었습니다. 전 여행을 그리 좋아하지 않는데, 이런 행사는 주기적으로 찾아옵니다. 원활한 사회 생활을 위해선 어쩔 수 없지요. 해가 되면 찾아오는 태풍처럼, 자연 재해같은 걸로 생각하고 있습니다. 그럼에도 애월의 하늘은 참 예뻤습니다.
그래서 요며칠간 작업을 못하고, 돌아와서도 뭔가 나사가 풀려 며칠은 그냥 놀았습니다. 창작보다 더 재미있는 일은 찾기 힘들지만, 긴 프로젝트를 진행하다 보면 결국은 인내로 버텨야 합니다. 제가 인내가 그리 좋은 편은 아닌데 지금까지 용케도 버텼습니다.
여행에 앞서 최근에 일신 상에 변화가 있을 예정이라 마음이 싱숭생숭했습니다. 지금까지는 백수였는데, 다음 주부터 다시 회사원이 됩니다. 출근하게 되면 아무래도 배틀퀸의 개발 시간이 많이 줄어들게 되어서, 최근의 고민이라면 배틀 퀸의 개발 시간 확보였습니다. 돌이켜보니 백수 시절에도 시간 확보는 늘 고민이었던 것 같습니다만, 여하튼 이제 기존의 속도로 개발을 하기는 어렵겠네요.
1년만에 회사로 돌아갑니다. 새로운 회사에선 (또!) 언리얼을 씁니다. 유니티였다면 좋았을텐데… 하지만 세상 만사가 내 뜻대로 되지는 않지요. 만사가 아니라 사실 내 뜻대로 되는 일은 매우 적습니다. 그런 의미에서 지난 1년간은 참 원없이 잘 놀았다는 생각이 듭니다. 나름대로의 성과도 냈고요.
제주도 여행의 여파인지, 감기에 걸렸습니다. 전 감기에 걸렸을 때 목이 아프던가 머리가 아프던가. 둘 중 하나의 증상만 있었는데(심지어 코로나조차도 목은 안아팠는데) 이번엔 둘 다 절반 정도로 아픕니다. 데미지 총량의 법칙인 걸까요! 환절기 감기 조심하시길 바랍니다.

도레미의 머리카락은 한 쪽 눈을 가리고 있는 타입이지만, 너무 가지런한 모양이 다시 보니 예쁘질 않아서 살짝 변화를 주었다. 역시나 그림은 묵혀두고 볼 일이다.

눈이 예쁘게 나오질 않는다… 뒤집는 편이 좋아 보인다.

얘는 뭐 디자인이 없으니까 할 게 그닥 없긴 하다. 망치만 좀 줄이고 마무리 하자.
…
이대로 애니메이션 작업에 들어가면 좋겠지만, 준비작업이 좀 더 필요하다. 검기는 필요에 따라 붙일 수 있도록 설계했는데, 이번 마일스톤에 제작되는 캐릭터들은 모두 사용한다. 저번캐릭터 중엔 앨리스와 달래만 사용했었는데, 오로라의 팔돌리기와 닐리에게 섬머솔트킥이 들어가며 결국 모든 캐릭터에게 검기가 필요해졌다. 이럴 바엔 그냥 공용 레퍼런스에 기본장착하는 편이 좋지 않나? 싶어서 기본 알바디에 트레일을 부착했다. 물론 이미 만들어진 캐릭터들에겐 수동으로 붙여주어야 한다. 알바디를 수정한 것은 차후 캐릭터의 제작을 용이하게 하기 위해서이다.
