뒤로

Halloween Manor

브라우저에서 즐기는 핼러윈 게임입니다. 플레이어는 어둡고 오래된 저택의 유령이 되어 초상화, 거울, 흔들의자에 빙의하고, 손전등을 든 방문객들을 겁줘 현관문 밖으로 쫓아냅니다. 방문객은 핼러윈 의상을 입은 마스코트 Triboo로, 의상부터 애니메이션까지 Tripo API로 만들었습니다.

제작자: Theodore
라이브 체험
Halloween Manor라이브 체험

설명

Halloween Manor는 브라우저에서 바로 즐길 수 있는 핼러윈 미니게임입니다. 플레이어는 어둡고 오래된 저택의 유령입니다. 방문객들이 손전등을 들고 제 발로 들어오면, 집 안의 물건에 빙의하고 때를 노려 현신해 그들이 비명을 지르며 한 명씩 현관문 밖으로 달아나게 만들어야 합니다. 집 안에는 방문객이 동시에 최대 네 명까지 머물 수 있고, 가끔은 둘이 짝지어 들어오기도 합니다. 담력도 사람마다 달라서, 누가 겁쟁이이고 누가 회의론자인지는 이름표에 나와 있습니다.

물건은 두 종류로 나뉩니다. 오르골과 부엌문은 유인용으로, 소리를 내서 그 소리를 듣는 사람은 누구든 끌어들입니다. 램프, 흔들의자, 초상화, 전신 거울, 침실의 침대와 옷장은 겁주기용으로, 누군가 보고 있을 때만 효과가 있습니다. 지금 누군가 그 물건을 볼 수 있으면 물건 위에 눈 표시가 켜집니다. 기본 전략은 먼저 유인하고 그다음 겁주는 것입니다. 오르골은 침실 램프와, 부엌문은 흔들의자와 짝을 이룹니다. 초상화 속 인물은 빙의하기 전에는 평범한 여인이지만, 빙의하면 눈동자가 이쪽을 향하고 얼굴이 녹아내리며 끔찍한 모습으로 변합니다. 전신 거울에서는 얼굴이 덮치듯 튀어나오고, 현관홀, 복도, 서재, 거실, 침실 벽에는 공포 그림 여섯 점이 걸려 있습니다.

방문객은 손전등이 비추는 곳만 볼 수 있습니다. 플레이어에게 손전등 빛이 닿으면 형체가 짙어지고 방문객은 멈춰 서서 빤히 바라보지만, 그것만으로는 겁먹지 않습니다. F를 누르거나 우클릭하면 현신합니다. 근처 조명이 수명이 다해 가는 전구처럼 두 번 어두워지고, 0.6초 뒤 어두운 형체가 드러나 천천히 고개를 들며 1.5초 동안 머뭅니다. 현신으로 겁줄 수 있는 사람은 두 부류뿐입니다. 손전등으로 플레이어를 비추고 있는 사람, 그리고 이미 긴장한 상태에서 플레이어를 볼 수 있는 사람입니다. 겁을 많이 먹은 상대일수록 충격도 크므로, 먼저 물건으로 사람들을 긴장시킨 뒤 현신으로 마무리하는 것이 좋습니다. 현신의 쿨다운은 18초입니다.

물건에 대고 마우스 왼쪽 버튼을 반 초쯤 누르고 있으면 함정을 설치합니다. 물건 위로 서리가 서서히 번지고, 누군가 가까이 오면 저절로 발동합니다. 함정은 동시에 두 개까지 설치할 수 있으며, 60초 안에 아무도 오지 않으면 해제됩니다. 조준선이 물건을 가리키면 바닥에 희미한 서리 선이 나타나 그 물건이 사람을 겁줄 수 있는(또는 유인할 수 있는) 범위를 표시하고, 다음 행동이 통할 방문객은 이름 앞의 작은 눈 표시가 켜집니다. 행동한 뒤에는 조준선 옆 라벨이 “Theo jumped” 또는 “No one saw it”처럼 무슨 일이 일어났는지 알려 줍니다.

