Hatena::ブログ(Diary)

新穴日記

2012-01-16

TokyoDemoFest2012に参加しました

00:01

昨年、日本初のオフラインデモパーティということで行われたTokyoDemoFest2011でしたが、今年もめでたく開催となりました。

しかも、場所は秋葉原MOGRA、日程は二日間と前回より大幅にグレードアップした形でした。

僕もオーガナイザーの一人として、また、一参加者として非常に楽しませていただきました。

とりあえず二年連続でやったので、このままうまいこと毎年やっていけたら日本のデモシーンも活気づくのではないかな?と思います。

新人が二人も作品を出していましたしね。しかし、反省点が多かったのも事実。来年以降はもっともっと質の高いパーティにしていけたらと思います。(作品もね)

TokyoDemoFest 2012

僕の作品とか

2011-07-09

GAで習作作ったので公開したりしました

16:59

課題でGA使って何かつくれーっていわれたので何か作りました。

こんな感じ。

f:id:h013:20110709165558p:image

個体が九個表示されるので、好きなのを選ぶと、それを親にして新しい形状の個体を作ります。

まあ、人間が評価関数をやる感じの適当なGAですね。淘汰のプロセスとかは結構適当ですがそれっぽく遺伝していくので面白いもんです。淘汰よりもむしろ交叉がキモなんですかね。知りませんが。

ただ、形状バリエーションをもうちょっと増やした方が良かったかな、とは思います。まあ修正することはないと思いますが・・・。

公開したページ

2011-06-25

AO BenchをOCamlに移植しました

03:53

AO Bench(http://code.google.com/p/aobench/)というAmbient Occlusionによるレンダリングを行うベンチマークがあり、結構いろんな言語に移植されてるのですが、OCaml版がなかったので移植しました。

ocamloptでコンパイル、Core2の2.66GHzで6.6 secといったところでした。かなりベタな移植なので、うまいことやればもっと高速になるかもしれません。

続きを読む

2011-05-19

Line Space Gathering for Single Scattering in Large Scenesを読んでちょっと実装しました

10:50

さて、私は今学部でいろいろな研究室を回り、論文を読んでは実装するという課題を行っているのですが、初回の課題はSIGGRAPH2010の論文Line Space Gathering for Single Scattering in Large Scenesを読みました。

この論文はレンダラ系論文で、何らかの媒質中(たとえば埃とか、微小の粒子に満ちた大気とか)を通る光の散乱の高速な計算手法の提案となっています。

ただし、論文手法で扱えるのはまだ、均質な媒質中における単一散乱に留まっています。

従来手法で有名なものとしては、間接照明を高精度、高効率に計算するPhoton Mapping法の拡張、Volumetric Photon Mappingなどがあるそうです。

論文手法の面白いところは、線分同士の近傍探索を高次元空間に変換して候補の限定を高速に行っているところでした。

以下、具体的な手法について簡単にまとめ。

  1. 設定した光源から光線発射
    • まず、光源から光線発射します。このへんは普通のレイトレとかと同じで、別の媒質とぶつかったら適当に反射したり屈折したりします。このとき、たとえば、光源→物体A→無限のかなた、みたいに光線が通った場合、光源→物体Aの光線と、物体A→無限のかなた、みたいにして線分(半直線)の形でどこかに情報を記憶しておきます。
  2. 線分をPlücker coordinatesによって六次元空間内の点に変換
    • Plücker coordinatesという概念があります。これを用いると、ある線分と線分の距離の下界を、六次元空間における平面と点の距離として求めることができます。
    • 散乱光の計算をするとき、視線から発射した視線分の近くを通る、光線から発射した光線分の集合を求めることで実現されます。通常、ある点の近くの点を求める手法としては、空間を分割することによるデータ構造(kd-treeやBSPtreeなど)が用いられます。しかし、線分間の近傍探索となると、線分が空間の大部分にまたがるため、うまく空間分割されたデータ構造が作れません。
    • そこで、六次元空間内の点や平面に変換することで、うまく空間分割されたデータ構造を作る、というのがこの論文のキモになっています。
  3. 設定した視線から視線分発射
    • 上と同様に、レイトレの要領で視線から視線分を発射し、画像の一ピクセルピクセルの色を決定していきます。
    • この際、散乱光の計算として、視線分の近くを通る光線分を求めるわけですが、上述したように、視線分をPlücker coordinatesを用いて六次元空間内の超平面に変換し、同じく六次元空間内の点に変換された光線分との距離を計算し、視線分の近くを通る光線分を高速に特定します。

この手法の優れた点としては、Photonを飛ばして保存するのに比べ、Line Segmentを飛ばして保存するため、メモリ効率が良く、GPU化が容易になった、という点らしいです。

今回私は、論文手法をおおむね実装しました。ただし、GPU化とより効率的に空間分割されたデータ構造の生成は行っていません。以下、適当にレンダリングした結果。

f:id:h013:20110519104830p:image

f:id:h013:20110519104829p:image

f:id:h013:20110519104828p:image

nanikagaokasiinanikagaokasii 2011/05/19 11:58 すげぇ

2011-04-28

C++で画像とか入出力のまとめ

10:56

最近CGとかやってるんですが、結果画像を画像ファイルで保存したりしたいわけです。

まあ、適当にやるならPPMとかでもいいんですけど、PNGとかで保存したいなあ、という需要もあるわけですね。

そこで、マルチプラットフォームっぽいC++用の画像入出力ライブラリについて、集まった情報を自分用にまとめてみました。Twitterで教えてくれた人はありがとうございました!

  • boost::gil
    • Adobeさんが作ったGILライブラリです。最新のboostにはちょっと昔のバージョンが統合されています。ただし、単体ではPNGとかの読み書きはできず、libpngとかを別途入手する必要があります。VisualStudioだとlibファイル生成時のランタイムライブラリの指定などをうまくそろえないとクラッシュします。

faith_and_bravefaith_and_brave 2011/04/28 12:33 今だとOpenCVが主流な気がしますね。

h013h013 2011/04/28 14:01 お、OpenCVでも読み書きできるんですか!ちょっと調べてみますー