피톤은 체크포인트와 같습니다. 게임을 시작할 때 특히 도움이 됩니다.
기술 아트 심층 분석: 카인이 3D 블렌드맵을 사용하여 게임플레이 전용 암석 재료를 렌더링하는 방법

앤서니 베이어는 더 게임 베이커스의 기술 아트로 "노-피톤 서피스" 개발의 기술적 예술에 대해 이야기합니다.카인. 그들이 3D 블렌드맵과 유니티의 컴퓨트 셰이더를 사용하여 비주얼과 게임플레이를 정렬하는 도전을 어떻게 극복했는지 알아보세요.
안녕하세요! 저는 더 게임 베이커스의 기술 아트 디렉터 앤서니 베이어입니다. 저는 원래 그래픽 디자인(웹, 인쇄) 배경에서 왔습니다. 제 첫 비디오 게임 경험은 2010년에 3D 모델러로 모바일 게임에서 시작되었습니다. 그 당시 저는 코딩에 대해 아무것도 몰랐지만, 비디오 게임 엔진에서 그래픽 작업에 매우 관심이 있었기 때문에 자바스크립트를 배우기 시작했고, 여가 시간에 몇 개의 작은 유니티 프로젝트를 만지작거렸습니다. 요즘은 3D 모델을 만드는 것보다 코드를 작성하는 데 더 많은 시간을 보냅니다! 제 작품 중 일부는 제 아트스테이션 페이지에서 찾을 수 있습니다.
저는 2014년경 퓨리의 개발 초기에 더 게임 베이커스 스튜디오와 함께 작업하기 시작했습니다. 2016년에 퓨리가 출시된 후, 우리는 헤이븐 (2020년에 출시됨)에서 작업했으며, 2026년 1월에 새로운 게임 카인, 암벽 등반 시뮬레이션 비디오 게임을 출시했습니다.
카인에서 피톤은 무엇인가요?
카인에서는 거의 모든 벽을 오를 수 있으며, 이 경험을 더 도전적으로 만들기 위해 스태미나 메커니즘을 구현했습니다. 일정 시간 동안 오르면, 아바(플레이어 캐릭터)는 결국 피곤해질 것입니다. 휴식을 취하기 위해 그녀는 피톤이라고 불리는 금속 스파이크로 벽에 자신을 고정할 수 있습니다. (게임플레이 참고: 피톤은 선택 사항이며, 없이도 오를 수 있지만, 카인의 등반 조작에 대한 더 깊은 지식이 필요합니다).
일부 벽의 난이도를 높이고 '프리 솔로' 경로를 강제하기 위해, 특정 지역에서 피톤 심기를 금지하고자 했습니다. 이 블로그 포스트에서는 우리가 피톤 금지 표면이라고 부르는 게임의 이 작은 기술적 부분을 어떻게 개발했는지 설명하겠습니다.
카인의 주인공 아바가 피톤을 피톤 금지 표면에 심는 것을 거부하는 장면.
환경에 다양한 유형의 표면을 추가하는 방법
지형에 변화를 주고 싶을 때, 가장 먼저 떠오르는 것은 무엇인가요? 당신은…
- 새로운 객체와 지오메트리를 추가할 수 있습니다.
- ‘버텍스 컬러 페인팅’을 추가할 수 있습니다.
- ‘블렌드맵 텍스처’를 사용하세요.
카인은 전형적인 ‘하이트맵 제어’ 지형이 아닙니다; 사실은 키트배쉬드 산입니다 (자세한 내용은 이 아트스테이션 포스트에서 확인하세요).

