DALL.E inpainting으로 그림 그리기

  • ChatGPT DALL.E에는 그림을 수정하는 기능이 있습니다.
  • DALL.E2부터 공개된 기능으로, 기존 이미지의 일부를 지우고 새 프롬프트를 넣어서 새로 그리는 그림입니다.
  • inpainting이라는 방식입니다. 이를 이용해서 그림을 그릴 수 있겠다는 생각이 들었습니다.

1. DALL.E3 inpainting

  • 프롬프트로 그리는 그림은 그 자체로 매력과 제약이 있습니다.
  • 목표로 하는 그림을 말로 설명하는 것은 매우 재미있는 작업입니다.
  • 그러나 프롬프트를 정확히 동작하게 하는 것은 매우 어렵습니다.
  • 언어 표현의 한계도 있지만 DALL.E라는 AI 모델의 한계, 학습한 데이터의 한계가 있기 때문입니다.
  • inpainting은 먼저 그려진 그림의 일부만을 골라 수정하는 방식입니다.
  • 일부를 고치려다가 전체를 망치는 일도 막을 수 있고,
  • DALL.E에서 그리지 못하는 그림을 그릴 수 있기 때문입니다.
  • 예를 들어, 아기공룡 둘리를 그리려다 실패한 적이 많습니다.
  • 코에 하얀 뿔을 달고 있는 모습이 그려지지 않았기 때문입니다.
  • 예를 보여드리겠습니다.
  • 먼저, 적절히 초록색 귀여운 공룡을 그립니다.

prompt: “a realistic photography of a cute green dinosaur {smiling, chubby}, walking in forest in Jurassic.”


  • 그리고, 이미지를 선택하고 inpainting을 의미하는 붓 아이콘을 선택해서 코를 칠합니다.
  • 이 자리에만 새로 입력하는 프롬프트를 적용하겠다는 뜻입니다.

prompt: “add a rounded white spike on top of the nose”


  • 다른 곳은 모두 그대로 두고 에만 하얀 뿔이 달렸습니다.
  • 빛의 방향과 표현 방식 등이 주변 그림과 어울리도록 그려집니다.
  • 이 방식을 사용하면 그림 한 점을 그릴 수 있지 않을까?
  • 그렇다면 그 과정은 일반적인 회화를 만드는 과정과 비슷하지 않을까?
  • 한번 해볼만할 가치가 있지 않을까? 싶었습니다.

2. inpainting으로 그림 한 점 그리기

2.1. 바탕 설정

  • 그림을 그려나가는 과정이라면, 어설픈 장면보다 그림을 그리면 좋을 것 같았습니다.
  • 하늘색 벽에 걸린 하얀 캔버스를 먼저 그렸습니다.
  • 이젤에 놓인 캔버스도 생각해봤지만, 전체 공간에서 캔버스가 차지하는 공간이 작아질 수 밖에 없습니다.


  • 그리고, 본 그림이 놓일 부분을 선택합니다.
  • 새로운 그림이 그려질 자리이기 때문에 기존 그림을 지우는 그림마저 듭니다.
  • 나무 선반에 짙은 남색의 도자기 꽃병을 올립니다.


  • 생각보다 선반이 너무 짧게 나왔습니다.
  • 머리 속에는 가로로 긴 선반이 있었는데, 막상 그려진 걸 보니 나쁘지 않습니다.
  • 의외성을 받아들이고 이 공간을 재밌게 꾸며보기로 합니다.

