팀프로젝트 35
방코드 하나로만 돌던 세션 계층에 친구 초대와 방찾기를 얹었다. 방코드용으로 켜 둔 설정이 초대 조건을 이미 채우고 있었다는 발견과, 검색 필터를 클라이언트로 넘긴 판단.
슬라이드를 기능 목록으로 채우면 게임의 톤이 사라진다. 발표 자료 전체에 택배 브랜드 아이덴티티를 씌워 성격을 표지에서부터 드러내고, 26슬라이드 흐름과 브로셔 구조를 잡았다.
레벨에 걸려 있는 셀 셰이딩 포스트 프로세스와 툰스카이 머티리얼을 에디터에서 열어, 노드 체인과 인스턴스 파라미터를 그대로 옮겨 적었다. 접었던 PP 림라이트·아웃라인 실패 기록까지.
셰이더를 만드는 것과 팀 게임에 정착시키는 것은 다른 일이었다. 팀원 재질 수백 개를 하나도 고치지 않고 레벨 전체에 필터를 거는 대신, 나눗셈 노이즈 증폭과 미연결 머티리얼 입력이 터졌다.
Tripo로 생성해 리깅한 펭귄을 FBX로 뽑아 Blender에서 스켈레톤과 텍스처를 확인하고, 텍스처를 파일에 내장해 재익스포트했다. '정말 들어갔는가'를 세 가지 방법으로 검증한 기록.
서로 다른 리그 사이의 리타게팅이 무너져 한 번 우회했던 문제를, 리그 자체를 다시 만들어 정면으로 풀었다. 표준 휴머노이드 리그를 입히고 IK 리타게터·블렌드스페이스·ABP로 이어지는 구조까지.
로비 대기 중에 다음 스테이지를 미리 로드하면 로딩이 짧아진다 — 그렇게 넣은 최적화가 게임 입장 자체를 막았다. 프리로드는 성공하고 있었고, 문제는 트래블의 맵 로드와 같은 패키지를 두고 부딪힌 것.
레벨 조명을 굽자 벽이 탄 것처럼 얼룩덜룩해졌다. 원인은 하나가 아니라 셋이었고 전부 라이트맵이 참조하는 데이터 쪽에 있었다. 셋을 다 고친 뒤에도 남은 노이즈와, 굽지 않기로 한 결론.
클라이언트에서만 전진이 사선으로 휘거나 벽처럼 막혔고, 카메라를 급회전하면 가구가 몸을 뚫었다. 같은 반경을 서로 다른 자로 재고 있었던 것과, 성분 보간이 0점을 관통하는 문제.
공동 운반의 러버밴딩은 튜닝 문제가 아니라 이중 보정 구조 자체가 원인이었다. 되끌어오는 견인을 걷어내고 입력 단계에서 이탈 성분만 지우자 서버와 클라가 같은 결론에 도달했다.
어떤 가구는 트레이스에 안 잡히고, 바닥에 1uu 박힌 가구는 조작을 얼렸다. 무엇보다 '서버는 원격 폰 속도에 손대지 않는다'는 원칙이 정작 견인을 무효로 만들고 있었다.
가구를 들고 걸으면 캐릭터가 순간이동하듯 튀었다. 값을 아무리 조정해도 안 잡힌 이유는 캐릭터 무브먼트가 끝낸 예측 위에 서버가 한 번 더 손을 대는 구조였기 때문. 회전 기준도 몸으로 옮겼다.
에디터에서 되는 것과 패키징된 빌드에서 되는 것은 다른 문제다. 같은 프로젝트를 세 번 패키징하며 실패 원인을 하나씩 걷어내고, 에러 억제 플래그 없이 클린 패키징에 도달한 기록.
수식으로 그린 툰 하늘은 Unlit 이미시브 돔이라 레벨의 태양을 모른다. 그 사이에 다리를 놓아 낮→황혼→밤을 잇고, 팀원 파일을 한 줄도 고치지 않은 채 사운드·이펙트를 얹은 관찰 기반 설계.
플레이 구역 밖으로 못 나가게 막으면서 그 너머가 비어 보이지 않아야 했다. 바리케이드와 원경 임포스터로 가장자리를 채우고, 아웃라인을 볼륨 안쪽에만 그려 배경에 선이 번지지 않게 했다.
'지금 뭘 잡을 수 있는지 안 보인다'는 피드백. 패스를 하나 더 얹는 대신 이미 있는 아웃라인 머티리얼 안에서 세피아 외곽선과 노란 링을 같이 그렸고, 화면 가장자리 점선 아티팩트도 잡았다.
도시도 나무도 만화풍인데 하늘만 사실적인 볼류메트릭 구름이었고, 이 하늘은 포스트 프로세스 툰 셰이딩으로 잡히지 않는다. 그 이유와, 스카이돔을 대체한 8단계 노드 그래프.
에디터 두 창에서 되던 멀티플레이가 PC 두 대에서는 하나도 되지 않았다. 방코드 생성부터 P2P 접속·로비 합류·게임 진입까지, 문제→로그→가설→수정 사이클을 일곱 번 돌린 기록.
가짜 데이터로 잘 돌던 세션 UI를 실제 Steam 세션에 붙이자, 화면이 아니라 매칭 방식을 다시 봐야 했다. 방 코드 도입과, 원인을 추측하다 시간을 버린 빌드 경고 C4458.
이미 올라간 커밋 메시지를 규칙에 맞게 고치려다 히스토리 재작성과 언리얼 에셋 참조가 한꺼번에 얽혔다. 커밋을 일괄로 다시 쓰는 대가와, 끊어진 레벨 에셋 참조를 되살린 과정.
패키징 단계에서 처음으로 빌드가 멈췄고, 고쳐서 실행 파일을 뽑아도 Steam 세션이 붙지 않았다. 에디터에서 실행 파일까지 가는 길을 뚫고, 그 사이 어긋난 팀 브랜치를 되돌린 기록.
여러 명이 가구 하나를 드는 게임에서 이동을 클라이언트가 계산하면 화면마다 가구 위치가 달라진다. 코드 전에 복제 표준부터 정한 이유와, 에디터를 막던 BuildId 불일치.
각 문서는 멀쩡한데 합쳐 놓으면 서로 다른 말을 한다. 흩어진 기획안을 하나로 통합하며 드러난 충돌을 덮지 않고 표면에 올려 결정받고, 시안용 이미지와 구현 룩을 분리한 판단.
언리얼은 바이너리 에셋이 많아 머지 충돌 하나가 파일을 통째로 못 쓰게 만든다. 첫 커밋 전에 .gitignore에서 무엇을 왜 빼는지 정하고, 도메인별 소유권과 develop 완충 브랜치까지 세웠다.
'아슬아슬하게 함께 든다'는 말로 적힌 채로는 구현자마다 다른 게임이 된다. 어느 각도에서 놓치는지, 속도가 얼마나 어긋나면 흔들리는지를 수식과 튜닝 표로 못 박고 수용 기준까지 정했다.
무거운 가구를 둘이서 들고 계단을 내려가는 장면 하나로 게임이 성립할까. One Pager와 코어 루프로 범위를 닫고, 협동 운반을 어떤 규칙으로 만들지 인게임 시스템으로 푼 기획안.
협동 게임 제안에서 출발했는데 결론은 서로를 의심하는 포렌식 추리 게임이었다. 논의를 붙잡은 기획 프레임워크와, 보상 설계를 현상금 표에서 이진 승패로 단순화한 근거.
Ch4 팀플 기획 브레인스토밍 — 튜터님 제안 협동+마피아에서 출발해 포렌식 소셜 추리 'TRACE' 컨셉에 도달한 과정과 스코프·리스크 정리.
맞았다는 걸 알아채게 만드는 건 데미지 숫자가 아니라 흔들리는 화면과 줄어드는 게이지, 붉어지는 가장자리다. 이미 만든 히트 위임 구조를 반대 방향으로 미러링해 경로를 뚫었다.
말단 본을 맞히면 라그돌이 안 흔들리고, 히트스톱을 걸어도 뒤 좀비가 밀고 들어왔다. Mixamo와 UE5의 본 이름 표준이 다르다는 문제와, 충돌 응답을 일시 무시하는 한 세트 패턴.
좀비 Pawn만 늦추면 몸은 멈춰도 AIController의 행동 트리는 풀스피드로 돈다. 흩어진 발사 경로를 하나로 모아 진입점에만 효과를 얹는 구조와, 본 이름이 비어 오던 채널 누락.
카테고리 폴더에 헤더와 소스를 함께 쌓으면 어떤 헤더가 모듈 밖으로 공개되는지 구조에서 안 보인다. 언리얼 표준 구조로 옮기며 include 경로와 빌드가 깨진 지점들.
히트스캔이냐 프로젝타일이냐가 안 정해진 상태에서 히트리액트·이펙트·히트스톱을 먼저 만들어야 했다. 인터페이스 하나로 의존을 끊는 설계와, 코드 리뷰에서 드러난 콜리전 채널 미스매치.
역할 × 마일스톤 시드를 89개 작업의 행 단위 WBS로 펼치고, 행마다 발제 출처·합의 마감일·우선순위를 붙여 블로커를 드러냈다. 그 표를 노션으로 일괄 이관해 타임라인까지.
팀원 다섯의 사전 자료가 채팅·블로그 링크·피그마로 제각각인 상태. 흩어진 설계를 좀비 AI·게임 스테이트·전투 인터페이스로 모으고, 발제와 한 줄씩 대조해 갭을 수치로 만들었다.