Multi-Layer Weighted Blended Order-Independent Transparency

投稿日:

前回紹介したWeighted Blended OITは、ポリゴンの距離が離れすぎると半透明の重ね合わせが不自然になる問題があるため、それを解決する方法を考えてみました。
カメラからの距離でポリゴン(ピクセル)をレイヤ分けして描画、最後に遠くのレイヤから合成していくことで問題を解決します。同一レイヤ内にポリゴンが複数存在した場合は、Weighted Blended OITを利用してレイヤの代表値を1つ求めて、その値でレイヤ合成を行います。
レイヤ分けするためにはレイヤ数だけ繰り返し描画する必要がありますが、MSAAの機能を利用して1回の描画で行う方法を考案できたため、比較的簡単に実装できるようになっています(裏技的な使い方です)。

続きを読む Multi-Layer Weighted Blended Order-Independent Transparency

Weighted blended order-independent transparencyの実装

投稿日:

順番に依存しない半透明の描画技術(Weighted blended order-independent transparency)をDirectX11で実装してみました。
半透明を重ねて表示する場合遠くから順に描画する必要がありますが、この技術を使えば描画順序に関係なくソートした描画結果に似た結果が得られます。

続きを読む Weighted blended order-independent transparencyの実装

DirectX11アルファテストはどこへ? discard/clip命令とAlphaToCoverage

投稿日:

DirectX10以降、レンダリングステートからアルファテストがなくなり、シェーダーで同等(またはそれ以上)の処理が行えるようになっています。OpenGL3.0以降でもシェーダーで対応するようです。
シェーダーでアルファテストを行う方法、処理結果をまとめてみました。また、アルファテストを適用させた場所にも、アンチエリアス処理を行えるAlphaToCoverageという機能についても調べてみました。

AlphaToCoverageという機能は知っていたのですが、こんな便利な機能だとは知りませんでした……。

アルファテストとAlphaToCoverage

続きを読む DirectX11アルファテストはどこへ? discard/clip命令とAlphaToCoverage

DirectX11シェーダー入門

投稿日:

シェーダーを使いたい、勉強したいと思っても作成する環境が必要です。
なのでVisualStudio2017とDirectX11でシェーダーをコンパイルして実行結果の確認ができる最小限の環境を作成してみました。シェーダー入門とありますがシェーダーの書き方ではなく、シェーダーを書くまでに必要な設定などについての説明です。
ソースコードを公開していますので参考にしてください。

続きを読む DirectX11シェーダー入門

VisualStudio2017(Windows10 DirectX OpenGL)で始める3Dプログラミング

投稿日:

今(2017年5月)Windows&C++で3DプログラミングするならDirectXかOpenGLだと思いますが、最新バージョン(DirextX12など)は、性能重視のため手軽にプログラミングができなくなっています。
なので古いバージョンで使えるものを調べて、プログラミングができる環境を作ってみました。
作成した環境は、OpenGL1.1、OpenGL4.5、DirectX9、DirectX11、DirectX12で、初期化と画面クリア、簡単なポリゴンの描画まで行っています。
VSプロジェクト、ソースコードを公開していますので、3Dプログラミングの参考にしてください。
記事最後にあるダウンロードボタンから取得できます。

続きを読む VisualStudio2017(Windows10 DirectX OpenGL)で始める3Dプログラミング

VS2015でDirectX12プログラミング

投稿日:

DirectX12が公開されていたので、プログラミングしてみました。
11とはかなり変わっていて、GPUを効率よく使用できる代わりにリソース管理の一部を自分で行う必要があります。便利な関数やDirectXTexやDirectXTKも用意されていません(2016年4月現在)。
Microsoftから公開されているサンプルプログラムを参考にしながらポリゴンモデルの表示とアニメーションさせるプログラムを作成してみました(以前作成したDirectX11プログラムの移植)。
開発環境はVisual Studio Community 2015、Windows10です。

ss_DX12Prog0

続きを読む VS2015でDirectX12プログラミング

骨付きSoftBodyによる挙動制御

投稿日:

SoftBodyである程度形状を保ったまま、柔らかい物体を表現するのは大変です。複雑な構造にしたり、拘束を強くするなどで形状を保てますが、そうすると柔らかさの調整が困難に、作成にも手間がかかり過ぎます。
この問題の解決方法として、SoftBody内部に剛体を配置、接続する「骨付きSoftBody」というものを考えました。

解説動画

【ニコニコ動画】【物理エンジン】 骨付きSoftBodyによる挙動制御


骨付きSoftBody

特殊な処理などはありません。SoftBodyの基本機能のみで実装可能です。
作成したい形状より少し小さめの剛体(骨)を作成し周りをSoftBodyで覆う構造です。今回の解説動画では、SoftBodyを外側と内側の2層構造にして、内側を剛体にアンカー接続しています。外側と内外をつなぐLinkの強さによって柔らかさを調整できます。
それから、ダンパーを強くしても剛体が全体を引っ張るのでゆっくり移動になりません。ゴムのような振動を抑えるためのダンパー調整の幅が広がります。
剛体の拘束を使うと、SoftBodyでは困難な可動範囲の制限も可能になります。


サンプルプログラム

“骨付きSoftBodyによる挙動制御” をダウンロード BulletSoftBody4.zip – 1221 回のダウンロード – 364 KB


リンクなど

Bullet Physics Library

http://bulletphysics.org/

動画フォント(フリー素材)

「Rounded M+」 / 『自家製 Rounded M+』

動画作成

「ゆっくりMovieMaker」 / 『饅頭遣いのおもちゃ箱』
「AviUtl」 / 『AviUtlのお部屋』

非圧縮性流体を使った SoftBodyの挙動制御

投稿日:

なんか難しそうなタイトルですが、ようするにSoftBody内部を水で満たすことで動きの制御を行う方法を考えてみました。と思ったら、すでにSoftBodyにその機能がありました。体積を一定に保つように全ノードに膨張または縮小させる力を働かせるための設定とパラメータが用意されています。
なので、その機能の説明と適用した場合の動きを紹介します。

SoftBodyを布に使ってみようとしていましたが、まったくうまくいかないので、本来のSoftBodyの使い方に戻します。何百回と形状やパラメータを調整してもダメでした(心が折れました)。

続きを読む 非圧縮性流体を使った SoftBodyの挙動制御

BulletのSoftBodyでスカートを揺らしてみる

投稿日:

前回のぬいぐるみを作ってみるでは、モデル全体をSoftBodyで動かしていましたが、今回は部分的に動きを反映させてみます。ただし、通常のボーンとSoftBodyの動きを混ぜることはできません。完全に動きを分離できるものに限ります。その条件を満たしているオブジェクト(スカート、髪など)をSoftBodyで揺らし、それ以外はモーションデータで動かします。
部分的な反映はボーンによるスキン変形の仕組を利用しているので対応は簡単ですが、ボーンの動きにSoftBodyやコリジョン用剛体を追従させる処理が簡単ではないため、その方法を中心に解説します。

SoftBodyをスカートなどに
SoftBodyをスカートなどに

続きを読む BulletのSoftBodyでスカートを揺らしてみる