509 :
506:2011/10/18(火) 12:25:28.02 ID:RTMVJYk1
おお、こんなにたくさん…ありがとうございます!
質問です
fx composer2.5でHLSLの勉強をしているのですが頂点色が取得できません
コードは以下の感じで。
VS_OUTPUT mainVS(VS_OUTPUT input){
VS_OUTPUT Out = (VS_OUTPUT)0;
Out.Pos = mul(input.Pos, mWVP);
Out.Col = input.Col;
return Out;
}
float4 mainPS(VS_OUTPUT input) : COLOR {
return input.Col;
}
ちなみに3Dのモデルはメタセコイアで作成しました。
力を貸して頂きたいです。よろしくお願いします。
>>510 VS_OUTPUT構造体の宣言見せて。
データには含まれてるのは確実だが取得できないってな風な言い方だがちゃんと確認してるんだろうな
メタセコ自体は頂点カラーないが、ちゃんとマテリアルから頂点カラーに変換してるんだろうな
色の違う2つ以上の隣接する面の境目の頂点はちゃんと面の数分の頂点にわけてるんだろうな
データに頂点カラーありません、もしくは全部白でしたって落ちなら、ちょっと確認すればわかるはず
それくらいのことにも頭の回らないやつはシェーダとかプログラムとか向いてないからやめちまえ
513 :
510:2012/01/26(木) 22:10:35.18 ID:1uAW8pfc
>>511 struct VS_OUTPUT{
float4 Pos : POSITION;
float4 Col : COLOR;
};
構造体はこんな感じです
>>512 頂点色がxファイルに含まれてる事は確認しています
それ以下のことは数日前にシェーダ始めたばかりなので知りませんでした
調べてみます
514 :
511:2012/01/26(木) 22:33:07.12 ID:anB1nVoG
>>513 う〜ん、問題無さそうだなぁ。
「頂点色が取得できない」とあるけど、
色が付かないだけ(黒で描画される?)で、
頂点通りの形状は描かれている感じ?
fx composerは知らないから何とも言えないけど、
シェーダに与えるデータストリームがどういう区切り
(1頂点につき座標、色なのでfloat8個分)なのかが、
シェーダ側が分かっていないのかも?
「1頂点が座標と色で成り立ってますよ」っていう情報は
どうやって教えてる?
515 :
510:2012/01/26(木) 22:51:38.01 ID:1uAW8pfc
>色が付かないだけ(黒で描画される?)で、
>頂点通りの形状は描かれている感じ?
まさにその通りです
モデルに.fxを適応させると全部が黒く塗りつぶされてしまいます
適応させないと元のモデルまま表示されるのですが・・・
516 :
511:2012/01/26(木) 23:33:37.53 ID:anB1nVoG
>>515 なるほど。
原因箇所を絞りたいから、以下を試してほしい。
テスト1 : ピクセルシェーダを使わず、頂点出力をダイレクトに出力する。
technique記述で
PixelShader = NULL;
と記述する。
テスト2 : ピクセルシェーダで固定色を出力させる
return input.Col; を
return float4( 1.0f, 0.0f, 0.0f, 1.0f ); などとする
テスト1で色が付かないなら、頂点シェーダの時点でデータがおかしいorうまくデータを渡せていない。
テスト1がOKでテスト2がダメなら、そもそもピクセルシェーダが働いていない可能性がある。
テスト1、2ともに意図した通りの表示になるなら頂点シェーダからピクセルシェーダへの
データ渡しがうまくいっていない可能性がある。
>>516 試してみました
テスト1:変わらず黒く塗りつぶされたままでした
テスト2:指定した色で塗りつぶされました
また、関係ないかもしれませんが頂点シェーダで
Out.Col = float4(1,1,0,1);
としたら黄色で塗りつぶされたモデルが表示されました。
一応確認の為xファイルをテキストエディタで開いて確認した所、ちゃんと頂点色はありました
(MeshVertexColors{〜〜} の所でいいですよね?)
518 :
511:2012/01/28(土) 11:14:51.34 ID:MHEoVIAH
>>517 その結果だと、頂点シェーダの時点で色を渡せてないね。
FxComposerがxファイルを読み込むときに問題があるのかも。
今回問題のxファイルはモデラで作ったの?
どっかから拾ってきたやつ?
できればアップローダにアップしてほしい。
520 :
511:2012/01/28(土) 20:43:37.04 ID:MHEoVIAH
>>519 アップありがとう。
これ、たぶんMaterialのほうの色を見てるね。
DirectXViewerで開いてみたら真っ白なんで、あれ?って思って中身見てみた。
MeshMaterialList中にある
Material {
0.800000;0.800000;0.800000;1.000000;;
5.000000;
0.000000;0.000000;0.000000;;
0.000000;0.000000;0.000000;; ← こいつがRGB(レンジは0.0〜1.0ね)
}
をいじると色が付いて見えたよ。
たぶんFxComposerでも色が付くんじゃないかな。
どうやったらMeshVertexColorsのほうを使ってくれるのかな?
521 :
511:2012/01/28(土) 21:13:44.59 ID:MHEoVIAH
ごめん、Diffuse色は一番上のRGBAだね。
んで、そこいじったとしても、
>>510のコードでは色が付かない可能性が高い。
DirectXプログラムでは、マテリアルの色を使う場合、ホスト側からGPUのグローバル変数として色を指定するし。
頂点色を使う場合はFVFを使ってできるんだけど。
FxComposerがどういう仕組みでデータを流してるのか分からないと対策立てにくいなぁ。
522 :
510:2012/01/28(土) 21:50:29.35 ID:RxUZAweR
>>512 520の内容を試してみたのですが521の予想通り真っ黒でした・・・。
もう一度FxComposerとDirectXの仕様等々を調べてみます。
3日間にわたって質問に答えて頂いてありがとうございました。
523 :
511:2012/01/29(日) 00:21:59.53 ID:fwAvUd6T
>>522 FxComposer2.5インストールして試してみた。
たしかに頂点カラー、読み込めないね。
マテリアルカラーは、FxComposerに放り込んだ時点で反映されて表示されるものの、
それをHLSLで使うことはできないみたい。
しかも、複数マテリアルだと、表示はするものの、編集は一つしかできないw
頂点カラーについては読み込もうとすらしていないような気がするw
こういう使い方は想定されていないんじゃないかと思う。
そこで、FxComposerを使わない代替案を考えたほうがイイと思うんだが、
>>510がHLSLの勉強をするにあたって、目標としていることは何だろうか?
どうしてもFxComposerを使わなければならない理由はある?
DirectXプログラムでグラフィック表現したいとかだったら、
簡単なDirectXプログラムを組んで、その上でシェーダ開発したほうがより実践的で良いこともある。
(FxComposerの魅力的な機能も捨て難いけどね)
>>523 なるほど。。。
わざわざありがとうございます!
HLSLを勉強する目的はゲームエフェクトを作成したいと考えているのです
もっと突っ込むと少しパラメータをいじると炎の大きさや色を変えてエフェクトファイルを出力する、と言った
知識なしである程度のエフェクトを作成することのできるツール(?)を作りたいな〜と。
なのでFxComposerを使わなければならない理由はありません。
>>DirectXを組む
昔挑戦して挫折したんですよね…
この機会にリベンジしてみます!
525 :
511:2012/01/29(日) 10:15:08.05 ID:fwAvUd6T
>>524 おお、パーティクルエディタか!
おもしろそうだね!
パーティクルの挙動とかをゲーム実行時に動的に制御したりとか幅を広げることを考えると、
DirectXをベースにした開発基盤を構築したほうがベターではあるね。
DirectXプログラム、しんどいとは思うけど、よい志があるんだからがんばってほしいな。
フリーで高性能なゲームエンジンが台頭している中、熱いよ君。
また壁に当たったら、このスレやDirectXスレで聞いてみてくれ。
応援してるぞ。
526 :
510:2012/01/29(日) 12:55:50.63 ID:WliZ25k9
>>525 Mayaとか3DSmax使えば簡単にできる事をわざわざやろうとしている変人ですw
が、そう言えってもらえるとモチベーション上がります!
DirectXから勉強初めて行きたいと思います
ありがとうございました!
一つのシェーダ「A」を作って、そのシェーダからテクスチャや各種強度の数値などのパラメータ部分だけを変更したマテリアルを使う場合
シェーダが一つでもそれを使うマテリアルの種類が多ければ多いほど処理が重くなるのかな?
マテリアル切り替えのコストはけっこう大きいと聞いたことがある。
だいぶ前の話なので、最近は気にならないレベルに改善されてるかもね。
529 :
名前は開発中のものです。:2012/04/20(金) 20:07:54.18 ID:cSwGsiDe
DirectX9でHLSL使っていろいろ実験してるけど
シェーダ面白いね
間違いない。
初心者です、質問させてください。
tex2DってLOD計算を内部でやってると思うのですが
tex2Dlod使って同じ結果を導く方法が分かりません
x = ddx(UV*texWidth);
y = ddy(UV*texHeight);
d = log2(max(dot(x,x),dot(y,y)));
tex2Dlod(tex,float4(UV,0,d));
こんな感じかと思ってFXComposerで比較してみたけど若干見え方違って疑問
ddxとかddy辺りも理解が曖昧ですが分かりやすい解説などあれば教えて欲しいです。
533 :
532:2012/06/27(水) 00:51:33.17 ID:ZfBRZ2Wn
>>532のコード、2の対数の前にsqrt忘れてました。
LOD計算を初めシェーダに関してわからない事も多いので
他の勉強もしながら考えてみようと思います。
534 :
名前は開発中のものです。:2012/09/26(水) 23:17:33.59 ID:ibhDcE1q
レンズフレア(ゴーストじゃなくて光芒?の方です)を実装したいのですが、
実装レベルで解説されているサイトが見つけられなくて困っています。
そもそもあったとしても理解できるかわからないのですが、いいサイトまたは
検索キーワードがあったら教えてください。
光芒 グレア フレア レンズフレア シェーダ GLSL マルチパス
ゲームエフェクト フーリエ変換 FFT
それっぽいキーワード(やその組み合わせ)で検索しているのですが
ミドルウェアのその宣伝やプロモーション、完成したCGなどしか
引っかかってきません。
光芒って、事前に用意したテクスチャを上からかけるだけじゃね普通。
元の画面を描画
輝度の高いところを抽出
座標をずらしつつ何度も重ね合わせて光芒を作成
元の画面に重ね合わせる
って手順だったはず
t-potさんのサイトに解説されてないかな?
なかったらごめん
あと検索ワードは俺も分からぬ
537 :
名前は開発中のものです。:2012/09/29(土) 17:26:32.68 ID:kNOGECAw
538 :
名前は開発中のものです。:2012/11/23(金) 05:18:14.28 ID:AovfMVV6
539 :
名前は開発中のものです。:2012/11/30(金) 01:09:49.71 ID:00w5sS93
540 :
名前は開発中のものです。:2013/02/03(日) 15:20:42.83 ID:zdopk8OM
DirectX9シェーダでパーティクル(ポイントスプライト)やってるんだけど
2種類のパーティクルを同じD3DXEFFECTインスタンス経由(当然*.fxファイルも同じ)で描画しようとしている。
このとき、IDE(VisualStudio)からF5実行するときは正常に表示されるんだけど、
exe(Debug/Release)の直叩きで実行すると、2者のテクスチャが入れ替わったり、そもそも描画されなくなる現象に遭遇している。
ちなみに実行ステップ順は
pFX->Begin(0, 0);
pFX->BeginPass(0);
パーティクルA描画(頂点バッファ書き換えしてDrawPrimitive)
パーティクルB描画(頂点バッファ書き換えしてDrawPrimitive)
pFX->EndPass();
pFX->End();
またリソース作成は、
テクスチャ → D3DPOOL_MANAGED / D3DUSAGE_WRITEONLY
頂点バッファ(位置D3DXVECTOR3 + サイズFLOAT) → D3DPOOL_MANAGED / D3DUSAGE_WRITEONLY
テクスチャは、パーティクルAとBでそれぞれ別々に作成して確保している。
頂点バッファも、パーティクルAとBでそれぞれ別々に作成して確保している。
ちなみにパーティクルAかBのどちらかの頂点バッファ作成をD3DPOOL_DEFAULT/D3DUSAGE_DYNAMIC + D3DUSAGE_WRITEONLYにすると正常に描画される。
両方D3DPOOL_DEFAULTの方にすると正常に描画されなくなる。
原因を教えたってくれませんかエロイングマスター
>>540 カレントディレクトリの問題じゃないの?
>>541 >ちなみにパーティクルAかBのどちらかの頂点バッファ作成をD3DPOOL_DEFAULT/D3DUSAGE_DYNAMIC + D3DUSAGE_WRITEONLYにすると正常に描画される。
こういうエラーはメモリ関係のエラーだろうから、頂点バッファが小さいとかそんなんじゃないかな。
>>543 >頂点バッファが小さい
え、どういうことですか?
エロイングマスター?
シェーダモデル4のHLSLエフェクトのデバッグをしたいんだけど、FX ComposerがうちのPCで起動しない
(スプラッシュウィンドウ表示中に「エラーが発生しました」的な簡素なダイアログが出て落ちる)
他に、エフェクトの動作確認ができるソフトを知っていたら、誰か教えてくれないだろうか
VisualStudio2012の非Express版にはデバッグ機能があるらしいけど、さすがにちょっと躊躇する値段なので…
>>546 FX Composerのエラー落ちは
fxc.fxconfig内が文字化けしてるからだと思う
先頭の・ソを消せば動いたよ
550 :
名前は開発中のものです。:2013/09/03(火) 09:23:37.63 ID:HkT760oG
hlslやglslで簡単なコードは書けるのですが
少し難解な計算式などが出てくると途端にわからなくなってしまいます
そこで3dcg数学が学べる書籍などがあればご教授ください
よろしくお願いします
個人的には
「ゲームプログラミングのための3Dグラフィックス数学」
はなかなか良かったように思う。
が
553 :
名前は開発中のものです。:2014/07/31(木) 08:22:59.86 ID:7ITzcH4o
★2ch勢いランキングサイトリスト★
◎ +ニュース
・ 2NN
・ 2chTimes
◎ +ニュース新着
・ 2NN新着
・ Headline BBY
◎ +ニュース他
・ Desktop2ch
・ 記者別一覧
◎ 全板
・ 全板縦断勢いランキング
・ スレッドランキング総合ランキング
◎ 実況込み
・ 2勢
・ READ2CH
・ i-ikioi
※ 要サイト名検索
554 :
名前は開発中のものです。:2015/01/07(水) 18:48:15.94 ID:16mG7aLq
トゥーンシェーディングで光源を1つだけに限定にしたら、
当然と言うか、裏側は真っ暗になってしまった。
2つ以上に対応すればいいんだろうけど、単に光源の内積の総和を取って
0〜1にクランプするべきか、重みあり平均を取るか。
光源の数だけトゥーンシェーディング用のテクスチャを持たせて重ねる手もある。
あと、野外で強い日光が差しているだけの場合、補助の光源をどう設定するか、
色々考えることが多いね。技術的なことだけ分かればいいわけではないみたい。
環境光(ambient)は使わないの?
ああ、“真っ暗”という書き方は分かりにくかった、申し訳ない。
トゥーンシェーディングなので、環境光とか設定しなくとも
用意したグラデーションテクスチャの一番暗い色になるんよ。
逆光になる側だと、顔全体がその一番暗い色になるというわけ。