プログラマー飲み会!!冬の陣

春に引き続き,プログラマー飲み会!!を開催しようかなと思います。
興味ある人は下記のページから参加登録をお願い致します。
https://atnd.org/events/72705

あ、ちなみに教員の方とかプログラマーではない人でも大丈夫です。
興味ある人であればOKです!
開催日程はこれから調整しようと思いますが,12/19か20のいずれかを予定しています。
年末でも大丈夫な方が多ければ20日以降に開催しようかと思います。
参加登録の際に19・20・年末のいずれかをコメント記載していただけると助かります。

ちなみに参考として,前回の開催内容は下記のとおりです。
https://atnd.org/events/63383

エイリアシング誤差の可視化

※2015/10/04 やっぱりHLSLのコードが間違えていたようで修正しました。

LogPSMで出てきたエイリアシング誤差の可視化を実装してみました。
実装に当たっては,”Robust Hard Shadows”のAppendix A.3 Sampling rateと,博士論文でない方のLograthimic Perspective Shadowの論文中の式84, 式85を参考にしました。
RobustHardShadows_Fig_5_6

※図はMartin Stingl, 2011, Robust Hard Shadows. p.58より引用。

論文中で使われている下の画像ようなものを表示するためのものです。
LogPSM_Fig_5_32

※図はLloyd, B. 2007. Logarithmic perspective shadow maps. PhD thesis, University of North Carolina. p.116 より引用。
float3 VisualizeError( float2 shadowCoord, float2 shadowMapSize )
{
    const float3 values[] = {
        float3( 0.0f,       1.0/7.75,   1.0f/7.75f ),
        float3( 1.0f/7.75f, 1.0f/3.25f, 1.0f/3.25f - 1.0f/7.75f ),
        float3( 1.0f/3.25f, 1.0f,       1.0f - 1.0f/3.25f ),
        float3( 1.0f,       3.25f,      2.25f ),
        float3( 3.25f,      7.75f,      4.5f ),
        float3( 7.75f,      10.0f,      7.75f ),
    };

    const float3 colors[] = {
        float3( 0.2f, 0.0f, 0.0f ),
        float3( 1.0f, 0.2f, 0.0f ),
        float3( 1.0f, 1.0f, 0.0f ),
        float3( 0.0f, 1.0f, 0.0f ),
        float3( 0.3f, 0.8f, 1.0f ),
        float3( 0.0f, 0.0f, 1.0f ),
        float3( 0.0f, 0.0f, 0.2f )
    };

    float2 ds = shadowMapSize.x * ddx( shadowCoord );
    float2 dt = shadowMapSize.y * ddy( shadowCoord );

    float error = max( length( ds + dt ), length( ds - dt ) );

    float3 result = (float3)1.0f;
    [unroll]
    for( int i=0; i<6; ++i )
    {
        if ( error >= values[i].x && error < values[i].y )
        {
            result = lerp( colors[i], colors[i+1], (error - values[i].x) / values[i].z );
            break;
        }
        else
        {
            result = colors[6];
        }
    }

    return result;
}

Uniform Shadow Mapに適用すると下記のようになります。
test_visualize
うちのサンプルで公開しているものは,それなりによさげに見えます。
Prallel-Split Shadow Mapの方にも適用してみました。
test_visualize2
PSSM適用するまでもないシーンなのですが,一応緑色が占める割合が多いので,適切にシャドウマップが適用されていることが分かりますね。
奥の方はこんだけちっこいシーンなので当たり前ですがオーバーサンプリング気味になっているので,カスケードの枚数を減らしても大丈夫そうな気がします。
再びUSMで2048×2048だったシャドウマップのサイズを256×256に落とすと下記のようになります。
test_visualize3
test_visualize4
奥の方は緑色になっているので確かにシャドウが適切に表示されていますね。
手前部分は赤から黄色に近い色になっているので,確かにちょっと汚いのが見て取れます。
こういう感じでデバッグに結構役立ちそうです。

もし実装間違え等があれば,正しい実装と一緒に指摘していただけると幸いです。

レイトレ合宿3!!! 参加レポート

こんにちわ。
日々Gitのマージコンフリクトと格闘しているPocolです。

