スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

トップ

ようこそ

ぴおが製作したゲームとか置いてます。


制作物
微塵に砕かれるテンシちゃん


ソードマスターテンシ

初東方二次創作。
ソードマスターのテンシが仇なす敵を微塵に砕く、
テイルズ風ソードアクション。


最近のこと



戦闘ヘリMOD
戦闘ヘリMOD1.4.6対応版つくりました。


東方Project・攻略ブログ
スポンサーサイト

[UE4]ビームつくった




Twitterに参考URLを2つ貼ったツイートをしたら、二つ目が消えてしまったので、ブログにまとめておきます。

ほげたつブログ - UE4でレーザービームを実装する

この記事を参考にしました。FirstPersonGunのBlueprintとかはまんまです。
とにかくビームを出したかったので、記事ではFirstPersonGunを使いまわしていますが、自分はSpawnで沢山出してます。

Youtube - 7 - Creating a Beam Emitter

ビームのパーティクルの作り方。
実際に使うのは上のブログ記事の通り、6分辺りまでの作業。

UE4 の学び部屋 - パーティクル入門 (7) ビーム エミッタを作る

ビームエミッタ動画の日本語解説です。動画一通り見たらこっちで。

YouTube - 4 - Creating a Sprite Emitter
UE4 の学び部屋 - パーティクル入門 (4) スプライト エミッタを作る

上記のビームエミッタ動画と同じく、スプライトのエフェクトのチュートリアル動画とその日本語解説です。
発射と着弾のパーティクルを作る時に参考にしました。

[Unity]AndroidでStreamingAssets内のjsonを使う

ゲームで使うデータ(敵のステータスだったり)をjsonで保存して使っているのですが、Android実機で使うときにいろいろ詰まったのでメモ。

データの配置

Assetsフォルダの中にStreamingAssetsフォルダを作成し、その中にデータを配置します。
StreamingAssetsフォルダ内のファイルは、アプリケーションと一緒にビルドされます。

Unity - マニュアル: ストリーミングアセット

データのロード

StreamingAssets内のファイルへのパスは、

var path = Application.streamingAssetsPath + "/" + localpath;


で作成します。

データの読み込みには、WWWクラスを使用します。

www.textで読み込んだデータのテキストが取得できますが、これをそのままJsonUtility.FromJson<>()に渡すとエラーが起きます。
これはBOMが付与されているのが原因で、先頭3byteを飛ばしてからデシリアライズを行います。


WWW www_load = new WWW( filepath );
while (!www_load.isDone);

byte[] savebytes = www_load.bytes;
var encode = new System.Text.UTF8Encoding(false);
string savejson = encode.GetString( savebytes, 3, savebytes.Length - 3 ); // BOMを無視する

var data = JsonUtility.FromJson<Data>(savejson);


こんな感じのコードを使っています。
エディタ上だと、WWWクラスに渡すパスの先頭に"file:///"が必要なので、Application.platformで場合分けして付与します。

Unityで作成したAndroidアプリでファイルをxml形式で読み書きする - Qiita

Unity - スクリプトリファレンス: WWW

[DirectX9]水面シェーダー




今回も例のごとく参考にしたサイトの備忘録です。

ひっかかったところ
・描画の管理
今まで単一のシェーダーで全てのモデルを描画していましたが、水は特殊なので、別にすることに。
水面メッシュの描画を担うOceanRendererクラスと波マッピングするWaveMapクラスを作って、既存の描画管理クラスで非透過オブジェクトの描画後に、水を描画しました。

・SetFVF関数だと、TANGENTとBINORMALが使えない
頂点バッファは面倒くさいので、簡単なメッシュにはDrawPrimitiveUPをいつも使ってたんですが、バンプマッピングで使われるTANGENTのような接空間法線にFVFは対応していませんでした。
DrawPrimitiveを使う形にして、CreateVertexDeclarationで専用の頂点データフォーマットを指定して解決。

・テクスチャの解像度と波
自分のところでは画面全体に水が表示されるので、テクスチャの解像度を上げたところ「海にどでかい水滴がぽつぽつ落ちてる」感じになって、ものすごい違和感が出てしまいました。
参考にしたサイトのシェーダーは、1フレームに波を1つずつしか追加出来なかったので、16個波を同時に発生させられるように拡張して、更に波の影響範囲を広げました。
コードはこんな感じです。
// 波の発生
for( int i = 0; i < 16; ++ i )
{
if( distance( In.Tex, AddWavePos[ i ] ) < 0.01f )
{
V + AddWaveHeight[ i ];
}
}


参考文献

Maverick Project - 波シェーダー

まんまこれです。

Maverick Project - 視差マッピング

波の法線テクスチャを描画する際のテクニックがこちらです。

○×(まるぺけ)つくろーどっとコム - その5 0から学ぶ法線マップ

バンプマッピングの接空間の解説です。

ゲームプログラミング技術集 - HLSL アプリケーション側の実装方法

水面のメッシュに自力でTANGENTやBINORMALを頂点データに入れる際に参考にしました。

[DirectX9]「VarianceShadows11」をDirectX9で実装した




タイトルのまんまです。
元々、シャドウマッピングを実装していましたが、今回DirectX公式サンプルの「VarianceShadows11」の各種テクニックを実装しました。

前回のHDRライティング同様、実装に関してはサンプルのまんまなので、参考にしたサイトをメモ。

参考文献
VarianceShadows11サンプルは、「分散シャドウマップ」に加えて、「カスケードシャドウマップ」と「ライト空間透視シャドウマップ」などのテクニックも取り入れられているので、各アルゴリズムごとにリンクを貼っておきます。

カスケードシャドウ(Cascaded Shadow Maps)
MSDN - カスケード シャドウ マップ
公式サンプルの解説ページです。

☆PROJECT ASURA☆ [Direct3D 11] 『平行分割シャドウマップ』
「カスケードシャドウ」に焦点を当てた解説が書かれています。
公式サンプルでは分割距離は手動でしたので、こちらで取り上げられていた平行分割を実装しました。
DirectX9ではテクスチャ配列が使えなかったので、こちらのif文での分割シャドウマップの選択も参考にしました。

分散シャドウマップ(Variance Shadow Maps)
【分散シャドウマップ】 – Variance Shadow Maps - | 株式会社ヘキサドライブ |
「分散シャドウマップ」に焦点を当てた解説が書かれています。

OpenGL ES 3.0 @ 分散シャドウマップ - ラーメンは味噌汁
OpenGLですが分散シャドウマップだけのコードも書いてあるので、比較しながらサンプルのコードを読みました。

MSDN - カスケード シャドウ マップ
カスケードシャドウマップの解説ページですが、VSMについても下の方で解説されています。

ライト空間透視シャドウマップ(Light Space Perspective Shadow Maps)
☆PROJECT ASURA☆ [OpenGL] 『Light Space Perspective Shadow Maps』
ライト空間透視シャドウマップに焦点を当てた解説をされています。

その他改良テクニック
☆PROJECT ASURA☆ [Direct3D 11] 『シャドウマッピングの基本』
下のほうに深度バイアスの計算についての解説がありますが、サンプルのRenderVarianceScene.hlslのCalculateVarianceShadow関数でこのテクニックが使われています。
DirectX9では、SampleGrad関数が使えないので、上記のサイトを元にバイアスを計算しました。


最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
プロフィール

ぴお

Author:ぴお
ようこそ

自分のゲーム制作での備忘録や製作記録を書き留めておくブログです。

■やってるサービス
Twitter:piorimumu

Pixiv
http://www.pixiv.net/member.php?id=1126385

Twitter
このページのトップへ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。