Blender on GPGPU 序

 この記事は GPGPU Advent Calender の9日目の記事です。
昨日の ii.takuさんのLLVM meets GPU again!からの続きになります。



 最初に断っておきますが私はGPGPUプログラマでもないですし、Blenderデベロッパでもないので
本記事には多分に、「嘘、大げさ、紛らわしい」を含んでいます。*1

はじめに

 さて今までの記事で、OpenCL/CUDA等のGPGPU言語や
thrust等のライブラリ、LLVM等のコンパイラ等のプログラミングのお話が続きましたが
私はそんなの話せないので、少し視点を変えて


 GPGPUが活用されているアプリケーション等について、
簡単に紹介っと、思いました。

Blenderについて

 で、どのようなGPGPUが活用されているアプリについて紹介するかですが、
今回は3DCGアニメーション統合環境アプリケーションのBlenderについて
かるく紹介して見ようと思います。


 Blenderについて詳しくしりたい方は以下を参照してください。

なんでBlenderなんですか(´・ω・`)

 GPGPUが活用されているアプリ (・`ω´・ ○)だからです(終


って、簡単すぎるので何点か補足。

  1. OSSであるから
    1. GPLですがソースコードを参照できるのはやっぱり嬉しいですね
  2. GPGPUが活用されたレンダラ実装のCyclesがあるから
    1. cpu/cuda/openclと有りますので比較の観点からも有用と思われます
  3. 開発が活発であるから
    1. ここ最近のGoogle summer of codeで関連プロジェクトが採択されています

 で、百聞は一見にしかずといいますし
以下にCyclesレンダラのデモ動画のリンクをはっておきます。

Cycles


Cycles with GPU


 どうでしょう?
realtimeでレンダリングされているのが確認できると思います。

Cyclesの何が嬉しいの(´・ω・`)

 モデリングレンダリングが同じ表示結果 (・`ω´・ ○)が嬉しいです(終


って、簡単すぎるので何点か補足。

  1. realtimeでレンダリング結果が見えること
    1. realtimeで表示できるようなったのは普通にすごいです
    2. といっても、他のレンダラより優れているわけでもありません
    3. 途中経過でもある程度の表示になるアルゴリズムであるだけです
  2. モデリング/レンダリングのサイクルを小さく回せること
    1. Ruby/Python等のREPL環境みたいに、コーディング/コンパイルな感じです
    2. といっても、他のレンダラより優れているわけでもありません
    3. 途中経過を表示で作成手法の幅が広がっただけです


 って、なんかDisってるような文面になりましたが
まあ有用なレンダラであることは間違いありません。


 C言語コンパイルで最後に文法エラーとか吐かれていたのが
エディタの裏で文法チェックとかしてくれたら嬉しい^^ですよね!、ね!!


 そんか感じです><

ソースコード取得

 上記デモでCyclesの実装がどうなってんだろうと、興味がわいてきましたね?
なんとソースコードが取得できます。*2


 ソースコード取得は簡単で、お手持ちのsvnでcoして見ましょう。

cd ~
mkdir blender-svn
cd blender-svn
svn co https://svn.blender.org/svnroot/bf-blender/trunk/blender

 まずは簡単にフォルダ構成を見てみましょう。
一覧は以下の感じです。

$ tree -d -L 2
.
├── build_files
│   ├── build_environment
│   ├── buildbot
│   ├── cmake
│   ├── package_spec
│   └── scons
├── doc
│   ├── blender_file_format
│   ├── build_systems
│   ├── doxygen
│   ├── guides
│   ├── license
│   ├── manpage
│   └── python_api
├── extern
│   ├── Eigen3
│   ├── binreloc
│   ├── bullet2
│   ├── carve
│   ├── colamd
│   ├── glew
│   ├── libmv
│   ├── libopenjpeg
│   ├── libredcode
│   ├── lzma
│   ├── lzo
│   ├── recastnavigation
│   └── xdnd
├── intern
│   ├── audaspace
│   ├── boolop
│   ├── bsp
│   ├── container
│   ├── cycles
│   ├── dualcon
│   ├── elbeem
│   ├── ffmpeg
│   ├── ghost
│   ├── guardedalloc
│   ├── iksolver
│   ├── itasc
│   ├── locale
│   ├── memutil
│   ├── mikktspace
│   ├── moto
│   ├── opencolorio
│   ├── opennl
│   ├── raskter
│   ├── smoke
│   ├── string
│   ├── tools
│   └── utfconv
├── release
│   ├── bin
│   ├── darwin
│   ├── datafiles
│   ├── freedesktop
│   ├── scripts
│   ├── text
│   └── windows
├── scons
│   └── scons-local-1.2.0.d20090223
└── source
    ├── blender
    ├── blenderplayer
    ├── creator
    ├── gameengine
    ├── icons
    ├── tests
    └── tools

70 directories

 Cycles関連は./intern/cyclesに
Blender本体関連は./source/blenderに配置されています。

まとめ

 というわけで、Blender/Cyclesについての簡単な紹介と
コード全体の俯瞰を行いました。


 紹介ということで軽く流しましたが、
いざ上記コードをbuildしようとすると結構依存関係が有りますので
build環境を整えるのも一苦労*3だったりします。


 詳しくは、こちらのBlender developmentのページ等を参照してみてください。


 次回*4は、Cyclesの内部実装をみてみましょうか。

*1:JAR○への相談は勘弁してくださいw;

*2:OSSですからね^^

*3:基本最新環境を求めるのでw;

*4:続くといいですねw=