ComfyUI IC-Light 조명을 자유자재로 활용하기

최근 IC-Light이란 기술을 이용해 기존의 이미지에 조명의 위치와 색상, 밝기 등을 재구성하는 방법이 소개되었습니다. 본문에서는 ComfyUI에서 IC-Light 기술을 적용해 이미지를 생성 및 편집하는 과정에 대해 간단히 살펴보겠습니다.

조명과 보정

현실에서 촬영을 진행할 때 조명의 중요성은 아무리 강조해도 지나치지 않습니다. 전통적인 관점에서 디지털 이미지를 바라보면, 재아무리 이미지 편집 툴의 고급 기능이 등장하더라도, 촬영 당시의 조명의 종류, 각도, 밝기, 또 그에 따른 그림자, 전반적인 톤 등은 보정만으로는 제어가 불가한 영역이기 때문입니다.

물론 어느정도의 리터칭과 필터를 적용하면 촬영 당시와 완전히 다른 느낌의 이미지를 만들어낼 수 는 있지만, 근본적으로 조명에 의한 이미지 효과에 일정 수준 이상의 변화를 만들어내기 위해서는, 인위적인 조작을 하기보단 차라리 촬영을 다시 잔행하는 것이 여러므로 정신겅강에 이롭습니다. 특히 스튜디오 경험이 없는 일반인 입장에서는 보정으로는 끽해봐야 밝기, 채도, 색조, 대비 등에 손을 댈지언정, 직접 빛의 각도를 고려해 하나하나 빛과 그림자를 묘사하는 수준의 리터칭은 불가능에 가깝습니다. 아니 가까웠습니다. 하지만 이제 스테이블 디퓨전을 활용하면, 일반인도 조명을 다시 구성할 수 있게 되었습니다.

IC-Light 설치 및 모델 다운로드

IC-Light의 IC는 Imposing Consistent의 약자입니다. 따라서 IC-Light는 우리말로는 “일관성 있는 빛을 조사”하는 기술 정도로 볼 수 있는데요, 간단하게, 이미 존재하는 이미지에서 빛의 방향을 고려해 다시 재조명할 수 있도록 해주는 기술입니다.

IC-Light 예시

위 그림은 좌측의 원본 이미지를 IC-Light를 이용해 조명을 다시 넣어준 결과를 보여주고 있습니다. 두 번째, 세 번째 이미지는 각각 우하단의 조명 이미지(흑백)를 입력으로 주고 그에 따른 조명이 적용된 결과입니다.

두 번째 이미지는 직접 이미지 자체의 명암을 고려(하늘이 있는 쪽은 밝게, 건물로 막힌 곳은 어둡게)해 조명 이미지도 영역을 구분해 흑백을 대각선으로 만들어 입력했기 때문에 자연스럽게 우하단으로 그늘진 그림이 생성되었습니다. 반면 마지막 그림은 조명 자체를 극단적으로 비현실적인 방향으로 그려 넣어준 결과로, 당연히 현실에서는 불가능한 조명의 형태라, 결과 이미지를 인지하는 우리의 뇌도 어딘가 어색함을 느끼긴 하지만, 이미지를 작은 구역으로 나눠 자세히 잘 보면, 단순히 밝고 어두움만 대비된 것이 아니라, 밝은 부분은 빛이 비춘 것처럼, 어두운 부분은 그림자가 진 것처럼 표현하고 있다는 것을 볼 수 있습니다.

Custom Node 설치

본문에서는 kijai 제작자의 ComfyUI-IC-Light란 Custom Node를 설치하여 IC-Light 기술을 구현해봅니다. ComfyUI 매니저에서 검색하여 설치하거나, 아래의 깃허브 주소를 이용해 커스텀 노드를 설치합니다.

IC-Light 커스텀 노드 설치

모델 다운로드

