プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
複数のテクスチャを貼り付けた自作地形
試行中の自作地形
強引な手法により複数テクスチャを実現。任意ポリゴンのテクスチャ差し替えが容易にできるという特長がある。



◎VertexElementUsage.Sampleの用途

複数のテクスチャを扱うために、頂点データフォーマットを拡張して、頂点データにテクスチャ番号を追加しました。しかしVertexElementUsageにSampleを指定した状態で実行すると、頂点定義データを作成する所で落ちました。


原因を調べると、そもそもVertexElementUsage.Sampleは、テセレーション(曲面を三角形に分割する処理)を行うために、VertexElementMethodやUsageIndexと組み合わせて使用すべきもののようでした。
マニュアルには「UsageIndex = 0 の Sample」の記述しかありませんが、「UsageIndex = 1」としても、同様に落ちました。
要するに、VertexElementUsage.Sampleは、テクスチャ番号の格納用には不適だったのです。


私は、VertexElementUsageは"対人向けの注釈コメント"程度に考えていたのですが、プログラムの動作にも影響するのですね。

VertexElementUsage.Sampleの前例が見当たらない理由もわかりました。自力でテセレーションまで踏み込まない限り、使用しないってことですね。



◎B案断念

VertexElementUsageには、他にテクスチャ番号を追加するようなメンバーが見当たりません。つまり「そんな使用方法は一般的に想定されていない」ってことです。ガーン!
…残念ですが、この段階でB案は諦めることにしました。


VertexElementUsageには、他に"動作に影響しない"メンバー(Depthなど)もあるので、そちらにテクスチャ番号を追加すればまだ可能かもしれません。

でも、独自路線を突っ走るということは、後で様々な問題に直面する、ということです。それを乗り越えるだけのメリットがB案に感じられない以上、固執すべきではありません。



◎でも試してみた

B案は止めると決めましたが、後学のために、B案方式の表示が可能か否か試すことにしました。
…う~ん、やはり一筋縄ではいかないようですね。

一番の問題は、ピクセルシェーダの入力セマンティクスにCOLORとTEXCOORDしか存在しない点です。
ピクセルシェーダ入力用構造体には、頂点シェーダ出力用構造体を流用できますが、その場合、COLORとTEXCOORD以外の宣言は無視され、ピクセルシェーダ内部で使うことはできないようです。

これでは、頂点シェーダからピクセルシェーダにテクスチャ番号を受け渡すことができません。そこで、Color.a(透明度)にテクスチャ番号を無理矢理突っ込むことにしました。

Color.aはfloat型で0~1の範囲なので、テクスチャ番号もそれに合わせましたが、どこかで誤差が生じるらしく(?)、=(イコール)判定では引っかからないので、<(大小比較)判定としました。

それから、ピクセルシェーダのバージョン1.1では、別のサンプラに同一のテクスチャ座標を渡すとエラーになるので、ピクセルシェーダのバージョンを2.0に上げました。

というわけで、何とか冒頭図の状態になりました。

今回のHTML
(問題ありまくりなので、良い子のみんなはマネしないでね!w)



◎テクスチャ差し替え

ここまできたら、是非試したいことがあります。

「頂点データ内のテクスチャ番号を変更すると、見た目に反映されるのか?」

というわけで、Update()にコードを追加し、プログラム実行中にスペースキーを押してみました。

スペースキー押下前   スペースキー押下後
スペースキー押下前(左図)と押下後(右図)

おお!テクスチャが瞬時に差し替えられました!スゲ~!
他のやり方じゃ、任意ポリゴンのテクスチャを、こんな簡単に差し替えられないですよね?!

地形モデルが1つに統合されて、CPU使用率は約70%。性能も機能も目標通りです。このまま捨てるのは惜しい気がしてきました…。



◎次回予告

決心が揺らいでしまったので、
このまま継続すべきか?
別の方式で作り直すべきか?
もう一度考え直します。

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

コメントの投稿


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

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。