今年もレイトレ合宿に参加してきました。
昨年と同じく今年も河口湖カントリーコテージBanにて開催されました。
まず、今年は去年とちがってレクリエーションが充実していました。
レイトレクイズがあり,その後皆でピンホールカメラ作成をしました。

IMG_1871
また,このピンホールカメラの撮影が難しく,シャッター時間何秒にした?などやり取りで,初めての人とも少し話す機会ができ良い時間となりました。
なんとか,自分も最後にはカメラを改良して風景らしきものを写真に収めることができました。
IMG_1875
ちなみに作成したピンホールカメラは下のような感じです。
IMG_1876

ピンホールカメラによる撮影会のあとは,お待ちかねの夕食です。
今年はnikqさんとtomohiroさんが買い出しに行ってくれて,素晴らしい夕食を味わうことができました。
見てください,このステーキの肉。
IMG_1872
VR野郎は唐揚げで盛り上がっているらしいですね。
レイトレ野郎は肉で盛り上がります。結局みんなで8kgを平らげました。



さて,夕食の後はお風呂とセミナーです。
今年は新しい風呂ができたみたいですが,タイミング逃して結局行けずじまいでした。
セミナーはperimさんによるボリュームレンダリング入門から始まりました。
SlideShareにもうスライドが上がっているようですので,気になる方はチェックしてみてください。


続いて,shockerさんによるパストレーシング詳細についての解説がありました。
後日スライドがアップされるようなので,レイトレ合宿3!!!のページをチェックしておきましょう。
その後,CG鑑賞会の予定でしたが,思ったよりも遅い時間になり、そのまま就寝となりました。

翌日,ついに成果発表です。
ちなみに今年は下記のような画像を12分程度でレンダリングしました。
salty3
今年は,仕事の方が忙しくて(実は今も絶賛忙しいのですが…),また引っ越しも重なりあまりレンダラーを書く時間がさけませんでした。最初はフルスクラッチで書き直すぞ~とか思っていたのですが,「あ、やべ。無理」ということに気づき,そこからの方向転換でした。
去年はDOFやIBLを入れられなかったので,まずはそのあたりを入れたくて手っ取り早く取り掛かれそうなのがIBLだと思ったので,IBLを実装してみました。
…が,実はうまく実装できておらず,ライティングしている割には暗い結果になります。ちなみに最初の時点ではピンホールカメラを使っているので,何か実装がまずい点がありそうです。
結局,提出までに直すのは時間的に無理と判断して,明るさを補うためにスフィアライトを一灯焚きました。一応ライト焚いたので,なんとか影が出るようになりました。やっぱり影は重要ですね。
リアルタイムの方でもこれくらい綺麗な影を出したいもんです。
あとは薄レンズも実装しました。わりと手軽に実装出来て,それっぽい画がでるので結構いいですね。
来年はもうちょいちゃんとしたカメラモデルを取り入れたいところです。
あとは,地味にインスタンシングに対応しています。上のシーンですが,読み込んでいるメッシュは3種類です。Coke用のメッシュ,Pepsi用のメッシュ,紙コップ用のメッシュの3種類で,あとはインスタンシング使ってレンダリングするようになっています。
これ,去年色々と表示したいなぁ~と思って,いちいちメッシュコンバートするのが面倒だったので実装しました。これあるとだいぶ楽ですね。
あとは,テクスチャをバイリニアフィルタを利くようにしました。バイリニア程度でも,ちょっと重くなったのでバイキュービックは結局実装しませんでした。
そのほかomochiさんのブログ記事をもとにSAHのBVHも実装してみたりしたのですが,なんか実装がうまくいっていないのか,去年作ったBVHの方が構築もトラバーサルも速かったので,結局去年作ったOBVHのバグ修正をして本番に使いました。早期打ち切りが入ればさらに爆速になるのですが,穴が開くようになってしまったので,こちらも結局使わずじまいです。
はやめにBVHのデバッグ環境を整えなきゃなと思ったので,何とか年内のうちにデバッグできる仕組みを作ろうかと思います。
今年は,色々と去年得たノウハウを元に画づくりしたので,4位という好成績を得ることができました。
来年はもう少し順位上げたいなぁ~と思います。
みなさん、レイトレ面白いのでレイトレしましょう。

レイトレ合宿参加者の皆さん、主催のholeさん,qさんお疲れさまでした。
また,来年の開催期待しています!!