먼저 IC-Light를 사용하기 위해 여타 다른 기술들처럼 그에 맞는 모델을 다운로드 합니다. IC-Light는 크게 2가지 사용방식 있으며, 그에 따라 사용하는 모델도 2개로 구분하여 사용합니다. 아래 페이지에 접속해 2개 모델을 다운로드 받습니다.

IC-Light 모델 다운로드
  • fb 모델 (원본이미지 + 조명이미지) : 조명과 프롬프트를 고려해 모델이 배경을 직접 생성
  • fbc 모델 (원본이미지 + 배경이미지 + 조명이미지) : 사용자가 제공한 원본, 배경 및 조명이미지를 모두 고려해 이미지를 생성

다운 받은 모델은 아래와 같이 ComfyUI 설치 위치에서 models>unet 폴더로 이동해줍니다.

IC-Light 모델 복사

UNet을

IC-Light 워크플로우구성

이제 IC-Light를 적용한 워크플로우를 구성해야 합니다. 본문에서는 기본 적인 워크플로우 2개를 구성하고자 합니다. 배경이미지를 사용하는지 여부에 따라 사용하는 IC-Light UNet 모델과 워크플로우에 차이가 있습니다.

FC 모델 적용 워크플로우

FC 모델은 전경(foreground) 이미지와 조명 이미지만 입력하여 이미지를 생성하는 경우입니다. 아래와 같이 워크플로우를 구성하여 사용할 수 있습니다.

IC-Light FC 워크플로우

일반적인 I2I 워크플로우처럼 구성하지만, 중간에 Load and Apply IC-Light 노드를 통해 UNet 모델을 불러오고, IC-Light Conditioning 노드로 전경(원본 이미지)를 입력해줍니다. 조명이미지는 VAE Encoding만 진행한 뒤 바로 KSampler로 전달합니다.

FBC 모델 적용 워크플로우

이번에는 원본 피사체 이미지에 배경 이미지를 따로 입력해 사용하는 경우를 살펴보겠습니다.

IC-Light FBC 워크플로우

FBC 모델의 경우 배경 이미지도 입력값으로 넣어주면서, 동시에 원본 이미지의 피사체를 배경과 확실히 구분(인물만 남기고 배경은 회색처리)해주기 위해 BRIAAI Matting 노드를 활용했습니다. 꼭 BRIAAI Matting이 아니더라도, SegmentAnything 또는 기타 다른 방식으로 진행해도 무방합니다.

맺음말

IC-Light를 사용해본 결과 프롬프트로 빛에 “대한 묘사”를 곁들여주는 것과 그렇지 않은 것을 비교하면 결과물에서 상당한 차이가 발생하는 것을 볼 수 있었습니다. 예를 들어 Sunset, Sunrise, Light rays 등의 빛에 대한 프롬프트를 직접적으로 사용하면, 조명 이미지와 더불어 굉장히 드라마틱한 변화를 연출합니다. 하지만, 프롬프트 없이 조명 이미지만 들어간 경우 조금은 뜨뜻미지근한 변화만 동반되어 큰 차이를 못느끼는 경우가 많았습니다.

또 한가지 아쉬운 점은 아직 SD1.5 버전만 지원하고 있기 때문에 SDXL에서는 사용이 불가하다는 점입니다. 이를 극복하기 위해, SD1.5에서 IC-Light를 적용한 뒤, 이를 업스케일하는 작업을 테스트해보았으나, 업스케일을 한 뒤 이미지의 화질은 상승하지만, 동시에 그 과정에서 IC-Light가 주는 진득한 조명 효과 느낌이 많이 사라지는 단점이 있었습니다. 본래 스튜디오 사진 느낌의 실사 이미지를 생성할 때 큰 도움이 될 것으로 예상하여 기대했는데, 아직은 필자의 스킬이 부족한 탓인지, 원하는 만큼의 퀄리티를 뽑아내기가 어려운 것 같습니다. IC-Light를 활용한 고퀄리티 조명 효과를 구현하거나, 다른 활용 방법을 찾으면 다시하면 번 공유할 수 있도록 하겠습니다.