Stable Diffusion 을 사용해서 이미지를 생성하다보면 가끔 글씨가 포함되는 경우가 있습니다. 하지만, 대부분의 경우 무슨 내용인지 모르는 경우가 대부분이죠.
이번 글에서는 스테이블 디퓨전 ControlNet을 사용해서 텍스트를 만드는 방법을 알아보겠습니다.
방법 1 : ControlNet과 txt2img 사용
1. 아래처럼 검은 바탕에 흰색 글씨의 이미지를 만듧니다. 그림의 크기는 768x512 입니다.
2. AUTOMATIC1111 에서 txt2img 페이지를 엽니다.
3. ControlNet 부분을 펼치고 위에서 만들었던 이미지를 불러옵니다. 이 이미지는 depth map으로 사용합니다. Depth map에서 하얀색이 앞쪽을 나타내므로 글씨가 앞으로 튀어나오는 효과가 만들어집니다.
4. 콘트롤넷 부분을 아래와 같이 설정합니다.
Enable: Yes
Pixel Perfect: Yes
Control Type: Depth
Preprocessor: None
Model: control_xxxxx_depth
5. 시각적 효과를 나타내는 프롬프트를 입력합니다. 다음은 예입니다.
water, water droplet, shadow, rim lighting, reflection, sunset
6. 이미지 크기를 입력합니다. 이때 이미지의 가로 세로 비율이 위에서 만들었던 이미지와 동일하게 만들어줍니다.
Width: 768
Height: 512
7. 스테이블 디퓨전 체크포인트 파일을 선택합니다. 이번에는 Deliberate 체크포인트를 사용했습니다.
8. [Generate] 버튼을 눌러줍니다. 아래는 그 결과입니다.
참고로, 아래는 Water 글씨 콘트롤넷은 적용하지 않고, 그냥 프롬프트만 넣었을 때의 결과입니다. 물방울이 정말 예쁘게 나오네요.
===
처음에는 Deliberate모델을 다운로드 받고 싶지 않아서, 그냥 가지고 있던 ChilloutMix, Anything v4.5, henmixReal 등을 사용해 봤는데, 그다지 효과가 좋지 않았습니다. 그렇다고 Deliberate 모델이 가장 좋다는 건 아니니까 직접 실험해 보는 것도 좋을 것 같습니다.
또한 한글로도 테스트해 봤습니다. 그런데, 한글은 네모난 각진 폰트가 대부분이라, 위의 결과물처럼 예쁘게 나오는 경우가 드물었습니다. 아래는 HY견고딕 폰트를 사용해서 생성해 본 결과입니다.
그래서 좀 더 시험해 봤습니다. 폰트는 [문체부 훈민정음체]를 사용했고요, 아래와 같이 설정했습니다. ControlType을 Depth로 설정하면 Preprocessor가 depth_madas로 설정되고, 모델은 control_xxxx_depth로 자동 설정되는데, Preprocessor를 눌러보면 [none, depth_leres, depth_leres++, depth_midas, depth_zoe]등을 선택할 수 있습니다. 아무거나 선택한 뒤, 가운데 있는 별 표시를 눌러보면 원본 이미지 옆에 전처리한 결과가 나타납니다. 이걸 보면서 제일 적당하다 싶은 걸 선택하시면 좋습니다. 밝은 색은 앞쪽으로 배치된다는 것을 기억하세요.
저는 아래와 같이 전처리기를 depth_zoe로 선택하는 것이 가장 좋아보였습니다.
아래는 프롬프트를 약간 수정해서 생성한 결과입니다.
water, water droplet, rim lighting, reflection, sky
water, water droplet, rim lighting, ripple, splash, wave
다른 예제
(폰트: Great Vibes)
프롬프트: honey, honey pot, honey dripping, bokeh, bees, drop shadow, rim lighting
모델: Deliberate v2
Control Weight: 0.8
Starting Control Step: 0
Ending Control Step: 1
Preprocessor: depth_zoe
(폰트: Lucida Handwriting)
프롬프트: fire, melting, drop shadow, rim lighting, burning woods
모델: Deliberate v2
(폰트: Lithos Pro Regular) : 두꺼운 폰트일 수록 좋네요.
프롬프트: bread on kitchen table
모델: Deliberate v2
Ending Control Step: 0.6
Preprocessor: None
방법 2 : 다중 ControlNet 사용
여기에서는 ControlNet을 여러번 사용하는 방법으로 텍스트 효과를 만들어 봅니다. 이 때 두번째 ControlNet은 텍스트에 대한 배경을 잡는 데 사용합니다.
1. 첫번째 ControlNet(Unit 0)에서는 방법 1에서 설정한 것과 동일하게 설정합니다.
2. 두번째 ControlNet(Unit 1)에서는 아래와 같은 배경 이미지를 넣어줍니다. 계속 말씀드린 것처럼 밝은 곳일 수록 앞쪽이니까 아래쪽이 앞으로 튀어나온 배경이 됩니다.
3. Unit 1 ControlNet 설정을 Unit 0와 거의 비슷하게 설정합니다. 다만, ControlWeight와 Ending Control Step은 낮췄습니다. Ending Control Step을 이렇게 낮추면 앞쪽에서는 배경을 따르겠지만, 그 이후에는 자유롭게 생성되는 부분이 많아지겠죠.
Enable: Yes
Preprocessor: None
Model: control_xxxx_depth
ControlWeight: 0.5
Ending Control Step: 0.26
지금까지 설정한 내용은 아래와 같습니다. Unit0는 글씨를 쓰는데, 전처리기를 사용하지 않도록 했습니다.
배경부분 Unit 1의 설정은 아래와 같습니다. 여기에서도 전처리기는 사용하지 않도록 했습니다.
4. [Generate] 버튼을 누르면 이미지가 생성됩니다. 아래에 보시는 것처럼 글자가 평면위에 있는 형태로 배열되었네요.
방법 3: 기존의 이미지를 배경으로 사용하는 방법
여기에서는 기존에 가지고 있는 이미지를 배경으로 삼아 텍스트 효과를 만드는 방법을 알아보겠습니다. 다만, 인공지능의 특성상 배경 이미지가 그대로 사용되는 게 아닙니다.
1. Unit 0는 위와 동일하게 설정합니다. 텍스트 이미지와 Prompt는 아래와 같습니다.
프롬프트 : rocks, sunset, shadow
2. 사용하고자 하는 배경 이미지를 찾습니다. 구글에서 저작권없는 이미지로 검색해서 적당한 것을 찾으면 됩니다. Unsplash 또는 Pixabay 를 사용하셔도 되고요. 아래는 예입니다.
3. 이 배경 이미지를 두번째 ControlNet(Unit 1)에 넣고 아래와 같이 설정합니다. 여기에서도 ControlWeight와 Ending Control Step을 줄였습니다.
Enable: Yes
Preprocessor: depth_zoe
Model: control_xxxx_depth
ControlWeight: 0.5
Ending Control Step: 0.26
제 설정 값은 아래와 같습니다.
아래는 생성된 결과입니다. 배경이 완전히 무시된 건 아니지만, 배경 이미지로 올린 것과 닮은 것도 아니네요. 위의 설정 값은 제가 여러번 돌려서 얻은 겁니다. 생각하는 이미지와 어울리는 값을 찾기위해 어느 정도의 시행착오는 거쳐야 할 것 같습니다.
마지막으로 레고 매니아로서.... 바로 위의 방법을 사용해서 만들어 봤습니다.
설정은 아래와 같습니다. 프롬프트는 간단하게 "lego bricks, scattered on the floor, studio lighting"라고만 입력했습니다.
이상입니다. 생각보다 텍스트에 효과를 입히는 게 어렵지 않아 놀랍습니다. 디자이너라면 재미있게 활용해 볼 수 있겠다 싶네요. 개인적으로 이 글에서 다중 ControlNet을 사용하는 방법도 배울 수 있어서 좋았습니다. (이 글은 https://stable-diffusion-art.com/text-effect/ 를 기본으로 하여 제 생각에 따라 편집했습니다.)
민, 푸른하늘
- Stable Diffusion 인공지능 이미지 생초보 가이드
- Stable Diffusion 대표 UI - AUTOMATIC1111 설치방법
- Automatic1111 GUI: 초보자 가이드(메뉴 해설)
- Stable Diffusion에 대한 기본적인 이론
- ChatGPT로 스테이블 디퓨전 프롬프트 만들기
- Stable Diffusion - 인페인트 가이드
- Stable Diffusion - 모델에 대한 모든 것
- Stable Diffusion - LoRA 모델 사용법
- Stable Diffusion - ControlNet 사용법(1)
- Stable Diffusion - ControlNet 사용법(2)
- Stable Diffusion - 하이퍼네트워크 사용법
- Stable Diffusion - AI 확대도구 사용법
- Stable Diffusion - 구역분할 프롬프트 사용법
- Stable Diffusion으로 멋진 이미지 만들기