한 판은 약 5분 동안 이어지는 하룻밤입니다. 시작과 함께 첫 방문객이 들어오고, 이후 12초마다 한 명씩 더 들어와 집 안에 네 명이 찰 때까지 이어집니다. 3분 20초가 되면 방문이 마감되어 현관 조명이 꺼지고 더는 아무도 오지 않으며, 4분 30초에는 날이 밝아 아직 안에 남아 있는 사람은 제 발로 걸어 나갑니다. 마지막 한 명이 떠나면 방문객 명부가 펼쳐집니다. 각자 언제 들어왔는지, 무엇에 놀라 달아났는지 아니면 날이 밝아 떠났는지가 적혀 있고, 몇 명을 겁줘 쫓아냈는지에 따라 달라지는 맺음말이 붙습니다. 점수도 승패도 없습니다. Keep haunting을 고르면 계속 이어 가고, Another night을 고르면 처음부터 다시 시작합니다.

조작법: 마우스와 키보드로 플레이하면 3인칭 시점이며, 플레이어가 곧 유령입니다. 클릭하면 마우스가 고정되고, WASD로 떠다니며(벽도 그대로 통과), 마우스로 둘러보고, 휠로 카메라를 확대·축소합니다. 4미터 안의 물건을 클릭하면 빙의하고, 왼쪽 버튼을 길게 누르면 함정을 설치하며, F를 누르거나 우클릭하면 현신합니다. Esc는 마우스 고정 해제와 전체 조작법 보기, M은 음소거이고, 그래픽 품질 설정은 오른쪽 아래 모서리에 있습니다. 벽 너머의 방문객은 보이지 않으므로 발소리를 따라가야 하며, 헤드폰을 쓰면 도움이 됩니다. 휴대폰과 태블릿에서는 집이 위에서 내려다보는 인형의 집으로 바뀝니다. 물건을 탭하면 빙의하고, 시점을 회전할 수 있습니다. 이 모드에는 현신, 함정, 그림이 없으며, 방문객이 진정하기 전에 다시 겁주면 달아납니다.

최신 Chrome이나 Edge처럼 WebGPU를 지원하는 브라우저를 권장합니다. WebGPU를 지원하지 않는 브라우저에서는 자동으로 WebGL2로 전환됩니다. 싱글 플레이 게임이라 로그인이나 다운로드가 필요 없지만, 처음 불러올 때는 모델을 받아 오고 셰이더를 컴파일하느라 시간이 조금 걸립니다. 게임 인터페이스는 영어로 되어 있습니다.

Tripo 활용 방식

게임 속 캐릭터는 손전등을 든 방문객부터 플레이어가 조종하는 유령까지 모두 Tripo API로 만들었습니다. 집, 가구, 소품은 기본 도형을 조합해 코드로 만들었고, 그림, 초상화, 거울 속 얼굴은 별도의 2D 텍스처입니다.

  • 방문객: Tripo를 만든 팀 VAST의 마스코트 Triboo를 네 가지 핼러윈 의상으로 꾸몄습니다. 빅토리아풍 뱀파이어, 랜턴을 든 밤의 탐험가, 마녀, 손그림 해골입니다. 먼저 Tripo 이미지-투-이미지로 Triboo를 T-포즈로 세우고, 네 가지 의상 모두 이 한 장의 이미지에서 출발하기 때문에 비율이 일치하고 리깅도 깔끔하게 됩니다. 두 번째 이미지-투-이미지 단계에서는 둥글고 검은 몸체, 앞면의 로고, 노란 운동화는 그대로 두고 의상을 입히며, 모자, 망토, 칼라 같은 의상은 비닐 토이 액세서리처럼 만듭니다.
  • 방문객 모델: 의상 이미지마다 먼저 4면도를 만든 뒤, Tripo 멀티뷰-투-3D로 PBR 텍스처를 갖춘 모델을 생성합니다. 3인칭 시점에서는 방문객을 주로 뒤에서 보게 되는데, 4면도 덕분에 등 쪽의 망토와 숄이 제대로 표현됩니다. 텍스처는 구워진 조명을 걷어 낸 상태라서 조명은 게임 속 램프와 손전등이 담당합니다.
  • 리그와 애니메이션: 리깅 가능 여부 검사를 거친 뒤 Tripo 자동 리깅으로 휴머노이드 골격을 맞춰 넣고, Tripo 프리셋 애니메이션 여덟 가지를 적용합니다. 대기, 걷기, 달리기, 둘러보기, 겁먹기, 도망치기, 그리고 두 종류의 깜짝 놀라기입니다. 내보내기 전에는 Blender 스크립트로 모든 방문객을 같은 방식으로 다듬습니다. 공 모양 몸체, 모자, 망토는 상체와 한 덩어리로 움직이고, 다리 옆의 액세서리는 다리를 따라 늘어나지 않으며, 삼각형 수에 상한을 두고 루트 모션을 제거합니다. 방문객 한 명당 약 1.1–1.7 MB이며, 텍스처는 WebP를 사용합니다.
  • 유령: Tripo 텍스트-투-이미지로 콘셉트 이미지 네 장을 만들고, 그중 고른 한 장을 Tripo 이미지-투-3D에 넣어 텍스처 없는 흰색 모델로 만들었습니다. 반투명한 차가운 안개, 손전등 빛 속에서 짙어지는 모습, 현신할 때 취하는 어둡고 단단한 형체는 모두 게임 자체 셰이더가 그리기 때문에 텍스처가 필요 없습니다. 이어서 Blender로 정리하면서 후드 속 얼굴을 깊숙이 밀어 넣어 움푹한 구멍으로 만들고, 삼각형 수를 8,000개 미만으로 줄이고, 오클루전을 정점에 구워 넣어 후드 안쪽과 깊은 주름이 어두워지게 했습니다.

