シェーダープログラマが集うスレ

このエントリーをはてなブックマークに追加
507名前は開発中のものです。:2011/10/17(月) 00:34:28.42 ID:avtsDiyY
>>506

マルペケつくろーどっとコム
http://marupeke296.com/

MaverickProject
http://maverickproj.web.fc2.com/pg00.html#DirectX9

ProjectASURA
http://asura.iaigiri.com/program.html

もんしょさんのサイト
http://sites.google.com/site/monshonosuana/
http://monsho.blog63.fc2.com/


書籍もイイのがあるよ。

DirectXシェーダプログラミング
仕組みからわかるゲームエフェクトテクニック
http://www.sbcr.jp/products/4797344967.html

DirectX 9 シェーダプログラミングブック
http://book.mycom.co.jp/book/4-8399-1247-5/4-8399-1247-5.shtml
有名なプログラマさんの本。
今や東大の博士号持ち。
工学的素養があると読み易いだろうけど、そうじゃなくても気合があれば大丈夫。

がんばれ!
508名前は開発中のものです。:2011/10/17(月) 14:34:27.97 ID:eQZWcNCm
509506:2011/10/18(火) 12:25:28.02 ID:RTMVJYk1
おお、こんなにたくさん…ありがとうございます!
510名前は開発中のものです。:2012/01/25(水) 22:36:13.85 ID:ex6ghf32
質問です
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のモデルはメタセコイアで作成しました。
力を貸して頂きたいです。よろしくお願いします。
511名前は開発中のものです。:2012/01/25(水) 23:39:07.81 ID:7SJSf43i
>>510
VS_OUTPUT構造体の宣言見せて。
512名前は開発中のものです。:2012/01/26(木) 01:40:50.84 ID:EOsUmT1V
データには含まれてるのは確実だが取得できないってな風な言い方だがちゃんと確認してるんだろうな
メタセコ自体は頂点カラーないが、ちゃんとマテリアルから頂点カラーに変換してるんだろうな
色の違う2つ以上の隣接する面の境目の頂点はちゃんと面の数分の頂点にわけてるんだろうな
データに頂点カラーありません、もしくは全部白でしたって落ちなら、ちょっと確認すればわかるはず
それくらいのことにも頭の回らないやつはシェーダとかプログラムとか向いてないからやめちまえ
513510:2012/01/26(木) 22:10:35.18 ID:1uAW8pfc
>>511
struct VS_OUTPUT{
float4 Pos : POSITION;
float4 Col : COLOR;
};
構造体はこんな感じです

>>512
頂点色がxファイルに含まれてる事は確認しています
それ以下のことは数日前にシェーダ始めたばかりなので知りませんでした
調べてみます
514511:2012/01/26(木) 22:33:07.12 ID:anB1nVoG
>>513
う〜ん、問題無さそうだなぁ。
「頂点色が取得できない」とあるけど、
色が付かないだけ(黒で描画される?)で、
頂点通りの形状は描かれている感じ?

fx composerは知らないから何とも言えないけど、
シェーダに与えるデータストリームがどういう区切り
(1頂点につき座標、色なのでfloat8個分)なのかが、
シェーダ側が分かっていないのかも?

「1頂点が座標と色で成り立ってますよ」っていう情報は
どうやって教えてる?
515510:2012/01/26(木) 22:51:38.01 ID:1uAW8pfc
>色が付かないだけ(黒で描画される?)で、
>頂点通りの形状は描かれている感じ?

まさにその通りです
モデルに.fxを適応させると全部が黒く塗りつぶされてしまいます
適応させないと元のモデルまま表示されるのですが・・・
516511: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ともに意図した通りの表示になるなら頂点シェーダからピクセルシェーダへの
データ渡しがうまくいっていない可能性がある。
517名前は開発中のものです。:2012/01/28(土) 02:16:32.29 ID:RxUZAweR
>>516
試してみました
テスト1:変わらず黒く塗りつぶされたままでした
テスト2:指定した色で塗りつぶされました