이로 인해 추가 객체/지오메트리를 통해 변화를 주기가 어려워졌습니다. 이미 복잡한 레벨 디자인 과정에 더 많은 제약이 추가되었기 때문입니다 (우리는 실제 클라이밍 레벨 디자인 위에 피톤 금지 표면을 자유롭게 디자인하고 싶었습니다).
블렌드맵과 버텍스 컬러는 유사한 기술로, 둘 다 셰이더에서 샘플링되어 렌더링 변화를 만드는 마스크입니다.
우리의 경우, 버텍스 컬러 페인팅을 사용할 수 없었습니다. 그 이유는:
- 페인팅할 수 있는 정점이 너무 많았기 때문입니다.
- 겹치는 지오메트리가 너무 많았습니다 (핸드홀드 메쉬가 키트베이스 지형에 투사됨).
- 우리의 모듈형 바위는 LOD를 사용하므로 정점의 밀도가 일관되지 않습니다.
2D 블렌드맵
결국 우리는 블렌드맵 솔루션을 선택하기로 결정했습니다!
다행히도, 우리는 레벨 아트에 사용되는 커스텀 도구인 TexturePainter를 이미 가지고 있었습니다. 이 도구를 사용하면 에디터에서 블렌드맵을 페인트하고 렌더러 그룹에 할당할 수 있었습니다 (수동으로 선택한 렌더러 또는 TexturePainter 범위 내에 있는 경우 자동으로).
The Game Bakers에서는 Unity에서 커스텀 도구를 만드는 것을 좋아합니다 – [ExecuteAlways]는 일반적으로 제가 모든 스크립트에 추가하는 첫 번째 줄입니다!
우리는 주로 TexturePainter를 사용하여 땅에 풀과 눈 층을 페인트하지만, TexturePainter에서 자유롭게 회전할 수 있기 때문에 벽에도 페인트할 수 있습니다.

몇 가지 작은 셰이더 조정 후, 우리는 "노-피톤 표면" 블렌드맵을 만들었고, 텍스처링/셰이딩을 동적으로 변경할 수 있었습니다.
이것은 구워진 Texture2D이므로, 주어진 월드 위치에서 텍스처의 값을 샘플링하여 플레이어가 피톤을 심을 수 있는지 여부를 쉽게 결정할 수 있습니다.
개념이 작동했습니다! 하지만 이 단계에서는 여전히 제한적이었습니다. 왜냐하면 2D 마스크 투사이기 때문에 전체 산에 대해 하나만 가질 수 있었고, 정밀도가 낮았기 때문입니다.
이 시점에서 우리는 "노-피톤 표면"이 게임에 포함될지 확신하지 못했습니다. 시각적으로 매력적이지 않았고, 그것들이 게임에 의미 있는 가치를 추가하는지 확신하기 위해 많은 게임플레이/레벨 디자인 테스트를 해야 했습니다.
하지만 우리는 적어도 그것이 어떻게 보여야 하는지 반복적으로 시작할 수 있었습니다.
일부 렌더링 매개변수를 노출하면 이 유형의 표면에 대한 다양한 잠재적 외관을 시도할 수 있습니다.
첫 번째 솔루션이 전혀 작동하지 않을 때
예술 방향 측면에서 렌더링을 개선하려고 노력하는 동안, 레벨 디자인 측면에서는 "2D 프로젝션" 제한이 점점 더 문제가 되고 있었습니다. 우리의 레벨 디자인 특성상, 다음의 노-피톤 표면에 대한 3D 제어가 필요했습니다:
- 산 안쪽(동굴)에서 발견할 수 있는 노-피톤 표면
- 오목/볼록한 벽/건축물을 감쌀 수 있는 노-피톤 표면
…
타임스킵
게임 개발에는 항상 많은 새로운 아이디어와 할 일이 있습니다. 나는 나비처럼 일하는 것을 좋아합니다 – 무언가에 막히면 문제를 무시하고 다른 곳에서 다른 일을 합니다!
…
3개월에서 6개월 후…
다른 새로운 기능을 위해 우리는 거리 필드 표현을 위해 Texture3D를 사용합니다. 우리는 많은 볼륨(상자와 타원체)을 배치하고, 그로부터 거리 필드 텍스처를 생성하며, 각 픽셀은 가장 가까운 볼륨까지의 거리를 포함합니다. 각 볼륨은 가산적이거나 서브트랙티브할 수 있습니다.
이것을 우리는 "토폴로지 뷰"라고 부릅니다: 월드 스페이스 Texture3D에 의해 제어되는 스크린 스페이스 이미지 효과입니다.
이 3D 거리 필드 텍스처는 해상도가 낮고 런타임에 필요에 따라 생성됩니다(에디터에서 구워지지 않으며 CPU 측에서 읽을 수 없습니다).
3D 블렌드맵
이 시점에서 우리는 No-Piton 표면을 위한 3D 블렌드맵 솔루션을 시도할 시간이었다.
셰이더 측면에서는 Texture2D에서 Texture3D로 변경하는 것이 간단하다. 이제 남은 것은 세계 좌표에 약간의 노이즈를 추가하여 이러한 저해상도 텍셀을 숨기는 것이었고, 짜잔!
No-Piton 표면 편집하기
이 솔루션은 시각적으로는 효과적이었지만, 텍스처가 CPU에서 읽을 수 없었기 때문에 플레이어의 위치를 감지할 수 없어 게임플레이 측면에서 모든 것이 망가졌다.
거리 필드 샘플링은 각 기본 볼륨(상자, 타원체)을 반복하여 CPU 측에서 수행되었다. 그러나 바위 셰이더의 세계 좌표에 노이즈를 추가했기 때문에 가장자리에 눈에 띄는 오프셋이 있었고, 명백히 정밀도가 부족했다.