브라우저에서 실행되는 방식

게임 엔진은 쓰지 않았습니다. TypeScript와 Vite로 three.js의 WebGPU 렌더러 위에 직접 만들었고, WebGPU를 지원하지 않는 브라우저에서는 자동으로 WebGL2로 전환됩니다. 빌드 결과물은 상대 경로를 쓰는 정적 파일 묶음이라, 어떤 정적 호스팅의 어떤 하위 경로에 올려도 그대로 열립니다.

손전등은 이 집에서 가장 중요한 광원입니다. 방문객마다 하나씩 들고 있고, 손전등마다 각자 그림자를 드리웁니다. 유령의 셰이더는 자신이 어느 손전등의 빛 원뿔 안에 서 있는지 픽셀 단위로 계산합니다. 빛줄기 안에서는 형체가 짙어지고 윤곽이 또렷해지며 손전등의 따스한 색을 살짝 띠고, 빛 밖에서는 차가운 안개 그대로 남습니다. 현신하면 빛을 가리고 깊이를 기록하는 어두운 “솔리드” 머티리얼로 바뀌며, 손전등이 비추는 쪽은 조금 더 밝습니다. 유령이 지나가는 벽과 가구는 유령 주위로 녹듯이 사라지고, 그 가장자리를 따라 서리가 맺힙니다.

모든 소리는 Web Audio로 실시간 합성하며, 게임에는 오디오 파일이 단 하나도 없습니다. 비명, 흔들의자의 삐걱거림, 램프의 전류가 웅웅거리는 소리, 오르골, 거울 속 얼굴이 튀어나올 때의 짧고 날카로운 효과음, 집 안의 환경음까지 모두 코드로 생성합니다. 벽 너머로 아무도 보이지 않을 때는 발소리로 사람을 찾습니다.

시작 버튼은 집과 첫 번째 방문객 의상, 그리고 집 전체의 셰이더를 미리 컴파일하는 작업이 모두 끝날 때까지 기다립니다. 버튼을 클릭하면 약 20밀리초 만에 밤이 시작됩니다. 나머지 의상은 플레이하는 동안 백그라운드에서 내려받고, 파이프라인 컴파일이 끝나는 대로 로테이션에 합류합니다. 광과민성을 고려해 조명 깜빡임에 상한을 두었습니다. 어떤 조명도 1초 안에 세 번 넘게 어두워지지 않습니다. 그래픽 품질은 높음과 낮음 두 단계이며, 낮음은 75% 해상도로 렌더링합니다.