また、関係ないかもしれませんが頂点シェーダで
Out.Col = float4(1,1,0,1);
としたら黄色で塗りつぶされたモデルが表示されました。

一応確認の為xファイルをテキストエディタで開いて確認した所、ちゃんと頂点色はありました
(MeshVertexColors{〜〜} の所でいいですよね?)
518511:2012/01/28(土) 11:14:51.34 ID:MHEoVIAH
>>517
その結果だと、頂点シェーダの時点で色を渡せてないね。
FxComposerがxファイルを読み込むときに問題があるのかも。

今回問題のxファイルはモデラで作ったの?
どっかから拾ってきたやつ?
できればアップローダにアップしてほしい。
519名前は開発中のものです。:2012/01/28(土) 20:20:15.04 ID:RxUZAweR
>>518

モデルはメタセコイアで自作しました。
作成したxファイルを下にアップロードしました。
特にパスワードなどは指定していませんのでそのままダウンロード出来るかと思います。
ttp://www.rupan.net/uploader/download/1327749433.x
520511: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のほうを使ってくれるのかな?
521511:2012/01/28(土) 21:13:44.59 ID:MHEoVIAH
ごめん、Diffuse色は一番上のRGBAだね。
んで、そこいじったとしても、>>510のコードでは色が付かない可能性が高い。
DirectXプログラムでは、マテリアルの色を使う場合、ホスト側からGPUのグローバル変数として色を指定するし。
頂点色を使う場合はFVFを使ってできるんだけど。
FxComposerがどういう仕組みでデータを流してるのか分からないと対策立てにくいなぁ。
522510:2012/01/28(土) 21:50:29.35 ID:RxUZAweR
>>512
520の内容を試してみたのですが521の予想通り真っ黒でした・・・。

もう一度FxComposerとDirectXの仕様等々を調べてみます。
3日間にわたって質問に答えて頂いてありがとうございました。
523511:2012/01/29(日) 00:21:59.53 ID:fwAvUd6T
>>522
FxComposer2.5インストールして試してみた。
たしかに頂点カラー、読み込めないね。
マテリアルカラーは、FxComposerに放り込んだ時点で反映されて表示されるものの、
それをHLSLで使うことはできないみたい。
しかも、複数マテリアルだと、表示はするものの、編集は一つしかできないw
頂点カラーについては読み込もうとすらしていないような気がするw
こういう使い方は想定されていないんじゃないかと思う。

そこで、FxComposerを使わない代替案を考えたほうがイイと思うんだが、
>>510がHLSLの勉強をするにあたって、目標としていることは何だろうか?
どうしてもFxComposerを使わなければならない理由はある?
DirectXプログラムでグラフィック表現したいとかだったら、
簡単なDirectXプログラムを組んで、その上でシェーダ開発したほうがより実践的で良いこともある。
(FxComposerの魅力的な機能も捨て難いけどね)
524名前は開発中のものです。:2012/01/29(日) 08:28:33.79 ID:WliZ25k9
>>523
なるほど。。。
わざわざありがとうございます!

HLSLを勉強する目的はゲームエフェクトを作成したいと考えているのです
もっと突っ込むと少しパラメータをいじると炎の大きさや色を変えてエフェクトファイルを出力する、と言った
知識なしである程度のエフェクトを作成することのできるツール(?)を作りたいな〜と。
なのでFxComposerを使わなければならない理由はありません。

>>DirectXを組む
昔挑戦して挫折したんですよね…
この機会にリベンジしてみます!
525511:2012/01/29(日) 10:15:08.05 ID:fwAvUd6T
>>524
おお、パーティクルエディタか!
おもしろそうだね!
パーティクルの挙動とかをゲーム実行時に動的に制御したりとか幅を広げることを考えると、
DirectXをベースにした開発基盤を構築したほうがベターではあるね。

