2017-07

スポンサーサイト

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

ポイントスプライトでUV値指定

現在ポイントスプライトを使ってパーティクルの実験をしております。なぜに唐突にパーティクルをやりだしたかというと…実はいろいろと詰め込んできたこともあって箱○上での起動が極端に遅くなってきていました。怪しいのはキャラクラスで、デカイ上に樽だろうがエフェクトだろうがなんでもキャラ扱いにしてきました。しかもエフェクト類はゲーム開始時に多めにワークを確保しているせいでメモリ確保とGC頻発(さらに言うと、クラスばかりで構造体をうまく使っていないためGCが重い…)で起動が遅くなっていました。仕方なくこの段階で大掛かりなリファクタリングをしてキャラクラスのシェイプと、量産時の作業効率化のために調整をしておりました。
で、実は本当に重いのはキャラクラスではなくモデルのインスタンスであることに気づきました。特にアイテムとお金! このゲームでは敵や樽からアイテムが出るのですが、そのアイテムを3Dモデルとして画面に表示するつもりだったのですが、【画面に配置できる最大量(20個)×アイテムの種類(約40種)=800モデル】というわけで760個のインスタンス生成がありました。細かい話はわかりませんが、リモートパフォーマンスモニタで確認した限りでは、マネージドメモリの確保が180M近く行われておりました。本当に必要な物なら仕方ないですが、たかだかアイテムの表示のために待ち時間がそこまで増加することはプレイヤーにとって有益ではないと判断し、スプライト表示にすることにしました。
で、ポイントスプライトです。前置き長!
ポイントスプライトというのはXNAで使える、簡単に扱えるパーティクル機能です。サンプルはクリエイターズクラブオンラインのものよりもヘルプからリンクされているものがシンプルでお勧めです。CCOの奴は仕組みとしては立派なんでしょうけども、読解するのが面倒です。サクっと使いたい人には不向きです。
さて、私もサクっと実装したい派ですので、サンプルをコピペして参考にゲームに組み込んでみたのですが、このままだと奥行きに合わせてサイズが変わらないようですね。うちのゲームは奥行き=X軸固定なので、適当に設定すればOKかな。
問題はUVですね。通常のポリゴンなら四角形の描画には4つの頂点を使い、それぞれに2次元ベクトルのUV座標があり、これでテクスチャー内で使用する範囲を指定します。ですが、ポイントスプライトは1頂点で四角形を描画するためそのままではUVを指定できません。というかそう思っていました。
ヘルプにあったHLSLのピクセルシェーダー内でUVの入力値を出力側に渡す箇所があるのですが、なんとここで乗算・加算・減算するとUVが指定できます! びっくりです。具体的にはtexCoord *= 0.5f;とすればテクスチャー左上50%を使用することができます。texCoord = texCoord * 0.5f + 0.5f;とすれば右下50%となります。(texCoordはfloat2です)
なんで足すと右下になるん? 元の数値が(1,1)だったら0.5倍に0.5足したら1に戻るだけなんじゃないの? ねぇ…。そんな気がするのですが、なぜか期待通りの結果が得られます。一応360上でも動作していました。

● COMMENT FORM ●

おぉ~。アイテムモデルを1枚板化してるんですね。(゜∀゜)イイ!!
DQ9でもかなり、その手法になってますよね。その分、他のモデル数が稼げる!(^^)
今になってDQMJを起動すると、カメラワークがフルで回転するDQMJと、大して回転しないDQ9の差が歴然としているのが判ります。

そしてパーティクルですか~。
私は将来、ウィザードの炎の表現でそれをやるつもりでしたが、UVは全然気にしてなかったです。(^^ゞ
でも、遠近でサイズ変更が必要だったから、自然とHLSLでやらないとダメという事だけは判っていました。
しかし、Karu_gamoさんの記事を読んでからフト考えると、何かしらのアニメーションをさせるならUV処理は必要になるんですよね。ビットマップファイル(アセット)の切り替えとかで実現しないのであれば…(最初はこれでいいやなんて思っていましたが…)

右下50%の件は…私には判りません…なんでなんでしょね?実の数値を見てみないと想像の域を出ないです。(^^;

こんにちは~OKIさん。
アイテムはやっぱビルボードですかね~。描画負荷的にはモデルでも大したことないんですが、やっぱモデルクラスのインスタンスの挙動がなんとも怪しくて…。とりあえず、ポイントスプライトを作りこんでいこうと思います。
パーティクルは数多くだすのであれば、アニメーションなくても形になると思います。ただ、表現的にアニメっぽくしたい場合はどうしてもパターンがほしくなりますね~。テクスチャーの切り替えも検討したんですが、やはり描画はできるだけいっぺんに行わないと無駄に描画に負荷かかっちゃいますので。といっても、まだモデル関係は無駄が多いんですが…。まぁそこはいずれ…。
右下50%の件はデバッグすればいいんでしょうけど…面倒なので放置していますwww


管理者にだけ表示を許可する

トラックバック

http://karuduck.blog50.fc2.com/tb.php/146-f2574d16
この記事にトラックバックする(FC2ブログユーザー)

NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

プロフィール

Karu_gamo

Author:Karu_gamo
<メールアドレス>
karu_gamo#hotmail.co.jp
#を@に置き換えてえてください。

<自分リンク>
かるがも研究所【新】
YouTubeチャンネル
公開素材置き場
仕様書
旧ブログ(見るとこないです)
管理者ページ

リンク

YouTube動画

FC2カウンター

カテゴリー

Twitter

 

月別アーカイブ

RSSフィード

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