기록 범위 작성자가 들려준 시작 계기와 제작 설명, 공개 저장소·App Store의 공개 정보, 직접 실행해 찍은 앱 화면으로 썼다. 코드·파일 구조·커밋 이력·비공개 배포 정보는 넣지 않았다.

촛불이 없던 생일 자리에서 시작했다

친구들이랑 생일을 보내다가 촛불이 없다는 걸 알았다. 휴대폰으로 대신할 앱을 찾았는데, 그냥 촛불 그림이 있는 앱은 있어도 진짜처럼 불어서 끄는 건 잘 안 보였다. “그럼 하나 만들지 뭐” 싶었다. Lonely Candle은 그렇게 시작했다.

앱을 켜면 검은 화면 가운데에 촛불 하나가 있다. 폰을 기울이면 불꽃이 늦게 따라 흔들리고, 입김을 불면 옆으로 눕는다. 세게 불면 꺼진다. 심지에는 잠깐 잔불이 남고 연기가 올라온다. 다시 켤 수도 있다. 생일 케이크 앞에서 잠깐 꺼내 쓸 수 있으면 좋겠다고 생각했다.

Lonely Candle을 실제 실행했을 때 점화된 촛불과 불꽃이 보이는 세로 화면

실제 Godot 런타임에서 찍은 점화 화면. 화면에는 촛불 하나만 남겼다.

‘후—’를 앱의 반응으로 바꾸는 일

제일 오래 붙잡고 있던 건 마이크였다. 마이크는 데시벨만 읽는다. 그런데 입김은 소리의 크기만으로 딱 잘라 말할 수 있는 게 아니었다. 주변 소리에 툭 꺼지면 싫고, 후 하고 불어도 아무 일 없으면 더 싫었다.

AI도 이 부분에 썼다. 데시벨 값을 어떻게 다뤄 볼지, 반응이 너무 빠르거나 무뎌질 때 어디를 먼저 봐야 할지 후보를 정리하는 데 도움을 받았다. 그 다음은 계속 직접 불어 보는 일이었다. 불꽃이 어느 정도 흔들려야 “바람을 맞았다”고 느껴지는지, 어느 순간 꺼져야 억울하지 않은지. 그건 결국 화면을 보면서 정했다.

작게 불면 불꽃만 흔들린다. 조금 더 세지면 짧아지고 옆으로 기운다. 강한 바람이 잠깐 이어졌을 때만 꺼지게 했다. 손뼉 한 번이나 우연한 소리 때문에 바로 꺼지는 촛불은 재미가 없었다.

빛이 아니라 촛불처럼 보이게

처음에는 불꽃만 움직이면 될 줄 알았다. 그런데 그렇게 만든 건 촛불보다 화면 위에 떠 있는 빛처럼 보였다. 왁스가 있고, 심지가 있고, 불이 꺼진 뒤에도 연기가 남아야 조금 납득이 갔다.

Blender와 Blender MCP로 촛불을 먼저 만들고, 그걸 Godot의 모바일 화면으로 옮겼다. 불꽃이 흔들릴 때도 단순히 방향만 바뀌면 종이 조각처럼 보였다. 바람을 맞은 불꽃처럼 몸통부터 기울고, 끝은 조금 늦게 따라가게 하고 싶었다.

Lonely Candle을 실제 실행했을 때 불이 꺼진 뒤 심지와 연기가 남은 화면

실제 런타임의 소화 화면. 불이 꺼진 직후에도 심지와 연기가 남아 있다.

기울이고, 불고, 다시 밝히는 흐름

폰을 기울였을 때 불꽃까지 화면과 똑같이 누우면 이상했다. 그래서 불꽃은 원래의 수직을 향해 조금 늦게 따라오게 했다. 별거 아닌 차이인데, 손에 쥔 촛불 같다는 느낌은 여기서 많이 났다.

불을 끄는 데서 끝내고 싶지는 않았다. 꺼진 심지를 보고 다시 켜고 싶으면 화면에서 바로 켤 수 있게 했다. 목표도 점수도 없다. 불을 켰다가, 후 하고 끄고, 연기를 잠깐 보다가 다시 켜는 정도면 충분했다.

공개 범위와 관련 기록

Lonely Candle은 iPhone용 앱으로 App Store에 공개되어 있다. 공개 페이지에는 기울기·입김·심지 탭·재점화의 사용 흐름과, 마이크 권한을 입김으로 불을 끄는 데만 쓴다는 안내가 있다.