2018-01-01から1年間の記事一覧

グローバルイルミネーションのためのフォトンマップ実装①

グローバルイルミネーション(Global Illumination: GI)とは、現実世界における間接光を表現するためのアプローチである。(あるいは、間接光そのものを指す) 本来、現実のライティングというものは、無限にも等しい膨大な量のフォトンと、制限のないバウン…

8分木空間でのレイトレースのコリジョンリスト収集処理を見直して10倍速くした

フォトンマッピングの実装で、フォトンを1万~10万くらいバラまく処理が死ぬほど重かったので、8分木空間におけるレイトレースの処理を見直した。 8分木はもとより衝突判定を高速にするための空間分割アルゴリズムだが、レイトレースをする際に、衝突判定を…

その気になれば前提知識無し機材無しの無の状態から2週間で美少女VTuberになれたという話

最近、美少女になりました。 いつもは、このブログでは文語体を用いてプログラミングに関する記事を投稿しているのですが、今回はあえて口語体で書くことにします。 なんやかんやあって、美少女のアバターを使ってYoutubeに動画を投稿してしまうという事件を…

Boost.Spirit.QiによるXモデルパーザ実装の紹介①

※先に断っておきますがバイナリフォーマット、スキンメッシュ及びアニメーションのパーズは未実装です。 DirectX11からはD3DX系統の補助関数的なAPIはすべて排除されたため、シェーダーのコンパイル、テクスチャの読み込み、モデルの読み込みはユーザーが実…

ミップマップを使ってラフネスのある材質のリフレクションを実装した

以前、環境マップを用いて、リフレクションを実装した。Cube Map Reflectionを実装した - riyaaaaasan’s blog 上記の記事では完全鏡面に限定した実装となっており、マテリアルのラフネス値を無視した綺麗で鮮明なリフレクションしか実現できていない。 この…

ジオメトリシェーダでライン描画

DirectXには一応、線を描画する機能がある。 プリミティブ型にラインリストやラインストリップを指定すれば、頂点バッファの頂点を線として描画してくれる。ただし、その線には太さという概念がない。線を描くならできればそれなりの太さが欲しい。太さのも…

レンダリングエンジンのコアロジック部分からDirectXの依存性を排除した

世の中、マルチプラットフォームが当たり前になってきた。 ぶっちゃけ、マルチプラットフォームにする必要性はまったく感じなかったのだが(再三言っているが、プロダクト開発ではなく、あくまでゲームエンジニアとしての研鑽のためエンジンを開発している)…

Hashed-Octree(ハッシュ化八分木)による空間分割を実装した

そろそろレイトレがしたい。具体的に言えばフォトンマッピングでGIを実装したい。 だが、フォトンマッピングを実装するには現状あまりにも足りないものが多すぎる。 その最たるものが、高速な衝突判定アルゴリズムだ。 シンプルに設計されたレイトレ専用のア…

Variance Shadow Maps(分散シャドウマップ)を実装した

Variance Shadow Maps(分散シャドウマップ)を実装しようと思う。 これはソフトシャドウの実装の一つで、シャドウのエッジをなんかいい感じにする技術だ。まず、普通のシャドウマップの実装を再掲する。 bool IsVisibleFromDirectionalLight(float4 shadowC…

Cube Map Reflectionを実装した

Cube Map Reflectionを実装した。前回、スカイボックスを実装したが、そのスカイボックスのリソースであるキューブテクスチャを環境マップとして用いて、リフレクションを実装することにする。といっても、一応、拡張性を持たせるために、シーン内に複数の環…

SkyBoxを実装した

SkyBoxを実装した。 といっても、リフレクションの前哨戦みたいなものだが。 リフレクションは基本的には環境マップで実装される。理想的には、そのオブジェクトを中心とする環境マップを一個一個作ることだが、動的な環境マップとなるとあまりにも現実的で…

Omnidirectional Shadow Mapping(全方位シャドウマップ)を実装した

全方位シャドウマップを実装した。 資料が少なくて実装が結構手間だった。 こういうときよく頼りにしているもんしょという方のブログでは、全方位マップは双方物曲面かつディファードレンダリングでの実装だったので、参考にできなかった。私はキューブマッ…

HLSLのTextureCubeの情報が少なすぎる

ランス10やってたら気づいたら土日が終わっていた さて、ポイントライトの全方位シャドウや、リフレクション用の環境マップの実装をしているのだが HLSLのTextureCubeの情報が少なすぎる c++ - Direct3D 11: How to access cube map faces in memory on the …

レンダリングエンジン進捗まとめ

前回のポエムが長くなり過ぎたので二回に分けた。 現在、レンダリングエンジンに対するコミット数は104。 簡単に振り返ってみる。 1日目あたり 最初の方のコミットは、なんというか、コピペコードばかりだ。酷過ぎる。とりあえず動くところ見るためとはいえ…

レンダリングエンジンの開発を始めた。

レンダリングエンジンの開発を始めた。 今は割とやる気があるので、このやる気が継続するよう、開発日記をつけるためにブログの開設をした。 私はゲームプログラマであるので、レンダリングとは一般的なほかのエンジニアよりも縁が深い立ち位置だが、今まで…