Shader(HLSL)

[DirectX] Effekseer for Runtime 導入方法

導入


1.公式サイトからEffekseer for Runtime をダウンロードします。
https://effekseer.github.io/jp/download.html

2.ダウンロードしたフォルダ(EffekseerRuntime143d)のRuntimeSampleを開きます。

3.DirectX9の場合、DirectX9.slnを開きます。(※11の場合はDirectX11.slnです)
e0


プロジェクトの再ターゲット画面が出た場合、再ターゲットをして下さい。e2


4.ローカル Windows デバッガーをクリックし、実行します。サンプルエフェクトが再生されるはずです。(再生されない場合、DirectXをリンクしてあげます)→DirectX9の環境を構築する
※ここで正しく起動するか確認しておきましょう。
e1


5.フォルダ階層を戻り、EffekseerRuntime143d\src\EffekseerRendererDX9に入ります。
(11の方はDX11に入ります)
EffekseerRendererDX9.vcxprojを開きます。
e5

プロジェクトの再ターゲット画面が出た場合、再ターゲットして下さい。

6.デバッグ版のリンクが欲しい方はプロジェクトのターゲットをデバッグに、リリース版が欲しい方はリリースに設定し、ローカル Windows デバッガーをクリックします。
e7

エラー等出ても気にしないで下さい。
e12

プロジェクトを閉じます。


7.フォルダ階層を戻り、EffekseerRuntime143d\src\Effekseerに入ります。
先ほどと同じようにEffkseer.vcprojに入ります。
e8

プロジェクトの再ターゲット画面が出た場合、再ターゲットして下さい。
e9


8.先ほどと同じように、デバッグ版のリンクが欲しい方はプロジェクトのターゲットをデバッグに、リリース版が欲しい方はリリースに設定します。ローカル Windows デバッガーをクリックします。
e10

エラー等出ても気にしないでください
e11

プロジェクトを閉じます。

9.フォルダ階層を一番上(EffekseerRuntime143d)まで戻り、src\lib\x86に入ります。
(x64でビルドした方はsrc\lib\x64です)

10.すると、このように2つのlibファイルができていると思います。
e14


11.自作ゲームのディレクトリを開き、ディレクトリにlibフォルダを作ります。
そして、出来上がった2つのlibファイルを自作のlibフォルダにぶち込みます。

更に、EffekseerRuntime143d\Compiled\lib\VS2017\Releaseにあるlibファイルを作成したlibフォルダにぶち込みます。(パスは人によってVS2015だったりDebugだったり)
e15


12.自作ゲームのディレクトリに、Effekseer_inclというフォルダを作成します。
次に、EffekseerRuntime143d\Compiled\includeに入り、そこにある.hファイルをEffekseer_inclフォルダにぶち込みます。
e17


13.自作ゲームのプロジェクトを開きます。(Debug と Releaseのターゲットを間違えないで下さい)
プロジェクトのプロパティページを開き、追加のインクルードディレクトリを開きます。
e18


14.追加のインクルードディレクトリにEffekseer_inclを追加します。
e19


15.追加のライブラリディレクトリに入ります。
e21


16.以下のようにパスを打ちます。パスが間違っているように見えますがこれでいいです。
e22


17.実行します。うまくいえばビルドが通ります。うまくいかなければ、LNK2001エラー等が出ますので、もう一度手順を見直したり、色々いじくってみて下さい。

18.EffekseerRuntime143d\RuntimeSampleにサンプルがありますので.slnをクリックして、コードを表示し、参考にしつつ自分のゲームに組み込んで下さい。
注意点としては、

#include <d3d9.h>
#pragma comment(lib, "d3dx9.lib")

#include <Effekseer.h>
#include <EffekseerRendererDX9.h>

は必須です。特にd3d9.hはd3dx.hやd3d9d.hなどをインクルードしている方が、既にインクルード済みと勘違いする確率が高いと思われます(1敗)

また、サンプルのTextureフォルダやSoundフォルダは自作ゲームのディレクトリ直下に置きましょう。(エフェクトに設定したパスによる)
e23


うまくいけば自作ゲームのプロジェクトでエフェクトが再生できます。
e24


補足


サンプルのこの部分、”自分の”カメラ位置、注視点位置、上方位置にあわせてあげて下さい。
完全に同じにするとよいです。


// 視点位置を確定 (ここがカメラ位置)
g_position = ::Effekseer::Vector3D(0.0f, 0.50f, 15.0f);

// カメラ行列を設定 (ここが注視点位置、上方位置)
g_renderer->SetCameraMatrix(
::Effekseer::Matrix44().LookAtRH(g_position, ::Effekseer::Vector3D(0.0f, 0.50f, 0.0f), ::Effekseer::Vector3D(0.0f, 1.0f, 0.0f)));

// 投影行列を設定 (ここが投影行列の設定です。FovRHになっているので左手系でゲームを作っている方(カメラ座標を作っている方)はLHにします)
g_renderer->SetProjectionMatrix(
::Effekseer::Matrix44().PerspectiveFovLH(90.0f / 180.0f * 3.14f, (float)1920 / (float)1080, 1.0f, 100.0f));


// 描画用インスタンスの生成 (ここも自分のデバイス名にして下さいpDeviceなど)
g_renderer = ::EffekseerRendererDX9::Renderer::Create(自分のデバイス名, 2000);


どうしても分からなかった方、この記事にミスを見つけた方はこちらへご連絡下さい
https://twitter.com/dmsbot
duemachine@gmail.com
このエントリーをはてなブックマークに追加

ライティングの中でも最も単純で、処理速度が速いものがランバート拡散照明です。
これの基礎となる理論は「ランバートの余弦測」であり、

物体の輝度は光の入射ベクトルLと表面の法線ベクトルNとの内積に比例する。というものです。
NL


つまりHLSL上では、


dot関数で内積を計算してあげるとよい。
※輝度がマイナスになって真っ黒にならないように0.0以下の輝度にならないようにしているが、これは好みの問題です。

ちなみに完全版はこんな感じ


HLSLを読み込むコードはこんな感じである。



ライトベクトルをローカル座標系で作るためにワールド座標系をローカル座標系に戻す処理をしている。

実行結果:3Dモデルに自然な光を照らすことができる。
Lambert
このエントリーをはてなブックマークに追加

↑このページのトップヘ