DirectXプログラム、しんどいとは思うけど、よい志があるんだからがんばってほしいな。
フリーで高性能なゲームエンジンが台頭している中、熱いよ君。
また壁に当たったら、このスレやDirectXスレで聞いてみてくれ。
応援してるぞ。
526510:2012/01/29(日) 12:55:50.63 ID:WliZ25k9
>>525
Mayaとか3DSmax使えば簡単にできる事をわざわざやろうとしている変人ですw
が、そう言えってもらえるとモチベーション上がります!

DirectXから勉強初めて行きたいと思います
ありがとうございました!
527名前は開発中のものです。:2012/04/01(日) 04:41:47.17 ID:Q9dYuBbF
一つのシェーダ「A」を作って、そのシェーダからテクスチャや各種強度の数値などのパラメータ部分だけを変更したマテリアルを使う場合
シェーダが一つでもそれを使うマテリアルの種類が多ければ多いほど処理が重くなるのかな?
528名前は開発中のものです。:2012/04/01(日) 10:22:14.70 ID:6VgRhCgv
マテリアル切り替えのコストはけっこう大きいと聞いたことがある。
だいぶ前の話なので、最近は気にならないレベルに改善されてるかもね。
529名前は開発中のものです。:2012/04/20(金) 20:07:54.18 ID:cSwGsiDe
DirectX9でHLSL使っていろいろ実験してるけど
シェーダ面白いね
530名前は開発中のものです。:2012/04/20(金) 20:08:30.98 ID:WD2vQjf/
間違いない。
531名前は開発中のものです。:2012/04/23(月) 04:04:41.38 ID:mFLfC3GZ
UDKでこーいうシェーダ作ったら?
HLSL直接使うこともできるみたいだし
http://unreal.rgr.jp/Mydownloads/WL-Shader/index.htm
532名前は開発中のものです。:2012/06/25(月) 01:16:20.19 ID:pz+hnE9H
初心者です、質問させてください。
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辺りも理解が曖昧ですが分かりやすい解説などあれば教えて欲しいです。
533532: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などしか
引っかかってきません。
535名前は開発中のものです。:2012/09/28(金) 17:16:37.75 ID:pGRLAsEf
光芒って、事前に用意したテクスチャを上からかけるだけじゃね普通。
536名前は開発中のものです。:2012/09/29(土) 13:50:47.33 ID:3t35+0xV
元の画面を描画
輝度の高いところを抽出
座標をずらしつつ何度も重ね合わせて光芒を作成
元の画面に重ね合わせる

って手順だったはず
t-potさんのサイトに解説されてないかな?
なかったらごめん

あと検索ワードは俺も分からぬ
537名前は開発中のものです。:2012/09/29(土) 17:26:32.68 ID:kNOGECAw
545です

>>535
>>536
ありがとうございます。
なるほど、いろいろやり方があるのですね。
というか光芒といってもいろいろあるからそのイメージが伝えきれてなかった
かもしれないのでその点申し訳なかったです。

今さらですが一応イメージに近い動画があったので貼らせていただきます。
http://eimeiblog.blogspot.jp/2012/05/blog-post.html

これをみるとやはりテクスチャなのかな・・・

t-potさんのサイトも拝見させていただきました。
資料が多くてまだ全部見れておりませんが、
一通り見て参考になる部分を探してみます。

