방문자

오늘
—
어제
—
누적
—

불러오는 중

게임 개발 · 기술 동향 · 팀 블로그MIRO
헤드라인

Fantasya

Fantasya 캐릭터가 반짝이던 문제를 연속 프레임으로 좁히기

일반 색상 패스는 유지하고 교체 셰이더 패스만 인스턴싱을 끄는 렌더링 분기 도식
이번 수정 범위를 설명하기 위해 직접 제작한 도식입니다. 실제 게임 화면은 아닙니다.

멈춘 캐릭터도 화면에서는 흔들렸습니다

Fantasya는 Unity에서 캐릭터 조작과 몬스터 행동을 함께 시험하는 게임 프로젝트입니다. 이번에는 선택한 캐릭터를 픽셀 스타일로 그리는 Pixora Studio의 Pixel Camera를 적용한 뒤, 실행 중 외형이 반짝이거나 일부가 사라지는 문제를 다뤘습니다. 픽셀 크기를 조절하는 것보다 먼저, 같은 장면이 매번 같은 모습으로 그려지는지 확인해야 했습니다.

한 장의 화면에서 효과가 보인다는 사실만으로는 충분하지 않았습니다. 앞선 효과 켜기·끄기 비교는 외형의 차이는 보여 줬지만 시간에 따라 달라지는 오류를 놓쳤습니다. 그래서 이번에는 캐릭터와 카메라를 고정하고 여러 프레임을 이어 비교했습니다.

움직임과 렌더링 오류를 분리했습니다

확인 환경은 Unity 6000.0.83f1, URP 17.0.4의 RenderGraph, Windows DX11입니다. Playground의 캐릭터 세 개에 4픽셀 크기의 효과를 적용했습니다. 플레이 중 시간 진행과 캐릭터 제어·애니메이션을 메모리에서 멈추고, 같은 시점에서 여섯 프레임을 준비한 뒤 1280×720 화면 24장을 기록했습니다. 이 임시 정지 상태는 씬에 저장하지 않았습니다.

수정 전에는 인접한 23구간 중 14구간의 화면이 달랐습니다. 가장 큰 차이는 915,104픽셀이었고, 관찰 구간에서 인스턴싱 관련 경고가 2,232회 발생했습니다. 가만히 있는 대상의 화면이 바뀌므로 단순한 이동이나 애니메이션만으로 설명할 수 없는 문제였습니다.

교체 셰이더를 쓰는 경로만 바꿨습니다

GPU 인스턴싱은 여러 물체의 그리기를 묶는 기능입니다. 이번 렌더러는 캐릭터의 식별 정보와 표면 방향을 얻는 단계에서 원래 셰이더 대신 별도의 셰이더를 사용했습니다. 그런데 그 교체 패스에도 원래 재질의 인스턴싱 설정이 이어졌고, 물체의 행렬과 식별 정보에 관한 경고가 반복됐습니다.

프로젝트의 CharacterPixelRendererFeature.cs 안 List 메서드에서, 교체 셰이더가 있는 경우에만 인스턴싱을 끄도록 바꿨습니다. 아래는 실제 수정 분기입니다. 파일 위치는 Assets/Scripts/InGame/Rendering 아래입니다.

if (replacement != null)
{
    drawing.enableInstancing = false;
    drawing.overrideShader = replacement;
    drawing.overrideShaderPassIndex = 0;
}

화면의 일반 색상을 그리는 경로와 캐릭터별 픽셀 크기는 그대로 두었습니다. 공급받은 원본 파일은 보존하고 게임 전용 렌더러로 분리한 뒤, 렌더러 설정이 새 클래스를 사용하도록 연결했습니다. 전체 효과를 끄는 대신 문제가 드러난 경로만 좁혀 수정한 것입니다.

확인한 결과와 아직 남은 범위

같은 조건에서 다시 기록한 24프레임은 인접 화면의 차이와 인스턴싱 경고가 모두 0이었습니다. 임시 관찰 코드를 제거한 뒤 일반 플레이에서도 몬스터의 이동·추격·공격과 플레이어 사망을 살펴봤고, 픽셀 외형이 유지되는 것을 확인했습니다.

다만 이 결과가 모든 환경의 해결을 뜻하지는 않습니다. 수정 전부터 있던 Unity 내부 assertion 세 건의 원인은 확인하지 못했고, 다른 GPU와 모바일 빌드도 시험하지 않았습니다. 교체 패스의 인스턴싱 제한으로 그리기 비용이 얼마나 늘어나는지도 별도 측정이 필요합니다. 이번에 확인한 성과는 해당 장면에서 시간적 반짝임을 재현하고, 제한된 수정으로 같은 조건의 화면을 안정시킨 데 있습니다.

관련 공식 문서

본문의 구현·측정 결과는 Fantasya에서 확인한 작업에 한정됩니다. 위 공식 문서는 API의 의미를 설명하는 참고 자료입니다.

댓글

이 글에 대한 생각을 남겨 주세요.

댓글 삭제

헤드라인

같은 카테고리의 글

프로젝트 개발일지 전체 보기 ↗