拡散反射光と鏡面反射光の計算結果をそれぞれテクスチャーに保存しておいてキューブマッピング + マルチテクスチャーでレンダリングしているだけ。キューブマッピングで使うテクスチャーは自作ツールで生成した。シェーダーは以下の通りすごく単純。特定の条…
前回作ったシェーダーに単純なスポットライト効果を追加してみた。光源ベクトルの計算を Vertex Shader ではなくFragment Shader で行うことに気づかなくて思いのほか手間取ってしまった。
Phong Shading + Projected Planar Shadow GLSLでシェーダープログラミング始めた。今後はレイトレは一旦休止してリアルタイムレンダリングに力を入れていく予定。個人的には、フォトリアリスティックとは別の路線を探っていきたいと思ってる。
Pythonによる習作。Stochastic Sampling と Monte Carlo Method を検証するサンプルコードが欲しかったので作ってみた。 Area Light ( 16 shadow rays per eye ray ) Ambient Occulusion
Template Metaprograms 前回に引き続いて再びC++Reportから。今度はテンプレートメタプログラミング(TMP)の記事を読んでみた。TMPとは、簡単にいうと、テンプレートを特殊化するプロセスを応用してコンパイルと同時に実行結果を生成するテクニックといって…
今更ながらC++を学んでいる。単なるOOP機能を備えたCとしてではなくC++固有の機能をもっと活用しようと思ったのがきっかけ。巷ではリーナス・トーバルズ氏のようにC++をボロクソにけなす人達がいるけれど、Cは基本的なデータ構造を扱う標準ライブラリが存在…
最近、マルチスレッドを使ったプログラムを書くことがあって、これを機にオライリーの「Pthreadsプログラミング」を読んでみました。本書はタイトルの通りPOSIXスレッドAPIの解説書ですが、マルチスレッドプログラミング自体の概要を押さえるのにも役に立つ…
旧Wavefront Technologies 社の OBJ 形式で保存された3DモデルデータからCコードを自動生成するツールを作成したので公開します。 http://homepage.mac.com/radio_nights/files/obj_parser.tar.gz 次のように引数に .obj ファイルのパスを指定すると標準出力…
就職活動が苦戦しています。いまだ最終面接すらいけない始末。おかげで最近はちょっと自信喪失気味です...。 § さて、今回はちょっと気分を変えて、MacOSXにおけるデバッグ手法を一つ紹介。 MacOSのメモリアロケーターは、標準でデバッグを支援する様々な…
ずっと以前から頭の片隅にあったクォータニオンを、最近になってようやく少し分かった気がしてきました。 § 自分の印象としては、クォータニオンはその定義からして一見とっつきにくいものの、予め複素平面の知識があれば、おそらく自然と理解できるのではな…
久しぶりに「ゲームプログラミングのための3Dグラフィックス数学」から。ぶらぶらと本屋に行ったついでに、また立ち読みしてきました。○ュンク堂書店さん、本当に冷やかしばかりですみません...。 § 射影ベクトルと外積の計算は線形変換なので行列で表現…
最近、ある事情からメモリ管理の手法を調べることになり、ウェブ上の資料を漁っていました。 § まず最初にあたったのは、「The Memory Management Reference」。このサイトは、メモリ管理が抱える問題点やその解決手法を傍観するのに便利でした。 一般にメモ…
UI設計におけるユーザー体験については、他方で散々解説されてると思いますが、個人的に思うところがあったので敢えて書き残しておきます。 § 夜遅くアパートに帰ってきて、だらだらとTVを眺めていた時のこと。ふと流れた「しゃべる!DSお料理ナビ」*1のCMが…
Kikker の学習の仕組みと Rocchio アルゴリズム - naoyaのはてなダイアリー から。 ずっと以前に del.icio.us の登録タグを利用して、これと似たように Cosine similarity からユーザー間の類似性を計算するプログラムを作ったことがあります。 きっかけは、…
回転行列の固有値を考えましょう。二次元の回転では、回転により方向を変えないベクトルは無いので、結果として固有値は複素数です。これはよく知られていますね。ちなみに三次元では、回転軸は回転で方向(と大きさ)を変えないので、固有値のひとつは1であ…
自作レンダラーにシュリックの反射モデルを導入してみました。このモデルの発案者であるシュリック氏の論文「An Inexpensive BRDF Model for Physically-based Rendring」に従って素直に実装しただけですが、案の定、不自然な箇所が多くまだまだこれからです…
Good Math, Bad Math : Binary Heaps ヒープは、スタックやキューと並びシンプルで強力なデータ構造です。ヒープとは、木構造の一種で要素の挿入と最大値(又は最小値)の要素の削除の計算量が共にO(logN)。このヒープを2分木で表現したものを、バイナリヒー…
これまでレンダリング方程式の中で表れる微小立体角(Δω)の導出がいまいち理解できてなかったのですが、たまたま本屋で「ゲームプログラミングのための3Dグラフィックス数学」を立ち読みしたところ、とても分かりやすかったのでメモしておきます。 § 天頂角…
約一ヶ月休んでましたが、色々蹴つまづきながらも開発は進んでます。いまは人生初めての就職活動に挑むにあたって、身辺がばたばたして心が落ち着きません。ああ、早く定職に就きたい...§ここ1週間は、レンダリング処理に様々な問題が見つかり、その解決…
決定を保留していた対応フォーマットの件ですが、正直、ベンダー独自のフォーマットの仕様を一から理解するのが面倒くさいので、とりあえず既に知っていてるPLYに対応することにします。実装に関しては、スタンフォード大学がCのライブラリを公開しているの…
本書を読んで私が一番引っかかったのは、「ビジネスが分かる」とは、いったいどういう能力なのかということ。 一般的に日本のエンジニアは、技術に関しては興味が尽きないがビジネスには全く疎い人達が多いと言われます。本書でも、日本のソフトウェア業界の…
ひとまずkdツリーを使ってレンダリングできるようになったのですが、レイを使ってツリーをトラバースする処理のオーバーヘッドが大きすぎてかえって実行速度が遅くなってしまいました。作業PC上で計測した実時間の比較では2倍以上遅いです。 プロファイラで…
ようやくkdツリーを構築することが出来ました。ケアレスミスのせいでAABBと三角形の交差判定処理の実装に少々時間がかかってしまいましたが、なんとか動いてくれてほっとしてます。先日作成したビューワーで生成したツリーを表示させてみたところ、期待する…
もう昔から散々言われている話題だと思いますが、ヘッダーファイルの循環参照に手を焼いています。相互に定義を参照するケースが増えた結果、前方宣言を忘れたために引き起こるコンパイルエラーが多発するようになり、ウザくてたまりません。エラーを解消す…
簡単にプロファイラでレイトレーサーの処理時間を計測したところ、やはりレイとオブジェクトとの交差判定がボトルネックになっていることが分かりました。元々、コーディングにおいてあまり実行速度を配慮してない事もあるのですが、このままだとレンダリン…
2月末に仕事を辞めて以来、ろくに転職活動もせず時間が余っていたので、少し大きめのプログラムに取り組もうと思いレイトレーサーを作ってみました。先月からC++でコードを書き始めて約2週間、ようやくそれらしい結果が出力できるようになりました。下の画…
昔買った統計学のテキストを斜め読みしていたところ、分散の計算でつまずいた部分があったので一応メモしておきます。 通常、ある標本の分散は次式で求められますが、 Σの中身を展開すると となります。この時、 なので、 となり、式の形を簡単化できます。…
最近なんだかC++がなつかしくなってきて再び触り始めました。「これからは無闇に流行を追い求めるのを止めて、ひたすら地味路線で行く」と決め込んだ今の私にとっては、RubyやPythonなど流行のスクリプト言語よりも質実剛健な雰囲気のC++の方が適してるのか…
ようやく最低限の準備が整った感があるので、今回は行列の対角化について。以前に少しだけ触れたのですが、行列の対角化とは、これまで学んだ内容をまとめると、だいたい次のような操作であると分かります。すなわち、ある行列Aと対角行列Bが相似である場合…
線形代数に関連した数値計算の手法として、べき乗法があります。べき乗法とは、固有値と固有ベクトルの性質から、ベクトルに行列を繰り返しかけることで絶対値最大の固有値とそれに属する固有ベクトルを求める方法です。計算手順が行列の次数に依らないので…