ありがとうございました。
538名前は開発中のものです。:2012/11/23(金) 05:18:14.28 ID:AovfMVV6
英語だけど。
http://www.john-chapman.net/content.php?id=18
BattleField3でも使われてる手法らしい。
539名前は開発中のものです。:2012/11/30(金) 01:09:49.71 ID:00w5sS93
シャドウマッピングについて学びたいんですが、おすすめの書籍やサイトなどありますでしょうか?
「リアルタイムシャドウ」http://www.amazon.co.jp/dp/4862461670/
これを買ってみたんですが、ちょっと自分には難し過ぎた・・・。
デプスマップベースのシャドウの基本から説明されてる資料などあれば教えていただけるとありがたいです。
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の方にすると正常に描画されなくなる。
原因を教えたってくれませんかエロイングマスター
541名前は開発中のものです。:2013/02/03(日) 23:08:17.08 ID:eDNmQd5c
>>540
カレントディレクトリの問題じゃないの?
542名前は開発中のものです。:2013/02/04(月) 00:38:23.68 ID:0LtSSVEY
>>541
>ちなみにパーティクルAかBのどちらかの頂点バッファ作成をD3DPOOL_DEFAULT/D3DUSAGE_DYNAMIC + D3DUSAGE_WRITEONLYにすると正常に描画される。
543名前は開発中のものです。:2013/02/04(月) 15:47:46.83 ID:UH4q0YWP
こういうエラーはメモリ関係のエラーだろうから、頂点バッファが小さいとかそんなんじゃないかな。
544名前は開発中のものです。:2013/02/05(火) 00:53:28.45 ID:vUHvhijN
>>543
>頂点バッファが小さい
え、どういうことですか?
エロイングマスター?
545名前は開発中のものです。:2013/03/27(水) 13:44:51.12 ID:QDEOgrIT
SL#(えすえるしゃーぷ)とは、GPUで実行されるプログラマブルシェーダーを、超高級言語である
C#で書けてしまうという夢のようなオープンソースのフレームワークである。
http://monobook.org/wiki/SL_Sharp
546名前は開発中のものです。:2013/05/25(土) 18:51:03.57 ID:5dZRrkox
シェーダモデル4のHLSLエフェクトのデバッグをしたいんだけど、FX ComposerがうちのPCで起動しない
(スプラッシュウィンドウ表示中に「エラーが発生しました」的な簡素なダイアログが出て落ちる)

他に、エフェクトの動作確認ができるソフトを知っていたら、誰か教えてくれないだろうか
VisualStudio2012の非Express版にはデバッグ機能があるらしいけど、さすがにちょっと躊躇する値段なので…
547名前は開発中のものです。:2013/06/03(月) 01:26:32.53 ID:0Yr2xDOm
>>546
FX Composerのエラー落ちは
fxc.fxconfig内が文字化けしてるからだと思う
先頭の・ソを消せば動いたよ
548名前は開発中のものです。:2013/06/03(月) 07:19:16.51 ID:NO4gYCXJ
>>547
ありがとう。動いた。
549名前は開発中のものです。:2013/06/03(月) 08:24:45.20 ID:0NlGnAV1
>>547
BOM関係なんとかならんもんかねぇ
550名前は開発中のものです。:2013/09/03(火) 09:23:37.63 ID:HkT760oG
hlslやglslで簡単なコードは書けるのですが
少し難解な計算式などが出てくると途端にわからなくなってしまいます
そこで3dcg数学が学べる書籍などがあればご教授ください
よろしくお願いします
551名前は開発中のものです。:2013/09/14(土) 10:26:40.09 ID:rfeQOBXR
個人的には
「ゲームプログラミングのための3Dグラフィックス数学」
はなかなか良かったように思う。
552名前は開発中のものです。:2014/06/22(日) 17:14:29.21 ID:YNLUwJzN
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にクランプするべきか、重みあり平均を取るか。
光源の数だけトゥーンシェーディング用のテクスチャを持たせて重ねる手もある。

あと、野外で強い日光が差しているだけの場合、補助の光源をどう設定するか、
色々考えることが多いね。技術的なことだけ分かればいいわけではないみたい。
555名前は開発中のものです。:2015/01/08(木) 20:17:03.34 ID:Mw182kRW
環境光(ambient)は使わないの?
556名前は開発中のものです。
ああ、“真っ暗”という書き方は分かりにくかった、申し訳ない。

トゥーンシェーディングなので、環境光とか設定しなくとも
用意したグラデーションテクスチャの一番暗い色になるんよ。

逆光になる側だと、顔全体がその一番暗い色になるというわけ。