もうすぐレイトレ合宿。

来週はレイトレ合宿です。
例年のように今年も参加します。相変わらず絵はへぼいですが…。
ここ最近では,1年に1度の楽しみになっています。
レンダラーを書くとかなりグラフィックスの勉強になります。
書いたことない人は是非書くことをおススメします!
たぶん、来年も開催するでしょうから我こそは!と思う人は今から準備しておくと良いかもしれません。

レイトレ合宿が終わったら,D3D12の記事をアップしていこうかと思っています。
何か記事にしてほしい実装ネタがあれば,可能な範囲で要望を受け付けます。
コメント等で書いていただけると幸いです。

TortoiseGitでのリモートブランチの削除方法

TortoiseGitでのリモートブランチの削除方法をいつも忘れてしまうので,メモにしておきます。

①フォルダをクリックして,コンテキストメニューを表示して,「切り替え(W)」を選択。
git01
②ダイアログの「…」をクリックする。
git02
③左側のrefsからremotesを選択する。ブランチ名一覧から削除したいブランチを選択し,コンテキストメニューの「リモートブランチを削除」を選択する。
git03
これでリモートブランチが削除できるようです。

用語メモ

こんにちわ、Pocolです。
今回は用語についてメモを残しておこうと思います。
間違いが多々あると思いますので,間違いがあったらご指摘いただけると幸いです。

バス

バスとは、コンピュータ内部でデータや信号を伝達するための回路や通路のこと。

メモリバス幅

メモリがデータを一度に送れる量。
NVIDIA GeForce GTX 980 はメモリバス幅は256 bit
NVIDIA GeForce GTX 980 Ti は 384 bit

メモリ帯域幅

バス幅×周波数×1サイクル当たりの転送回数=帯域幅 …らしい。
NVIDIA GeForce GTX 980 はメモリ帯域幅が 224 GB/s
NVIDIA GeForce GTX 980 Ti は336.5 GB/s

VRAM

パソコン本体のメモリ(メインメモリ)と同じく、一時的にデータを保存する場所で、グラフィックカードについているメモリは「VRAM」と呼ばれるそうです。

キャッシュメモリ

処理装置と主記憶装置とのデータのやり取りを高速化するためのメモリーだそうです。
キャッシュメモリで調べると「CPUとの~」的な説明が多いですが,GPUにも搭載されています。
L1キャッシュ,L2キャッシュの例え話。


* キッチン:L1キャッシュ
* 台所:L2キャッシュ
* 冷蔵庫:L3キャッシュ
* スーパー:HDD
という例えもある。

キャッシュミス

キャッシュの中に必要なデータが無いこと。

命令セット

命令セットとは、あるマイクロプロセッサで使用できる命令の集合。
そのプロセッサを動かすための機械語コードの体系で、プロセッサに対してどのような命令が使用できるか、また、命令がどのような動作をするのかを定めたものだそうです。

コマンド

命令のこと。

コマンドバッファ

コマンドバッファとは,GPUが実行するコマンド列のバッファのこと。

mantle_software_instructure
図は,Matle Programing Guide p.13 より引用。

コマンドリスト

