AI는 방향을 모른다고? 나노바나나로 물체 회전시키기 완전 가이드
1. 문제: 나노바나나는 왜 물체를 제대로 회전시키지 못할까?"
나노바나나로 이미지 안의 물체를 회전시키는 편집 작업, 결국 실패로 끝난 경험이 있으신가요?
그 이유는 Google NanoBanana, GPT Image와 같은 최신 AI 이미지 생성 모델조차 아직 물체의 방향을 인지하고, 3D 구조를 이해하지 못하는 치명적인 약점을 가지고 있기 때문입니다. 이런 이유로 인해, 정확한 각도로 물체를 회전시키는 작업은 아직 해결되지 않은 영역으로 남아 있습니다.
직접 확인해 보겠습니다
아래의 이미지 속 의자를 벽과 수평하도록 회전시켜 봅시다:

이미지 속 '핑크 쿠션의 나무 의자'가 벽과 수평하도록 회전시켜 줘.
이 프롬프트를 나노바나나 프로 API를 통해 생성하면 아래의 결과가 나옵니다:


디자인 자체는 그럴듯하지만, 완전히 방향을 틀려버렸습니다.
다른 프롬프트를 사용해도 분명한 한계가 보여집니다. 텍스트를 통해 pitch, yaw, roll 값을 지정해 주어도, 결과 이미지가 어떻게 보여야 하는지 설명해 주어도 나노바나나와 텍스트 프롬프트만으로는 여전히 실패합니다.
작업 목표: 정확한 각도로 이미지 속 물체를 회전시키기
이번 블로그에서는 물체의 3D 모형을 추출하는 SAM3D 모델을 활용해 이미지 속 물체를 정밀하게 회전시키는 파이프라인을 설명합니다.
파이프라인을 적용하면 아래의 결과가 나옵니다:


연속적으로 실패하던 나무 의자 회전 작업이 반복적으로 성공합니다. 사용자의 의도에 정확히 부합하는 이미지가 만들어졌습니다.
어떻게 이런 결과를 만들 수 있었을까요? 다음 장에서 전략을 알아봅니다.
2. 전략: 3D를 이해하는 AI 모델을 함께 활용하자
핵심 아이디어는 간단합니다:
물체를 회전한 후의 모습을 정확하게 복원하는 3D 복원 모델을 함께 사용하자!
이 전략은 3단계로 이루어집니다.
- 물체를 3D로 추출 — 회전할 물체를 SAM3D 모델을 사용해 3D 모형으로 추출합니다.
- 물체를 회전시키고 배경에 합성 — pitch/yaw/roll을 조정해 3D 모형을 회전시키고, 배경 어디에 둘 지를 위치와 크기를 조정해 결정합니다.
- 원본 질감을 살려 마무리 — 합성 결과를 원본 이미지를 참고해 자연스럽게 보정합니다.
다음 섹션에서 각 단계를 자세히 살펴보겠습니다.
3. 단계별 상세 설명
회전 품질을 안정적으로 만들기 위해, 아래 3단계를 분리해 처리합니다.
Extract — 3D 추출과 배경 제거 준비
대상이 확정되면 objectRotationMode=extract로 전환됩니다.
이 단계에서 handleObjectRotationExtract가 실행되며, 내부적으로 SAM3D 파이프라인과 **배경 제거 이미지 생성(병렬)**이 수행됩니다.
요청의 핵심 계약은 다음과 같습니다:
{
"sessionId": "required",
"prompt": "required",
"images": "required",
"objectRotationTarget": "required",
"objectRotationMode": "extract"
}
완료되면 메시지에 아래 필드가 채워집니다:
object_rotation_glb_urlobject_rotation_background_removed_image_base64object_rotation_background_removed_image_mime_typeis_object_rotation_rotation
즉, 회전 가능한 3D 자원과 합성 준비 자원이 동시에 준비됩니다.

Rotate — 단일 뷰포트에서 회전/이동/배경 토글 편집
편집 단계는 ObjectRotationViewer의 rotate-composite 모드에서 수행됩니다.
핵심은 회전과 합성 관련 제어를 분리하지 않고 한 뷰포트에 통합한 점입니다.
지원 컨트롤은 다음과 같습니다:
orbit drag->pitch/yaw동기화shift + drag->rollmove mode + drag->offsetwheel->scalebackground toggle-> 배경 ON/OFF
기본값은 showBackground: false, moveMode: false입니다.
편집 결과는 object_rotation_angles, object_rotation_rotated_image_base64, object_rotation_composite_settings.finalComposedImageBase64 등의 메시지 필드로 누적됩니다.

Final — 우선순위 참조 기반 최종 생성
마지막으로 objectRotationMode=final 요청을 보내 handleObjectRotationFinal을 실행합니다.
최종 이미지 생성에는 gemini-3-pro-image-preview가 사용됩니다.
요청의 핵심 계약은 다음과 같습니다:
{
"sessionId": "required",
"prompt": "required",
"images": "required",
"objectRotationTarget": "required",
"objectRotationCompositeSettings": "required",
"objectRotationMode": "final",
"rotatedObjectImageBase64": "optional",
"rotatedObjectImageMimeType": "optional"
}
최종 단계에서는 objectRotationCompositeSettings.finalComposedImageBase64와 finalComposedImageMimeType이 핵심 입력으로 사용됩니다.
즉, 사용자가 단일 뷰포트에서 조정한 합성 결과를 그대로 참조해 결과 일관성을 높입니다.
실패 시에는 회전 단계로 복귀하도록 설계되어, 각도/위치 조정 후 바로 재생성이 가능합니다.

4. NBskills에서 이 모든 것을 간편하게
위 과정을 직접 구현하려면 API 계약 관리, 상태 전이 제어, 뷰포트 편집, 최종 생성 재시도까지 많은 작업이 필요합니다. NBskills는 이 전 과정을 파이프라인으로 자동화합니다.
대상 확정 기반 회전 시작
회전 작업 전에 planning 단계로 대상을 먼저 확정합니다. 덕분에 "무엇을 돌릴지"가 명확해지고, 후속 추출/회전 단계의 안정성이 높아집니다.
단일 뷰포트 인터랙티브 편집
회전, 이동, 배경 토글을 한 화면에서 연속적으로 조절할 수 있습니다. 편집 컨텍스트가 끊기지 않아 반복 작업이 훨씬 짧아집니다.
계약 기반 단계 오케스트레이션
objectRotationMode(planning, extract, final)와 메시지 필드 계약을 기준으로 단계가 전이됩니다.
실패 시 복귀 지점이 정의되어 있어, 재시도 경로가 예측 가능합니다.
단계별 모델 자동 라우팅
텍스트 분석과 이미지 생성 단계에 서로 다른 모델을 자동 라우팅합니다. 단계 성격에 맞는 모델 분리로 품질과 속도의 균형을 맞춥니다.
5. 마치며
object-rotation의 핵심은 "회전을 잘하는 모델" 하나를 찾는 것이 아닙니다. 대상 확정 -> 추출 -> 단일 뷰포트 편집 -> 우선순위 참조 기반 최종 생성으로 이어지는 파이프라인을 설계하는 것이 더 중요합니다.
이 글의 핵심 교훈은 이것입니다:
회전 품질은 모델 단일 성능보다, 단계 분리와 데이터 계약의 일관성에서 나온다.
NBskills는 이 파이프라인을 제품화해, 사용자가 복잡한 내부 구현을 몰라도 안정적인 회전 편집 결과를 얻을 수 있도록 돕습니다.