Usenix ATC '06 생중계 #4: 픽사의 SW 이슈

권순선의 이미지

http://kldp.org/node/70812 의 2부 내용입니다. :-)

Q: SW에 관해 이슈가 있다면 어떤 것이 있을까요?
A: 크게 3가지로 나누어 볼 수 있습니다. 소프트웨어를 유연하게 만드는 것, 디버깅/프로파일링의 중요성, 그리고 멀티쓰레딩입니다.

소프트웨어를 유연하게 만든다는 것은, 각 소프트웨어 개발자가 개발한 소프트웨어 모듈이 다른 소프트웨어들과 잘 연동되어야 한다는 것을 뜻합니다. 어떤 프레임을 만들 때 아트 디렉터가 원하는 내용이 자주 바뀐다는 것은 이미 1부에서 말씀 드렸습니다. 이것을 좀더 자세히 보면 소프트웨어 자체를 새로 만들거나 추가해야 하는 일이 많이 생긴다는 것을 의미합니다. 아시겠지만 요즘은 게임이나 애니메이션이나 사실감을 주기 위해서는 여러가지 효과들이 필요합니다. 그림자도 잘 넣어야 하고... 물리 엔진도 좋아야 합니다. 그런데 이런 모든 경우들에 대해서 애니메이터와 아트 디렉터가 시각적으로 확인하기 위해서는 각종 효과들을 개발해서 GUI로 만들어 바로바로 확인할 수 있도록 해 주어야 하기 때문에 각 소프트웨어 모듈들이 어떻게 데이터를 주고받고, 어떤 인터페이스를 가지고 서로 결합되는지가 아주 중요하고 아주 잘 결합되어야만 합니다. 애니메이터와 아트 디렉터는 소프트웨어 개발자가 아니기 때문에 그사람들에게 소스코드만 던져주고 알아서 빌드하라고 할 수는 없거든요.

디버깅/프로파일링이 중요한 이유는... 저희가 하는 작업이 그 속성상 많은 컴퓨팅 파워가 오랜 시간 동안 필요하기 때문입니다. 아트 디렉터가 원하는 장면을 생성하기 위해서는 오랜 시간 동안 렌더링을 해야 하는데 시간을 절약하기 위해 주로 밤이나 새벽에 렌더링 작업을 돌려 놓고 퇴근하는 경우가 많습니다. 그런데 만약 소프트웨어를 잘못 작성해서 중간에 세그폴트가 난다거나 메모리가 샌다거나 하는 일이 발생해서 렌더링 작업이 중간에 멈추면 어떻게 되겠습니까? 소프트웨어를 고쳐서 렌더링을 다시 해야겠지요? 그렇기 때문에 저희는 개발하는 소프트웨어가 무결하게 동작하도록 하는데 특별히 많은 노력을 기울입니다. 그렇게 하지 않으면 납기(?)를 맞출 수 없거든요. 아트 디렉터나 애니메이터들이 얼마나 변덕이 심한지는 직접 겪어보시기 전에는 모를 겁니다. 완전히 다른 세계에 사는 사람들이라니까요. -_-;; 그래서 메모리가 샌다거나 하는 일이 없도록 하기 위해 purify를 많이 사용하고요, 렌더링을 조금이라도 빨리 하려면 소프트웨어가 빠르게 동작하는 것도 필요하기 때문에 프로파일링 작업도 중요한 부분을 차지합니다. gdb도 많이 사용했었는데 너무 사용하기가 어려워서 처음에 고생 많이 했습니다.

마지막으로, 멀티쓰레딩이 중요한 이유는 하드웨어 환경이 바뀌고 있기 때문입니다. 저희는 새로운 애니메이션을 만들 때마다 소프트웨어를 매번 새로 작성하는 것이 아니고 이미 있는 것이면 그것을 가져다가 사용합니다. 그런데 토이 스토리 시절에는 주로 UP(Uni Processor) 환경에서 작업이 되었기 때문에 멀티쓰레딩은 그다지 고려되지 않았죠. 왜냐면 CPU 클럭수가 빠르게 증가하고 있었기 때문이죠. 그런데 요즘은 어떻습니까? CPU 클럭수를 늘리는 것보다는 멀티코어로 가는 것이 추세이지 않습니까? 그러다 보니 이러한 환경을 효과적으로 사용하기 위해서는 기존에 UP 환경에서 작성된 코드들을 멀티코어 환경에서 좀더 효과적으로 동작하도록 하는 것이 필요합니다. 이 작업은 앞으로 저희가 해야 하는 작업이고요... 아직 완성되지 않았습니다. 'Cars' 개봉하고 나면 좀 쉬려고 했는데 이것 때문에 쉬지도 못하게 생겼습니다. -_-;;

Q: 아트 디렉터나 애니메이터들 변덕이 심하다고 하셨는데 그럼 삽질도 많이 하셨겠네요?
A: 말도 마세요... 'Cars'를 만들면서 저희가 개발해야 했던 프레임이 몇개였냐면요... 대략 600만개 정도였습니다. 그런데 정작 영화에 채택된 프레임은 18만개 정도밖에 되지 않습니다. 즉 1/40 정도만 채택된 셈이죠. 이건 뭐 어쩔 수 없어요. 영화 찍을 때도 보시면 아시겠지만 감독이 마음에 안 들면 계속 찍잖아요. 버려진 프레임들 안에 정말 좋은 효과(effect)들도 많았는데... 팔자려니 해야죠. -_- 다시한번 말씀드리지만 픽사는 소프트웨어 회사가 아니기 때문에 어떤 프레임을 선택할 때 그 프레임에 사용된 알고리즘이 좋다거나, 코드의 양이 작다거나 하는 소프트웨어적인 관점으로 접근하는 것이 아니라서 저희가 봤을때는 정말 멋진 자료구조와 혁신적인 알고리즘으로 쌈빡하게 구현한 프레임들이 스토리 구성 때문에 잘려 나가는 걸 보면서 처음에는 속도 많이 상했죠.

Q: 그렇군요. 오랜 시간 동안 인터뷰에 응해 주셔서 감사합니다.
A: 감사합니다. 'Cars' 많이 보러와 주세요... ^^;

댓글

이한길의 이미지

고맙습니다 잘 읽었습니다..

----
먼저 알게 된 것을 알려주는 것은 즐거운 일이다!
http://hangulee.xo.st
http://hangulee.egloos.com/

----
먼저 알게 된 것을 알려주는 것은 즐거운 일이다!
http://hangulee.springnote.com
http://hangulee.egloos.com

violet_yue의 이미지

저도 잘 읽었습니다. 그리고 ^^ 아기사진이 바뀌었네요

너에게 묻는다

연탄재 함부로 차지는 말아라
너는
누구에게 한 번이라도 뜨거운 사람이었느냐

-안도현- 외롭고 높고 쓸쓸한 中

falaris의 이미지

픽사에 소프트웨어 개발자가 저렇게 적었다니(?)
전 더 많을 줄 알았습니다 ㅡㅡ;; 그리고 개인당 컴터 4대 라니 ...덜덜...

글 잘 읽었습니다!!

--------------@@
젠투교+emacs교로 서서히 가는중!~@

1day1의 이미지

역시 홍보였군요 ^^

F/OSS 가 함께하길.. (F/OSS서포터즈,F/OSS서포터즈그룹)

F/OSS 가 함께하길..

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

흐흐... 재미있습니다. :)

budle77의 이미지

항상 좋은 글에 감사드립니다. ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.