비주얼과 게임플레이 동기화하기
이를 해결하기 위해 우리는 바위 셰이더에서 보이는 정확히 동일한 값을 얻기 위해 컴퓨트 셰이더를 사용했다.
플레이어가 피톤을 심고 싶어할 때, 우리는 벽에 레이캐스트를 하여 피톤이 위치할 곳을 찾고, 플레이어가 No-Piton 영역 안에 있는지 확인한다. 그럴 경우, 우리는 피톤 심기 위치에서 컴퓨트 셰이더에 요청을 보낸다. 컴퓨트 셰이더 결과가 돌아오면(같은 프레임 또는 한 프레임 후), 우리는 피톤을 심을 수 있는 능력을 검증하거나 비활성화한다.
이제 우리는 텍셀 완벽한 샘플을 가지고 있다: “바위 셰이더”와 “No-Piton 체크 컴퓨트 셰이더”, 두 개 모두 정확히 동일한 코드를 공유한다.
결과적으로 이 솔루션은 약간 너무 정밀했다!
정상적인 바위와 No-Piton 바위의 중간에 있고 피톤을 심고 싶지만, 게임의 세계 위치가 당신이 No-Piton 표면에 있다고 판단했기 때문에 심을 수 없다고 상상해 보라. 당신이 단지 두 인치 떨어진 곳에 피톤을 심을 수 있을 때, 이것은 매우 불공평해 보인다.
이를 해결하기 위해, 우리는 플레이어 주변의 작은 범위에서 여러 샘플을 트리거하여 유효한 위치를 찾습니다.
여기에서 초록색 선 검사가 No-Piton 바위에 있는 반면, 위쪽 파란색 선 검사는 일반 바위에 있습니다. 우리는 이 두 번째 위치를 선택하여 피톤을 심을 것입니다.
항상 다듬을 것이 있습니다.
모든 것이 잘 보이므로, 이제 다듬고 polish할 시간입니다.
우리는 여러 No-Piton 영역을 동시에 로드하는 방법을 구현했습니다. 가장 가까운 영역만이 "진짜"이며, 나머지는 LOD 데칼로 렌더링됩니다. 이 솔루션은 완벽하지 않지만, 데칼은 지연되어 바위 셰이더와 같은 방식으로 조명을 받을 수 없기 때문에 우리의 필요에는 충분했습니다.
No-Piton 3D 블렌드맵 전환은 LOD0(바위 셰이더 내부에서 렌더링됨)에서 LOD1(지연된 데칼로 렌더링됨)으로 진행됩니다.
No-Piton 표면에 대한 모든 것입니다. 당신이 Cairn을 플레이하고 No-Piton 표면에 피톤을 심는 방법을 찾으면, 꼭 알려주세요 - 항상 수정할 것이 있습니다!
읽어 주셔서 감사합니다.
Cairn 은 현재 PC와 PlayStation®5에서 출시되었으며, 여름에 무료 "On The Trail" DLC가 출시될 예정입니다. 우리의 Steam 큐레이터 페이지에서 더 많은 Made with Unity 게임을 탐색하고, Unity 블로그와 리소스 허브에서 Unity 개발자들의 더 많은 이야기를 확인하세요.
