Lonely Candle
Blender 유체 시뮬레이션으로 만든 촛불을 손안으로 옮긴 인터랙티브 캔들

최신 버전
v1.0.0
릴리스
2026.07.20
배포
Android APK
렌더러
Forward Mobile
Blender Mantaflow 화염 시뮬레이션으로 렌더한 촛불을 Godot 4.7 모바일 앱으로 포팅했습니다. 렌더 결과물과 같은 룩을 목표로 절차적 불꽃 셰이더를 튜닝하고, 자이로스코프와 마이크를 붙여 실제 촛불처럼 기울이고 불어서 끌 수 있게 만들었습니다.
기능
절차적 불꽃
베이크한 심플렉스 FBM 노이즈로 불꽃을 그린다. C1 베타커브 테이퍼, 내부 난류 줄무늬, 심지 밑 보라빛 연소 벌브, 길이와 밝기 커플링, HDR 글로우까지 Blender 레퍼런스와 스케일을 맞춰 튜닝했다.
자이로 스웨이
폰을 좌우로 기울이면 캔들은 화면에 고정된 채 불꽃만 감쇠 스프링으로 세계 수직을 향해 출렁인다. 팁 랙 곡률까지 따라오고, 화면 평면 성분만 반응하므로 폰을 눕혀도 불꽃은 서 있다.
마이크 바람
마이크 입력의 실시간 음량을 바람 세기로 변환한다. 빠른 어택과 느린 릴리즈로 스무딩해서, 부는 세기에 따라 불꽃이 몸통째 기울고 짧아지며 고주파 플러터와 밝기 스퍼터가 생긴다.
소화와 재점화
강풍이 임계값 이상 지속되거나 켜진 상태에서 심지를 탭하면 꺼진다. 가늘게 사행하는 리본 연기 기둥과 심지 엠버가 남고, 화면을 탭하면 순간 플레어 후 안정된 불꽃으로 돌아온다.
숨겨진 개발자 도구
좌상단 140px 인비저블 핫존을 1.5초 간격 이내로 열 번 연속 탭하면 한국어 개발자 패널이 열린다. 플리커 속도, 불꽃 크기, 밝기, 지속 바람, 감도, 꺼짐 임계값과 함께 마이크·바람 레벨 미터와 FPS를 볼 수 있다.
셰이더 6종
핵심 불꽃(flame), 주변 웜 글로우(halo), 왁스 SSS 근사(wax), 소화 연기(smoke_ribbon), 가짜 접촉 그림자(shadow_disc) 등으로 나뉘어 있다. 모바일 렌더러에 없는 기능은 근사로 대체했다.
실행 화면



제작 노트
해시 밸류 노이즈를 쓰면 안 된다
격자 정렬 주름이 불꽃 경사면에서 직선 아티팩트로 증폭된다. 글로우 밉이나 정밀도 문제처럼 보이지만 원인은 노이즈다. FastNoiseLite 심플렉스 FBM을 시임리스 텍스처로 베이크해 샘플링해야 사라진다.
AgX 톤매핑은 HDR을 탈색시킨다
골드 톤을 지키려면 발광을 더 키우는 대신 베이스 색의 채도를 올려야 한다. 발광을 올리면 색이 흰쪽으로 빠진다.
바람 굽힘을 셰이더 시어로만 하면 안 된다
쿼드 경계에서 종이처럼 잘린 단면이 보인다. 심지를 피벗으로 리그 자체를 회전시키고 보조 곡률을 얹어서 해결했다.
테이퍼는 단일 C1 곡선이어야 한다
구간을 나눠 테이퍼를 적용하면 이음선이 수평 줄무늬로 드러난다.
마이크는 플랫폼마다 조건이 다르다
Android는 매니페스트 선언만으로는 캡처 버스가 조용히 무음이 되어 런타임 권한 요청이 필수다. iOS는 오디오 세션 카테고리를 Play and Record로 바꿔야 하며, 기본값 Ambient에서는 녹음이 허용되지 않아 버퍼가 무음으로 들어온다.
중력 센서는 조용히 실패한다
프로젝트 설정에서 중력 센서를 켜지 않으면 기기에서 오류 없이 (0,0,0)을 반환한다. 에디터에서는 드러나지 않는다.
받기 전에 알아두세요
- 배포되는 설치 파일은 Android APK 하나입니다. arm64-v8a 빌드이며 마이크 권한을 포함합니다.
- iOS는 실기기에서 빌드와 실행을 검증했지만 배포용 설치 파일은 제공하지 않습니다.
- 저장소가 비공개라 소스 코드 링크를 제공하지 않습니다.
- 앱스토어나 Google Play에 출시된 상태가 아닙니다.
저장소가 비공개라 공개 링크가 없습니다. 빌드나 구현에 관한 문의는 GitHub 이슈로 남겨 주세요.