Microsoftのドキュメントによると(https://msdn.microsoft.com/ja-jp/library/ee422102(v=vs.85).aspx)
「コマンド リストは、記録と再生が可能な GPU コマンド シーケンスです。」
とのこと。

DMA転送

DMAはDirect Memory Accessの略。
CPUを介さずに「直接」メモリに転送すること。
DMA転送のメリットは,CPUの負荷を上げずにハードウェアの能力を利用した高速なデータ転送が実現できること。

ヒープ

メモリ関係で,ヒープといったらツリー構造ではなく,動的にメモリ確保可能なメモリ領域のことを指す。
ヒープ (heap) とは,「山積み」という言葉の中の「山」をさす英単語らしい。

フィルレート

1秒あたり何ピクセルの描画をすることが出来るかという能力値のこと。

スピンロック

マルチスレッドなどの環境の排他制御において、ロックを獲得するまでスピン(ビジーループ)で待つ方法

Direct3D12メモ

こんにちわ、Pocolです。
Direct3D12を触り始めたのですが,いくつかよく分からん用語があるのでメモとして残しておこうかなと思います。

Root Signature

リソースとシェーダーの対応付けを行うためのテーブルの定義で,レジスタとのバインド状態を指定するようです。
直接 Descriptor を格納すると 4個しか入らないので DescriptorTable と組み合わせて使うようです。
https://msdn.microsoft.com/en-us/library/windows/desktop/dn899208(v=vs.85).aspx

D3D12_ROOT_SIGNATURE_DESC
    ルートシグニチャのレイアウトを表します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn986747(v=vs.85).aspx
D3D12_ROOT_PARAMTER
    ルートシグニチャのスロットを表します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn879477(v=vs.85).aspx
D3D12_ROOT_PARAMTER_TYPE
    ルートシグニチャのスロットのタイプを表します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn879478(v=vs.85).aspx
D3D12_ROOT_DESCRIPTOR_TABLE
    Descriptor Heapに次々と表示されるDescriptor範囲の集合としてDescriptor Tableのレイアウトを表します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn859382(v=vs.85).aspx
D3D12_DESCRIPTOR_RANGE
  DescriptorTable内の与えられたDescriptorの範囲を定義する。
  https://msdn.microsoft.com/en-us/library/windows/desktop/dn859380(v=vs.85).aspx
D3D12_DESCRIPTOR_RANGE_TYPE
    範囲タイプを指定する。指定するデータ範囲がSRVを表すものなら,D3D12_DESCRIPTOR_RANGE_TYPE_SRVを指定する。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn859381(v=vs.85).aspx
D3D12_ROOT_CONSTANTS
    1つの定数バッファとして表示されるルートシグニチャ内の定数インラインを表します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn879475(v=vs.85).aspx
D3D12_SHADER_VISIBILITY
    与えられたルートシグニチャのスロットのコンテンツにアクセス可能なシェーダを指定します。
  https://msdn.microsoft.com/en-us/library/windows/desktop/dn879482(v=vs.85).aspx
D3D12_STATIC_SAMPLER_DESC
    静的サンプラーを表します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn986748(v=vs.85).aspx
D3D12_ROOT_SIGNATURE_FLAGS
    ルートシグニチャのレイアウトのオプションを指定します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn879480(v=vs.85).aspx

ルートシグニチャの例
https://msdn.microsoft.com/en-us/library/windows/desktop/dn899123(v=vs.85).aspx

Descriptor

D3D12における単一リソースのバインディング(結び付け)の基本単位。
https://msdn.microsoft.com/en-us/library/windows/desktop/dn899109(v=vs.85).aspx
関係するものは以下のとおり。

* Index Buffer View
    D3D12_INDEX_BUFFER_VIEW 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn891445(v=vs.85).aspx
* Vertex Buffer View
    D3D12_VERTEX_BUFFER_VIEW 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn903819(v=vs.85).aspx
* Shader Resource View
    D3D12_SHADER_RESOURCE_VIEW_DESC 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn770406(v=vs.85).aspx
    作成には ID3D12Device::CreateShaderResourceView を呼び出します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn788672(v=vs.85).aspx
* Constant Buffer View
    D3D12_CONSTANT_BUFFER_VIEW_DESC 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn770351(v=vs.85).aspx
    作成には ID3D12Device::CreateConstantBufferView を呼び出します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn788659(v=vs.85).aspx
* Sampler
    D3D12_SAMPLER_DESC 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn770403(v=vs.85).aspx
    作成には ID3D12Device::CreateSampler を呼び出します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn788671(v=vs.85).aspx
* Unordered Access View
    D3D12_UNORDERED_ACCESS_VIEW_DESC 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn770451(v=vs.85).aspx
    作成には ID3D12Device::CreateUnorderedAccessView を呼び出します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn788674(v=vs.85).aspx
* Stream Output View
    D3D12_STREAM_OUTPUT_DESC 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn770410(v=vs.85).aspx
* Render Target View
    D3D12_RENDER_TARGET_VIEW_DESC 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn770389(v=vs.85).aspx
    作成には ID3D12Device::CreateRenderTargetView を呼び出します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn788668(v=vs.85).aspx
* Depth Stencil View
    D3D12_DEPTH_STENCIL_VIEW_DESC 構造体を使用して作成。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn770357(v=vs.85).aspx
    作成には ID3D12Device::CreateDepthStencilView を呼び出します。
    https://msdn.microsoft.com/en-us/library/windows/desktop/dn788661(v=vs.85).aspx

Descriptor Heap

Descriptor Heap は Descriptor の連続するメモリ割り当てのコレクションです。
Descriptor Heap は Pipeline Stat Object(PSO), Shader Resource View (SRV), Unordered Access View (UAV), Constant Buffer View (CBV)などいくつかのオブジェクトタイプを含みます。

Resource Hazard

http://www.isus.jp/article/game-special/direct3d-12-overview-part-3-resource-binding/から引用。

何かが描画ターゲットやテクスチャーとバウンドされている場合、その処理中はランタイムとドライバーの両方が追跡しています。
ランタイムとドライバーがバインドを検出すると、古い設定をアンバインドし、新しい設定を適用します。
この方法でゲームは必要に応じてスイッチを作り、ソフトウェア・スタックはシーンの背後にあるスイッチを管理します。
さらに、ドライバーは描画ターゲットをテクスチャーとして使用するため、GPU パイプラインをフラッシュする必要があります。
そうしないと、GPU でリタイアする前にピクセルが読み取られると、コヒーレント状態を保てません。

上記の参照ページに詳細が載っているので、そちらを見たほうが早い。

Conservative Rasterization

Conservative Rasterization はピクセルレンダリングにある確実性を追加します。特に,衝突検出アルゴリズムに有用とのこと。
Conservative Rasterization は,描画されたプリミティブによって,少なくとも部分的に覆われるすべてのピクセルがラスタライズされ,ピクセルシェーダが起動します。
https://msdn.microsoft.com/en-us/library/windows/desktop/dn914594(v=vs.85).aspx

Rasterizer Ordered View

ラスタライズ処理によって同一画面座標上となったピクセルの陰影処理に起用されるピクセルシェーダの処理順を規定できる機能らしい。
GDCでは,OITの話をしていた。https://software.intel.com/sites/default/files/managed/4a/38/OIT-to-Volumetric-Shadow-Mapping.pdf

Direct3D12 開発環境構築 -プレビュー版-

こんにちわ、Pocolです。
いつの間にやら7月になってしまっていますね。歳をとると早いものですね。

さて,7月に入りVisual Studio 2015 の正式版リリースまで 9日を切りました。
もうすぐVisual Studio 2015 と Windows 10 が Microsoft から正式版としてリリースされます。
そして,先日 Window 10 Insider Preview と Window 10 Developer Preview Tool の最新版である Build 10166(現在は,Windows 10 RTM Build 10240が提供されています) が提供されました。
d3d12.h のヘッダファイルも前バージョンとの差分がなくなり,ようやく仕様として固まったのかな? という感じがします。

実はとある事情で,d3d12の記事を書いていなかったのは,仕様が変更される可能性があり対応は6月以降にしたほうが良いと。
とあるイベントで,とある会社の人から教えてもらったからなのであります。

そんなわけで,正式版リリースが間近に迫った今大規模な変更はおそらく可能性少ないので(…と思いたい)
Direct3D 12についてちまちま書き始めます。

まずは,リリースまで待てない人のために開発環境の構築方法について説明します。

必要なものは以下の通りです。

(1) Windows 10 Insider Preview
(2) Visual Studio Community 2015 RC
(3) Windows 10 Developer Tool Preview Tool
(4) Graphics Tools

まず,Windows 10 Insider Preview ですが,ぶっ壊れても良いマシンにインストールしましょう。まだ正式版ではないので,最悪データが全て吹っ飛んだりなどする可能性があります。
絶対に普段使うメインマシンにはインストールしないようにしましょう。
そんなわけで,別の物理マシンがあればよいのですが,ない場合は仮想マシンにインストールするという手もあります。
ちなみに自分の場合は仮想マシンにインストールしています。
Windows 10 Insider Preview は下記のマイクロソフトのサイトから*.isoでダウンロードできます。

http://windows.microsoft.com/ja-jp/windows/preview-iso

最新版であるWindows 10 RTM Build 10240 は下記からダウンロードできます。
http://microsoft-news.com/download-windows-10-rtm-build-10240-iso/

仮想マシンの場合は,インストールする際にこの*.isoファイルを選択しましょう。
物理マシンの場合は,*.isoをDVDに焼いてインストールするか,Windows USB/DVD Toolを使ってUSBからブートできるようにすると良いと思います。
このインストールあたりは,Windows 8とさほど変わらないので,世の中にあふれているWindows 8/8.1などのブートディスクの作成方法を参考にすると良いと思います。

続いてVisual Studio Community 2015 RCのインストールです。
下記のマイクロソフトのダウンロードページからRC版をダウンロードします。

https://www.visualstudio.com/ja-jp/downloads/visual-studio-2015-downloads-vs.aspx

ダウンロードしたら,ダウンロードした*.exeをクリックしてインストールを開始します。
このときPocolが注意したのは,「カスタム」でインストールすることです。

vs2015rc_01

次の画面では,Windows SDKにチェックを入れました。

vs2015rc_02

この設定に気をつけて,インストールボタンを押してインストールを開始します。
きちんとボタンを押す前にWindow SDKの古いバージョンがインストールされることを確認しましょう。

vs2015rc_03

しばらくすると,インストールが終わるので待ちましょう。
仮想マシンを使っている人は,インストールが全然進まない!とイラつく前にネットワークの設定がきちんとされているか確認しておくと良いと思います。
VM Wareにインストールしたときはすんなりいったのですが,Virtual Box にインストールしたときは,このネットワークの設定をしていなかったせいで,インストーラーがファイルをダウンロードできず全然インストールが進みませんでした。
ネットワーク設定をきちんとしたら,すんなりインストール終わりました。

続いて Windows 10 Developer Preview Tools の最新版を手動でインストールしましょう。
SDK自体は,下記のマイクロソフトのサイトからダウンロードできます。

https://dev.windows.com/en-us/downloads/windows-10-developer-preview

ダウンロードしたら,ダウンロードしたファイルをクリックしてインストールをしましょう。
この際,インストール前にSDKのバージョン番号が表示されますが10.0.10166であることを確認しましょう。
windowsdk_preview

最後に,Graphics Tools がインストールされていることを確認します。
インストールされていない場合はインストールしましょう。
確認方法は,スタートボタンからスタートメニューから「設定」→「システム」→「アプリと機能」→「オプション機能の管理」に行き,
「Graphics Tools – This adds DirectX Graphics Tools support」があることを確認します。
Graphics Tools が無い場合は「機能の追加」ボタンを押して追加を行いましょう。
gfxtool

これで開発環境が構築できました。
あとは,ガリガリとコーディングしていきましょう!

次の記事では,Direct3D 12ってなんぞ?というあたりを書きたいなぁと思っています。

おすすめサンプル

この記事は,レイトレ合宿3!!!アドベントカレンダー第2回目の記事です。

本当は,VCMの解説をやろうかと思ったのですが,残念ながら論文を読んでいる時間がありません。
でも,レイトレ合宿はすぐやってくるわけでしてコードは書かなきゃいけないですよね~。
そんなわけで,今日はレイトレ合宿に向けてコードをガリガリと書くのに役立つサンプルを紹介するということにしたいと思います。

まずは,基本を押さえるという意味でholeさんのeduptは確認しておきましょう。
edupt
ありがたいことに,holeさんが解説をスライドで上げてくださっています。
皆さん感謝しましょう。
holeさんありがとう。

eduptを見終わって双方向パストレに興味がある人は,またまたholeさんがコードと解説スライドを上げてくださっています。
edubpt
皆さん感謝しましょう。
holeさんありがとう。

続いて,過去のレイトレ合宿の参加者のコードを読んでおくというのもおすすめです。
見ていない人は確認しておきましょう。
レイトレ合宿!
レイトレ合宿2!!

続いておすすめなのは,海外の大学の授業?でレンダラ―を書いて提出というものがあるのですかね。ツイッターで自分のタイムラインに乗ってきたものがあるので,いくつかご紹介します。

https://graphics.ethz.ch/teaching/imsynth14/competition//1st%20Place..%20Benedikt%20Bitterli/report.html
https://graphics.ethz.ch/teaching/imsynth14/competition//2nd%20Place..%20Simon%20Kallweit/report.html
https://graphics.ethz.ch/teaching/imsynth14/competition//Beat%20Kueng/report/index.html

他にもいくつかあるので,この記事を随時更新していこうかなぁと思います。
とりあえず2015/06/02 11:00現在ではこんな感じです。