소개
조명을 배치하고 조도를 계산해주는 웹서비스를 만들고자 합니다.
이것은 인테리어 디자이너들에게 필요한 서비스입니다.
인테리어 디자이너들이 보통 조명 설계를 할 때, 대형 프로젝트가 아니고서는, 대다수가 경험적 설계에 의존합니다.
조도를 계산하는 툴을 배운적이 없거나, 이 작업이 번거롭고 시간이 걸리기 때문입니다.
그래서 이 작업을 AI 알고리즘으로 간단하게 계산하고 결과를 보기 좋게 만들어주는 웹서비스로 만들어보고자 합니다.
진행 방법
사용 도구 : Gemini, 안티그래비티
스티치나 피그마 등 디자인 선행작업 없이 프롬프트만으로 안티그래비티(Gemini 3 Pro High)에서 구현을 시도 하였습니다.
[1. 프롬프트 작성 (Gemini)]
웹서비스 기획안을 만들어줘.
[1] 형태/구성 : Antigravity Build Agent에 프롬프트 형태로 입력할 것임을 감안하고, 탄탄하고 실무적인 기획부터, 명료하고 논리적인 개발영역까지 고려하여 작성할것.
[2] 서비스 내용
2-1. 주요내용 : 인테리어 디자이너를 위해 조도 계산을 자동으로 해주는 서비스.
2-2. 필수요소 및 구성 절차
-a. 사진 업로드. 사진의 형태는 '평면도'.
-b. 부가정보 입력. 가로-세로 크기(mm단위) / 천장높이 / 천장, 벽, 바닥 마감재 종류와 색상
-c. 조명기기 배치. 조명기기 유형은 다운라이트/라인조명/간접조명. 각 조명기기 유형별로 각각 다른밝기의 조명기기를 3가지씩 선택버튼으로 선택할 수 있도록. 조명기기는 드래그앤드롭으로 평면도 위에 배치할 수 있도록.
-d. 시뮬레이션 시작
-e. 시뮬레이션 시작시 해당 정보를, 별도의 조도계산 알고리즘에 따라서 Gemini API가 분석하도록 구성 할것임. (API연결을 위해서 필요한 정보가 무엇인지 알려줘)
-f. 결과물 출력 : 평면도에 조도등고선다이어그램 표시 / 최대밝기(Lux) / 최저밝기(Lux) / 평균밝기(Lux) 출력하기.
위 내용에서 부족한 부분 있으면 나에게 인터뷰 해주고,
더 개선할점, 허점이 있는점, 플로우나 사용자경험에 있어서 부족한점을 잘 찾아줘.그리고 Gemini가 만들어준 프롬프트는 아래와 같습니다
# Project Name: Auto-Lux (AI Based Lighting Simulator)
## 1. Project Overview
인테리어 디자이너를 위한 웹 기반 조도 시뮬레이션 서비스입니다. 사용자가 평면도(이미지)를 업로드하고 조명을 배치하면, Gemini API를 통해 공간을 분석하고 물리적 연산을 통해 조도 분포(Heatmap/Contour)를 시뮬레이션합니다.
## 2. Tech Stack Requirements (Recommended)
- Frontend: React (Next.js), TypeScript, TailwindCSS
- Visualization: HTML5 Canvas API 또는 Konva.js (2D 도면 조작 및 히트맵 렌더링용)
- Backend: Python (FastAPI) or Node.js
- AI Integration: Google Gemini 1.5 Pro (Vision capabilities)
- Deployment: Vercel or AWS
## 3. User Flow & Feature Specifications
### Step 1: Floor Plan Upload & Calibration
- Input: 이미지 파일 업로드 (JPG, PNG).
- Action: 사용자가 평면도를 업로드한다.
- Calibration (필수): 사용자가 도면상의 실제 거리를 알 수 없으므로, 이미지의 특정 두 지점을 찍고 실제 거리(mm)를 입력하여 'Pixel to MM' 비율을 계산하는 기능을 포함한다.
### Step 2: Space Definition (Environment Setup)
- Input Fields:
- 가로(W) / 세로(H) (mm 단위, Step 1의 비율 기반 자동 추천 또는 수동 입력)
- 천장 높이(H) (mm 단위)
- 마감재 설정 (Dropdown 메뉴):
- 천장/벽/바닥 각각 선택.
- 옵션: 재질(페인트/벽지/타일 등) + 색상(White, Grey, Black, Wood 등).
- Logic: 각 선택값은 내부적으로 '반사율(Reflectance)' 수치(0.0~1.0)로 매핑되어야 함.
### Step 3: Lighting Placement (Drag & Drop UI)
- UI Components:
- 좌측 패널: 조명 팔레트
- 중앙 패널: 평면도 캔버스 (Zoom/Pan 가능)
- Lighting Types:
1. Downlight: 점 광원 (Point Light)
2. Line Light: 선 광원 (Linear Light) - 회전(Rotate) 및 길이 조절 기능 필요.
3. Indirect Light: 간접 조명 (Area/Reflected Light)
- Intensity Options: 각 유형별 3가지 밝기 옵션 (Low/Mid/High)을 버튼으로 선택.
- Data Attribute: 각 옵션은 사전에 정의된 Lumen(광속) 및 Beam Angle(광선각) 값을 가짐.
- Interaction: 팔레트에서 조명을 드래그하여 평면도 위에 배치. 좌표(x, y) 저장.
### Step 4: Simulation & Analysis (Core Logic)
- Trigger: "시뮬레이션 시작" 버튼 클릭.
- Process A (AI Analysis via Gemini):
- 업로드된 평면도 이미지와 사용자 설정값을 Gemini API로 전송.
- Role of Gemini: 도면의 벽체 구조(Walls), 가구 배치, 방의 경계(Boundaries)를 인식하여 JSON 좌표 데이터로 변환. (조도 계산을 위한 공간 지각 역할)
- Process B (Physics Calculation):
- Gemini가 파악한 공간 구조 + 사용자가 배치한 조명(Lumen, 위치) + 마감재 반사율을 결합.
- "Inverse Square Law(역제곱 법칙)" 및 "Lambert's Cosine Law"를 적용하여 그리드별 Lux 계산.
### Step 5: Visualization & Output
- Rendering: 평면도 위에 반투명 레이어로 결과 표시.
- Contour Map: 등고선 형태로 조도 분포 시각화 (색상 범례 포함: Red=High, Blue=Low).
- Data Display:
- Max Lux (최대 밝기)
- Min Lux (최소 밝기)
- Avg Lux (평균 밝기)2~3번의 인터뷰와 수정 과정을 거친 후 나온 프롬프트를,
Antigravity에서 돌리니, 그럴싸한 결과물이 나왔습니다.
컴퓨터 화면의 평면도 스크린샷
도면 업로드 기능이 구성되어 있고, 업로드가 잘 됩니다.
컴퓨터 화면에서 평면도 보기
몇 가지 Preset을 만들어둔 조명기기들을 드래그&드롭으로 배치할 수 있는 기능 창이 잘 구현되었습니다.
컴퓨터 화면에서 평면도 보기
실제 배치까지 잘 구현됩니다.
'시뮬레이션을 시작' 하는 버튼을 실행하니 등고선 형태의 다이어그램을 만들어주는 기능은 구현이 아직 미흡합니다. 수 차례 변경하고 반복 해봐도 마찬가지입니다.
그리고, 보여지는 결과물도 미흡하지만,
여기서는 조도 계산 결과값이 가장 중요하기 때문에, 이것은 별도의 Agent로 만들어서 최적의 값을 만들어내도록 따로 구현하고 이를 별도로 연동하고자 합니다. (어떻게 연동할지를 모르겠는데, AI가 알려주겠지요?)
메시지를 보여주는 웹페이지의 스크린샷
Antigravity를 처음 써보는데, 테스트 과정에서 Issue를 스스로 발견하고 알림을 주는것이 굉장히 좋아 보였습니다.
결과와 배운 점
일단 한번 러프하게 만들어보니, 무엇을 개선하고, 프롬프트를 어떻게 바꾸어 나가봐야겠다는 계획이 잡히는 것 같습니다.
바이브코딩은 멀리서보면 쉬워 보이지만, 실제 의미있는 프로젝트를 만들기 위해서 많은 생각과 경험과 노력이 필요하다는것이 느껴집니다.
도움 받은 글 (옵션)
앞선 글들을 작성해주신 많은 분들의 글을 참조하였습니다..