[BO App] Ruber
내부 자료의 유출 방지를 위해 공개 가능한 범위에서의 자료만 공유합니다.
소개
3D 실사 렌더링 이미지를 출력하기 위한 백오피스 앱입니다.
Core SDK 로 구성한 3D 인테리어 공간을 입력으로 받아, 레이 트레이싱을 적용한 고품질 이미지를 만들어 냅니다.
실시간 렌더링으로는 왜 부족했을까요?
편집 화면의 3D 는 손이 움직이는 즉시 반응해야 합니다. 1초에 수십 장을 그려야 하니 빛 계산은 과감하게 생략합니다. 그림자도 근사치를 쓰고, 반사도 흉내만 냅니다. 배치를 확인하는 용도로는 충분합니다.
그런데 고객에게 제안서로 내미는 이미지라면 이야기가 달라집니다. 유리에 창밖이 비치고, 마루에 조명이 은은하게 번지는 그 느낌이 곧 설득력이기 때문입니다.
두 요구는 한 번에 만족시킬 수 없어서 역할을 나눴습니다. 편집은 빠른 실시간 렌더링으로, 최종 이미지는 시간이 걸려도 정확한 오프라인 렌더링으로 처리합니다. 사진으로 치면 뷰파인더와 인화의 관계에 가깝습니다.
레이 트레이싱은 무엇이 다른가요?
레이 트레이싱은 카메라에서 출발한 빛줄기를 하나씩 따라가며 색을 정하는 방식입니다. 빛이 벽에 닿고, 튕겨서 바닥에 닿고, 다시 눈에 들어오는 경로를 계산합니다.
그래서 따로 공을 들이지 않아도 반사, 굴절, 부드러운 그림자가 자연스럽게 나옵니다. 대신 픽셀 하나마다 여러 갈래를 따라가야 해서 계산량이 큽니다. 실시간으로 돌리기 어려운 이유이자, 서버에서 돌려야 하는 이유입니다.
HDRI 로 조명을 다루기
실내 이미지의 분위기는 대부분 창밖에 서 들어오는 빛이 결정합니다. 이걸 전구 몇 개로 흉내 내면 아무리 만져도 어색합니다.
HDRI(High Dynamic Range Image)는 사방이 담긴 파노라마 사진에 밝기 정보를 넓은 범위로 함께 담아 둔 이미지입니다. 이걸 공간 바깥을 감싸는 하늘처럼 두면, 그 사진의 밝기 분포가 그대로 조명이 됩니다. 맑은 날 사진을 쓰면 맑은 날 실내가 되고, 해질녘 사진을 쓰면 해질녘 실내가 됩니다.
전구를 하나씩 배치하는 대신 환경 자체를 광원으로 쓰는 접근입니다.
서버에서 돌린다는 것
한 장에 오래 걸리는 작업이라 사용자를 기다리게 둘 수 없습니다. 요청을 받아 두고 서버에서 처리한 뒤 결과를 돌려주는 형태가 자연스럽습니다. 렌더링 요청이 몰릴 때와 없을 때의 차이가 커서, 필요한 만큼만 서버를 쓰는 구성이 비용 면에서도 유리했습니다.
담당 범위
- Core 로 제작된 3D 인테리어 공간 내 RayTracing 이 적용된 이미지 출력 기능 개발
- HDRI 적용, Shader Customize
- 개발환경: AWS EC2, Python
개발 기간
- First Commit Date: 2020. 10. 22
- First Release Date: 2021. 05. 10
- In Operation...
기여도
- Main Contributor / Committer
- 참여율: 약 80%
정리
"빠른 그림"과 "좋은 그림"을 한 엔진에서 다 하려고 하면 둘 다 어중간해지기 쉽습니다. 요구가 정말 다르다면 파이프라인을 나누는 편이 결과적으로 단순했던 것 같습니다.