2.2. 꽃과 꽃잎

  • 같은 방식으로 꽃병 위를 선택하고 노랑, 빨강의 꽃을 만듭니다.
  • 처음 그린 그림이 마음에 들지 않았습니다.
  • 앞선 그림으로 올라가 작업하기보다, 그림 위를 다시 선택하고 inpainting을 합니다.
  • 어차피 지우는 거니까요 :)


  • 프롬프트의 “flower”를 “roses”로 교체한 뒤에 조금 더 마음에 드는 그림이 나왔습니다.
  • 의도적으로 꽃만 그렸기 때문에 이제 이를 들러싼 잎을 풍성하게 담고 싶습니다.
  • 장미 잎은 동그랗고 작지만, 길다란 다른 장식 잎들이 함께 꽂혀 있다는 설정을 하고 프롬프트를 입력했습니다.


  • 그런데 잘 작동하지 않았습니다.
  • 먼저 그린 장미때문인지, 작고 귀여운 꽃잎만 그려집니다.
  • 여러 번을 해도 마찬가지입니다.
  • 잎을 먼저 그렸으면 어땠을까 싶습니다. 달랐을 것 같습니다.
  • 아쉬운대로 옆 공간을 다르게 활용하기로 합니다.


2.3. 나비와 고양이

  • 꽃 주변에 날아든 나비를 담습니다.
  • 생각보다 제법 어울리게 나비 세 마리가 놓였습니다.
  • 아래 공간을 어떻게 채울지 잠시 고민합니다.


  • 고양이가 그림을 향해 점프하는 모습이 담기면 좋겠다는 생각이 듭니다.
  • 그림 밖을 지나가던 고양이가 나비를 보고 점프하는 모습을 프롬프트로 입력합니다.
  • 의외로 여러 차례 아무것도 그려지지 않아서 재시도를 해야 했습니다.
  • 겨우 그려진 그림은 영 마음에 들지 않습니다.


  • 다시 영역을 선택하고 수 차례 반복하고 나서야 고양이가 의도대로 그려졌습니다.
  • 그러나 그림자가 제대로 표현이 되지 않아 합성처럼 보입니다.
  • 고양이 그림자가 드리워질 부분을 선택하고 그림자를 추가하라는 프롬프트를 줍니다.


2.4. 최종

  • 여러 차례 시행착오를 거쳐 얻은 최종 그림입니다.
  • 여전히 고양이가 합성처럼 느껴지지만, 전반적인 캔바스 속 그림 느낌과 비슷하기도 합니다.
  • 뒷다리-엉덩이-꼬리 아래로 이어지는 부분의 그림자도 용인될 만큼은 추가되었기에 이 정도에서 멈추었습니다.
  • 그럼에도 불구하고 그림 속에 있을만한 고양이를 무리해서 현실로 끄집어 낸 느낌이 적지 않습니다.
  • 그림의 톤이 전체적으로 통일성있게 지정되다 보니 그런 것 같습니다.


  • inpainting만으로 그림을 그린 것이 이 그림이 처음은 아닙니다.
  • 이틀 전(5/17) 오후에 가능성을 확인하고 아쉬웠던 점(캔버스 크기, 디테일)를 보완해서 다시 작업했는데
  • 그 때나 지금이나 3차 이후의 inpainting이 마음같이 잘 되지는 않는 것 같습니다.


  • inpainting 성능 개선이 필요한 것일 수도 있고,
  • 제가 미숙한 것일 수도 있습니다.
  • 그럼에도 불구하고 원 포인트 수정을 하기에 가장 좋은 도구,
  • 프롬프트 엔지니어링의 단점을 보와할 좋은 도구인만큼 종종 사용해보려 합니다.

3. 한번에 그린 그림과의 비교

  • 저 단계들에서 사용한 프롬프트를 모두 넣고 한 번에 그림을 그려보았습니다.
  • inpainting을 반복하며 생각보다 시간이 많이 소요되었기에,
  • 차라리 한 번에 그린 그림이 낫지 않나 하는 의구심이 들었습니다.


  • 고양이가 캔버스 밖에 있다는 사실은 확실히 더 잘 전달됩니다.
  • 그림 안은 그림처럼, 그림 밖은 실사처럼 연출되었기 때문입니다.
  • 뒷발 아래 드리워진 그림자도 더 자연스럽습니다.
  • 더 연습을 해봐야 겠지만, inpainting은 둘리의 뿔처럼 포인트에만 적용을 하는 게 좋을 것 같습니다.


도움이 되셨나요? 카페인을 투입하시면 다음 포스팅으로 변환됩니다

Share