椿の日記

たぶんプログラムの話をします

プログラミング

MySQLの日本語表示の話

なんか日本語が表示できないなあ、と思ってたら凄く単純な話でした。これをやっておかないとならないようです。 quickQuery conn "SET NAMES utf8" [] こうしないと、日本語文字の部分が?に化けてしまいます。これはmysqlの関数がやっているようで、Haskell…

Haskellの実行速度

haskell vs その他の言語 - ながとの日記 という記事を見て、へぇーと思ってみてたのですが、元記事のコードの次の2つが何故これほどまでに違うのか、ちょっと気になったのでコンパイルだけして実際に確認してみます。(2つ目のはBangPatternの言語拡張のとこ…

Haskellでこの問題を解いてみた②

同じ人が別の問題を作っておられたようなので、解いてみました。ぷよぷよ19連鎖 import Data.Array import Data.List type Point = (Int,Int) type Field = Array Point Char type Route = [Point] isLegalPuyo :: Char -> Bool isLegalPuyo '\n' = False is…

Haskellでこの問題を解いてみた

web巡回してたらこんなページを見つけたので、解いてみました。人材獲得作戦・4 試験問題ほか import Data.Array import Data.Maybe import Data.List data Cell = Space | Wall | Start | Goal | Road deriving (Show, Eq) type Field = Array (Int,Int) C…

Haskellからmysqlを実行する

Haskellからmysqlを叩きたくなったので調べていたのですが、かなり骨が折れる作業になりました。一筋縄に行かない問題が次から次へと…。しかしなんとか解決できたので、忘れないように覚書を残しておきます。 ビルドするのはThe HDBC-mysql packageです。パ…

レイのフラスタムパケット化はパストレに弱い?

Kirill Garanzhaの手法の続報で「パストレにおいて性能が出ない」ということが書かれたpptを見つけました。何故遅いのか理由の記述を探しているのですが詳しい記述が見当たらないなあ。 ただの推測ですが、フラスタムのパケット化を中心としたアルゴリズムな…

レイの境界フラスタムの構築の仕方

Large Ray Packets for Real-time Whitted Ray Tracing, Ryan Overbeck Ravi Ramamoorthi William R. Markフラスタムの構築手法のところだけ。大きく分けて3通りの構築の仕方があります。 1次レイに関するフラスタムの構築 点光源のシャドウレイに関するフ…

GPU向けのBVH構築の手法

次にこれを読んでいます。Fast BVH Construction on GPUs, C. Lauterbach and M. Garland and S. Sengupta and D. Luebke and D. Manocha, EUROGRAPHICS 2009 http://luebke.us/publications/eg09.pdfとりあえずSAHを利用する場合のみ読んでます。 主な並列…

リアルタイムでレイトレ用のBVHを構築するっていう論文

On fast Construction of SAH-based Bounding Volume Hierarchies, --- Ingo Wald, Proceedings of the 2007 Eurographics/IEEE Symposium on Interactive Ray Tracing http://www.sci.utah.edu/~wald/Publications/2007///FastBuild/download//fastbuild.pd…

レイトレを幅優先探索でGPUで処理するっていう論文

読み終えたので、忘れないようにメモ書きしておきます。GPUによる、高い並列性を持つレイトレーシングの手法の一つです。Fast Ray Sorting and Breadth-First Packet Traversal for GPU Ray Tracing, Kirill Garanzha and Charles Loop http://research.micr…

シェーダデバッガをONにするとフレームレートが下がる件について

ただの覚書ですが、原因不明のフレームレート低下に見舞われてしまったので記録しておきます。 DirectXにはシェーダのデバッグ機能があります。①/Zi /Od コンパイルオプションを付けてシェーダをコンパイル ②DirectX Control Panelで「Enable Shader Debuggi…

colladaを使ってみる

colladaを読み込むにはcollada domというのを使うのですが、2点気をつけることがあったので単なる備忘録。・daeファイルのバージョンとcollada domのsdkのバージョンは合わせる必要があります。(上位互換/下位互換があるわけではないようです) ・colladaの…

CUDAを使ってみる

次はフォトンマッピングをしようかと思ったのですが、気分転換にCUDAを勉強してみようと思います。とりあえずv4.0のSDKをインストールしたあとにハマった点だけ簡易まとめ。 cutil cutilはDirectXで言うところのDXUTのようなユーティリティのようです。 自分…

疑問

パストレで、拡散面の輝度を直接照明と間接照明に分けて混ぜ合わせるときの割合を、反射位置を基準に光源が占める立体角によって求めました。でも、光源が点光源だったらどうするんだろう。点光源ということは面積を持たないわけで立体角もなにも求めらんな…

Image Space Photon Mapping(ISPM)を読んでみたが

http://graphics.cs.williams.edu/papers/PhotonHPG09/今見た産業 フォトンの1次反射はGPUで計算して残りはCPUで計算するよ フォトンの影響範囲を適当なジオメトリで近似してラスタライズして求めるよ 最後はカメラからみた視点で(G-Bufferを使って)ラスタ…

直接照明再び

照明方向の立体角の計算式を間違えてた。照明の傍で反射したときに照明へ飛ぶ確率が実際よりも多くなり(てか1.0を超えていた)、それが影響して白とびしてたらしいです…。追記:一晩放置してレンダリングしてみた。流石に綺麗

FLOWERING NIGHT 2011でそれどころではない

行ってきました新木場STUDIO COAST。いやー楽しかった。で、パストレの話の続きなんですけど、とりあえずt-potの流れで直接照明と間接照明に分けて積分する方法をやってみたのですが、なんか上手くいきません…。白いブツブツが出ている。何でだろうと思って…

次は何をしよう

レンダリング全ステップが終わらないと結果が分からない構造だったのを少しずつ結果が分かる構造にするとか、レンダリングスレッドで計算してメインスレッドは止めないようにするとか、細かい問題の対策を中心に実装してました。予定では、ここまでやったら…

屈折の式を修正したら

512K回の反復で320x240を計算させてみた。計算時間8時間(笑) でも大分綺麗になった!あと、屈折の時の衝突判定が間違っていて、球体の内部から外に出る時にレイと球の衝突を考慮してなくて貫通してしまっていたので、それも修正しました。そしたら鏡球に映…

間接照明

t-potを見たりしながらモンテカルロ積分による光線追跡法を実装してみました。8192回の反復では全然足りなかった。しかも重すぎるので160x120… でもちゃんと集光模様が出るようになったし、精度とか除けば一応は出来てるのかなー。リアルタイムレンダリング…

照明改善

距離の二乗に反比例するように光の加減を変えたり壁の色を少し変えたり。あ、それっぽくなった。

色々間違ってた

なんというか残念なことに屈折方向を求めるところで代入してからの計算を間違えていたorz。リファレンス画像を確認しつつ修正。というか鏡面反射ならともかくガラス球とかマジマジと見たことないから屈折の方向とか分からんよー。あと点光源にしてみた。でも…

屈折

昨日は例大祭だったのでお休み。本日は改めて屈折を試してみました。 まず、法線ベクトルNと、入射ベクトルLが作る平面を考え、その平面上で法線ベクトルNに直交する単位ベクトルEを求めます。L-(L・N)N の長さは sinθ なので、これをsinθで割って単位ベクト…

反射

ソースが長いのでいい加減に画像だけに…。 鏡面反射する方向ベクトルを求めて、そちらに向けて再帰的にTraceRay関数を呼び出して、反射項を求めました。鏡面反射ベクトルは、衝突した位置の法線をN、レイが飛んでくる方向をRとすると、2*(R・N)N - Rで求まり…

boost::variantでデータ構造を書き換え

boost::variantを利用してシェイプクラスを抽象的にします。 typedef boost::variant<Sphere,Plane> Shape; enum SHAPE_TYPE { SHAPE_TYPE_SPHERE, SHAPE_TYPE_PLANE, }; struct Scene { std::vector<Shape> shapes; std::vector<Vector3> directionalLights; }; 関数型言語に慣れ始めると</vector3></shape></sphere,plane>…

影を追加する

シャドウバッファとかの元になってるやつ。流石にCPUの手抜き実装だとらくちんですね… /* レイと球の交差位置取得。 */ bool Test_Ray_Sphere( const Vector3& p0, const Vector3& v, const Sphere& s, float* out_t ) { Vector3 m = p0 - s.p; // tについて…

複数のオブジェクトの表示

複数のオブジェクトを表示するので、Sceneオブジェクトを作って、最近傍衝突点を返す関数を作る。 struct Scene { std::vector<Sphere> spheres; std::vector<Plane> planes; std::vector<Vector3> directionalLights; }; struct Contact { Vector3 p; Vector3 n; float t; }; Scene </vector3></plane></sphere>…

ディフューズシェーディング

そして何の変哲も無いディフューズシェーディング。 /* レイと球の交差位置取得。 */ bool Test_Ray_Sphere( const Vector3& p0, const Vector3& v, const Sphere& s, float* out_t ) { Vector3 m = p0 - s.p; // tについての二次方程式(at^2 + 2bt + c = 0)…

とりあえずレイトレース

http://d.hatena.ne.jp/mokehehe/20090716/raytracer こちらの記事を参考にしながら、レイトレースの実験を開始しました。記事に習って、レイが正しく飛ばせているかどうかの実験からです…。そういえば、初めてDirect2D使った。意外に便利かも。ウィンドウ作…

QGK

急にグローバルイルミネーションに興味が出てきたので、の略。 というわけでフォトンマッピングをやってみたいのですが、まず根本的によく分かってないわけです。 オーム社のフォトンマッピングの本を買ってはみたものの、なんか知らん方程式出てきた、放射…