DirectX&OpenGL【シェーダ】プログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGDirectX8のVertex ShaderとPixel Shader
OpenGLのnvparse
これらのシェーダプログラミングの話題を積極的に扱うスレッドです。
DirectX全般に付いての話題はこちら
http://piza.2ch.net/test/read.cgi?bbs=tech&key=966655286&ls=50
OpenGL全般に付いての話題はこちら
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981044659&ls=50
各種情報、リンクは以下をどうぞ。
0002デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/developer/directx/downloads.asp
頂点シェーダ
http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpdx8_c/_dx_vertex_shaders_graphics.htm
ピクセル シェーダ
http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpdx8_c/_dx_pixel_shaders_graphics.htm
Direct3DX シェーダ アセンブラ リファレンス
http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpdx8_c/_dx_direct3dx_shader_assemblers_reference_graphicsd3dx.htm
MSDN Online - DirectX Developer Center
http://www.microsoft.com/japan/developer/directx/default.asp
Driving DirectX コラム
http://www.microsoft.com/japan/developer/directx/welcome/dsmsdn/default.asp
Cutting Edge DX 8
http://www.microsoft.com/japan/developer/directx/japan/dx8/default.asp
ATI Developer Relations
http://www.ati.com/na/pages/resource_centre/dev_rel/devrel.html
0003デフォルトの名無しさん
NGNGhttp://partners.nvidia.com/developer.nsf
NVIDIA Shader Contest Results
http://partners.nvidia.com/Marketing/Developer/DevRel.nsf/pages/587FFBD1FAC69B3688256A710083CE3C
NVEffectsBrower 2.0(日本語ドキュメントもある)
http://partners.nvidia.com/Marketing/Developer/DevRel.nsf/pages/1F7AF6E28D3531D788256993007DC8D7
NVIDIA OpenGL SDK (nvparseが入っている)
http://partners.nvidia.com/Marketing/Developer/DevRel.nsf/pages/EB02FF0130F8B59688256A0700748747
NVIDIA 日本語ドキュメント
http://partners.nvidia.com/Marketing/Developer/DevRel.nsf/pages/D80C19C1C70909C988256A78007DF7F4
NVIDIA アセンブラ NVASM
http://partners.nvidia.com/Marketing/Developer/DevRel.nsf/pages/F4F08ACF6BD1EF50882569940001C7E2
NVIDIA デバッガ NVIDIA Shader Debugger
http://partners.nvidia.com/Marketing/Developer/DevRel.nsf/pages/9FCC6D6AF5C748ED882569A000119F34
NVLink リンカ
http://partners.nvidia.com/Marketing/Developer/DevRel.nsf/pages/31CD0719CB852BAF882569DE000CB8EA
0004デフォルトの名無しさん
NGNGttp://suzuna.jp/
iceBOX
ttp://www.interq.or.jp/neptune/pepe/iceman/
0005デフォルトの名無しさん
NGNGもしかしてここ立てたのと同じ人?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=993662234&ls=50
0006デフォルトの名無しさん
NGNGhttp://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_program.txt
NV_texture_shader
http://oss.sgi.com/projects/ogl-sample/registry/NV/texture_shader.txt
NV_register_combiners
http://oss.sgi.com/projects/ogl-sample/registry/NV/register_combiners.txt
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGvs.1.0
;トランスフォーム
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
; ディレクショナル ライト
dp3 r0, v1, c4
max r0, r0.x, c6
; ディフューズ
mul oD0, r0.x, c5
; テクスチャ UV のセットアップ
mov oT0, v2
0009デフォルトの名無しさん
NGNG;texture0とtexture1ブレンド
ps.1.0
tex t0
tex t1
mov r1, t1
lrp r0, v0, t0, r1
0010デフォルトの名無しさん
NGNG; r0=0
slt r0,c0,c0
; r0=1
sge r1,c0,c0
; r0=abs(r0)
max r0,r0,-r0
; r0.z = pow( r1.x, r1.y )
lit r0.z, r1.xxyy
; r0.x = sqrt( r1.x )
rsq r0.x, r1.x
mul r0.x, r0.x, r1.x
; r0 = cross( r1, r2 )
mul r0, -r1.yzxw, r2.zxyw
mad r0, -r2.yzxw, r0
; if-then-else
; r0 = ( r1>=r2) ? r3 : r4
sge r0, r1, r2
add r1, r3, -r4
mad r0, r0, r1, r4
0011デフォルトの名無しさん
NGNG目で見るGeForce3の特殊機能
http://www.vwalker.com/vmag/special/gf3_01/gf3im.html
0012デフォルトの名無しさん
NGNGそうみたいね
0013デフォルトの名無しさん
NGNGゲーム系っちゅーか3D系というか。微妙。
0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG頂点シェーダでConstレジスタへの値の設定なんですけど
頂点シェーダ宣言でD3DVSD_CONSTマクロを使うのと
SetVertexShaderConstantメソッドを使うのとでは何が違うのですか?
どう使い分ければいいですか?
0023デフォルトの名無しさん
NGNGギャリバン
シェイダー
しぇーだー
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG昔ギャバンの電子人形東京タワーのお土産に買った
ダイオードで所々光ったりする、20cmぐらいの置物。
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNG鼻の穴が大きい
0028デフォルトの名無しさん
NGNG× ギャリバン
○ シャリ版
0029デフォルトの名無しさん
NGNGSetVertexShaderConstant()だと
CreateVertexShader()後にもレジスタに値をセットできるよ。
常にこっちを使うといいと思う。
0030デフォルトの名無しさん
NGNG本当の意味での定数として使いたい値はシェーダ宣言で、
行列とかマテリアルとか変化する値は
SetVertexShaderConstant()というのが理想。
でも全部SetVertexShaderConstant()でも別に良いと思う。
0031デフォルトの名無しさん
NGNG0032吾輩は名無しさんである
NGNG嗚呼……やってしまったか。
この吾輩でさえも躊躇して書き込まなかったネタを。
0033デフォルトの名無しさん
NGNG∧⊂ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(゚Д゚)ノ < シェー
| ⊃| \__________
| |
⊂ノ〜
∪
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGhttp://teri.2ch.net/saku/index2.html
0036デフォルトの名無しさん
NGNGクソスレ?
テーマはくそじゃないんだ。
ただ来ている奴等のレベルが低すぎるだけ。書けてねえし
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGシェーダは多少のアセンブリ言語の慣れと想像力が必要だが
アセンブラを知ろうとしない奴と、
知ってはいるが想像力のない奴ばかりなんだろうな。
0040デフォルトの名無しさん
NGNGgf3のvertex shaderもストールあり?
0041デフォルトの名無しさん
NGNG004222
NGNGお返事遅くなりましてすいません。
とてもよくわかりました。ありがとうございました。
それで、VSのMSの最も簡単なサンプルを触っているのですが、
やっていることは非常に単純なのですが、思った通りの結果が出せません。
これはどこか間違っているでしょうか?
v0.w = w0.x * 0.0f + w0.y * 0.0f + w0.z * 0.0f + w0.w * 1.0f
という計算なので、計算前後で何も値は変わらないはずなですが表示される画像が
グチャグチャになってしまいます。
//***********************************************************************************
// Simple vertex shader0
// Constants
// reg c0 = (0,0.5,1.0,2.0)
// reg c4-7 = WorldViewProj matrix
// reg c8 = constant color
// Stream 0
// reg v0 = position ( 4x1 vector )
// reg v5 = diffuse color
const char SimpleVertexShader0[] =
"vs.1.0 //Shader version 1.0 \n"\
"def c10, 0.0f, 0.0f, 0.0f, 1.0f \n"\
"mov r0, v0 \n"\
"dp4 r0.w, v0, c10 \n"\
"m4x4 oPos, r0, c4 //emit projected position \n"\
"mov oD0, c8 //Diffuse color = c8 \n";
004322
NGNGv0.w = v0.x * 0.0f + v0.y * 0.0f + v0.z * 0.0f + v0.w * 1.0f
0044デフォルトの名無しさん
NGNGdef c10
をSetVertexShaderConstantに変えればうまくいくはずです
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG使えるよ。
定数宣言を引数に渡し忘れたとかじゃないの?
SetVertexShaderConstant()に変えるのでもいいと思うけど。
0047デフォルトの名無しさん
NGNG今のNVAsmではVSのdefはエラーになった
0048デフォルトの名無しさん
NGNGげほ。そうでしたか。
そりは失礼しました。
0049デフォルトの名無しさん
NGNGシェーダは一体どうなるんだ?
情報ソースは出先で見た英語のニュースサイト・・・。
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGテクスチャシェーダを使った内積系の処理(DOT_PRODUCT_2D)とか
TEXKILLとかって普通のTEXTURE_2Dとかに比べてどれ位性能低下が
あります?ほとんど同じくらいのスピードだったらすごく使えそう。
0053デフォルトの名無しさん
NGNG気にするほどの差はないよ。
内積系はガンガンつかてーな。
0054デフォルトの名無しさん
NGNGそうだったんですか。というのも、
http://partners.nvidia.com/Marketing/Developer/DevRel.nsf/pages/90EEF4A5CEF8D6C588256A180066D598
をみると、Dot Product系のパフォーマンスが1/5以下のグラフになって
いたので…。
0055デフォルトの名無しさん
NGNGフレームレートの落ちが少ないのは
やっぱりメモリがネックなのでしょうね
メモリの負荷を減らすような最適化すれば
また変わってくるでしょうけど
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG行列パレットスキニングとか、地道に重要です
0058デフォルトの名無しさん
NGNG(1)変形
(2)内積でエッヂ検出
この2種類の応用かも
pixel shaderの方は、
(1)内積でテーブル引く
テーブルの内容が問題
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG,―――-、
/ /~~~~~~~\
| / / \|
(6 (・) (・) |
も つ | いや〜っ
| lll|||||||||ll | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | \_/ / < ぴくせるしぇーだ ってほんっとにいいものですね〜
/| \____/\ \________
ttp://www5.tok2.com/home/IF/prog14.html
0061デフォルトの名無しさん
NGNGhttp://www.sade.com/
0062デフォルトの名無しさん
NGNG( 冫、 ) <あっそー
( ` )
| | |
(_(__)
0063デフォルトの名無しさん
NGNGhttp://www.ati.com/na/pages/technology/hardware/smartshader/smartshader.html
0064デフォルトの名無しさん
NGNG( 冫、 ) <あっそー
( ` )
| | |
(_(__)
0065
NGNGエラーではじかれて立ち上がりさえしない
そんな悲惨な人いない?
0066デフォルトの名無しさん
NGNG( 冫、 ) <あっそー
( ` )
| | |
(_(__)
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG0069これから触る人
NGNGすげぇ煩雑?
PointLight 対応はどうしたいいんだ?
使用個数分だけ、専用にシェーダー書かないといけないわけでしょウザッ
ある程度の個数分レジスタ確保ておくと、最適化とか、やれる事がDX7と大差なくなってくるよねぇ?
0070デフォルトの名無しさん
NGNGヌビディアのnvlink使えばシェーダーを組み合わせられるらしい
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG0073これから触る人
NGNGその固定シェーダーのエミュソースも不完全だつーし、萎え、、、、
よほど面白いもの使わないと意味ねぇ〜
スキニングは旧来の方法でいいんじゃねぇのか、、、
0074デフォルトの名無しさん
NGNG>スキニングは旧来の方法でいいんじゃねぇのか、、、
バーテックスシェーダーが付いてるのに
ハードウェアパレットスキニングがサポートされてないのには萎えた。>Ge3
絶対後者の方が喜ばれると思う。
0075
NGNGあえて使用不可にしてるらしいぞ。ホントか?
使用禁止にすることはないと思うのだけど、、、VS使わせる陰謀?
スキンのサンプルがSoftWareに比べて激遅いのはなぜ?
0076デフォルトの名無しさん
NGNG互換性のために回路を残してるのれす。
行列パレットはVSで書くとよいのれす。
固定で行列パレットするとレジスタがたくさんいるので
パレットが少なくなるのれす。
固定の行列パレットはメイトロックスさんのテクなので
それが気に入らないという説もあるのれすが。
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNGいらんよこんなの。
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNGあれはアセンブラだからいいんだよ。
せっかくだから楽しもうぜ
0083デフォルトの名無しさん
NGNG書かないだろうけどね(藁
0084デフォルトの名無しさん
NGNGライフゲームアルゴリズムを使ってちかちかする感じをうまく出していました。
なんかこういうの見ると本当にアイデア勝負な感じだなぁ。
まあ昔のIMとRMみたいにわかりやすいのもあったほうがいいかな。
みんながみんな使いこなせないだろうしね。
それより日本語でこの辺り解説しているサイトとか本とかってない?
自分で書かないと駄目?
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNGなんかこのスレって無意味に執拗粘着な茶々が入るね。
よっぽどシェーダが嫌いなのかね。
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGCEDECの「DirectX 頂点シェーダ、ピクセルシェーダの詳細」を受講しようと
思っていますが。この本とかこのサイトとか読んで予習しとけ!
みたいなのないでしょうか?普段コンシューマゲームのプログラムしか
書いてないのでDirectXそんなに詳しくないのですよ。
0089デフォルトの名無しさん
NGNG>>2-6
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG情報交換の邪魔をしてるって噂があるのだけれど本当?
まさかそこまで愚かじゃないよね・・
0094デフォルトの名無しさん
NGNGその噂とやらのソースを出せ
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNGピクセルシェーダでライフゲームさせて何が楽しい?
あんなんでnVidiaテクニカルメモとして表に出す気がわからん。
かといってPS2も別の意味でドキュソだけどな。
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG萌えてこないか? いやちがう、燃えてこないか?
0099デフォルトの名無しさん
NGNGこの板に来てる人なら面白さがわかると思うのだがね。
>>98
GPUをコプロとして使っているんだね
0100デフォルトの名無しさん
NGNGgeforce3がコンピュータだってことを見せるために
とりあえず作ってみただけだろう
0101デフォルトの名無しさん
NGNGgeforce3がコンピューターだってことをだまくらかすための。
いぜん、ピクセルシェーダには「分岐」はできない。
コンピュータらしい重要な要素が抜けてる。
ライフゲームは実は「分岐」がない機械でも可能。
あのデモも間違いなく、テーブル参照で次の世代のON/OFFを決定している。
だから、あのデモは確信犯的にまぎらわしー
0102デフォルトの名無しさん
NGNG一体何を力説しているのだ?
0103デフォルトの名無しさん
NGNGズロンでも載っけられるようにした方が良いと思われ。
動作周波数を400MHzぐらいに落とせば、ファンレスでもいけるだろ。
0104デフォルトの名無しさん
NGNGアンチか?
アンチなのか?
0105デフォルトの名無しさん
NGNGそう、それなんだよね。
ライフゲームできて、汎用コンピュータ搭載をにおわせる半端な
手間かける暇あったら、多少遅くてもいいから汎用コンピュータを
ビデオカード側に乗せちゃえ!って感じで。
って、これって結局、PS2になっちゃうけど。
いや、実行部隊1はその理想のなりそこないで、現実には
煮ても焼いても食えない代物になってはしまったが。
0106デフォルトの名無しさん
NGNGまたGeForce買いなおさないといけないのか(鬱
0107デフォルトの名無しさん
NGNGてことは、近々、DirectXのメジャーバージョンアップがあるってことかな?
VU1はまがりなりにも、分岐はあったからねー。
0108デフォルトの名無しさん
NGNGお探しあれい。
0109デフォルトの名無しさん
NGNG何なんだろうね?
メインメモリとローカルメモリに別れていて、CPUからのアクセスは遅い
ってのは、XboxのUMAで帳消しになっちゃたしなあ。
ピクセルの方はわかるけど、バーテックスの方はほんといらない気がする。
0110デフォルトの名無しさん
NGNGもっと端折ったインチキ計算使いたい場合とかさ
セルシェード用に 頂点色をテクスチャ座標に変換するような
用途も必要
色々な表現をサポートする為にRenderStateを増やしていくと
切りがないつー感じの事言ってたような
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNG頂点シェーダ―と同じ計算をCPUで真似してみれば、
どれだけ無駄に時間取られるか判るっしょ。
今更HT&Lの無い時代に戻りたくないっす。
0113デフォルトの名無しさん
NGNGレンダリングの自由度をソフト屋に任せることが可能になる点が挙げられると思う。
もちろんある程度の自由度ではあるけど。
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNGうざー
0117デフォルトの名無しさん
01/08/27 17:57ID:GUDCzTCoパイプラインそのものを挿げ替えるんじゃなくて
元々あるD3Dのステート群に
自分オリジナルのステートを追加出来る方がよかったんじゃないかなあ。
0118_
01/08/28 22:46ID:8Aiut6Zsそれはconstレジスタへの値の設定。
例えば、単純に頂点シェーダーで頂点のトランスフォームをしたい場合
レジスタに設定する行列は、ワールド x ビュー x 射影となる。
こんな感じでconstレジスタに渡す値は、
自前である程度加工しなければならない場合が多々ある。
FPUの変わりとして出来たHWTLのくせに、FPU演算の力をある程度借りなければ
成り立たないのは駄目だと思う。可搬性も下がるし。
これの解決案としては、メインのシェーダープログラムが呼ばれる前に
1回だけ呼ばれるシェーダーステージがあれば良いと思う。
constレジスタに値を設定→演算→constレジスタに再設定
みたいな。
だれかMSに言ってやって。
0119118
01/08/29 02:34ID:CQyVlKtUD3DVSD_REGの説明は間違ってる。注意すべし。
正しい値はソースを見るべし。
0120デフォルトの名無しさん
01/08/29 03:20ID:lSCsyAWsOpenGLのNvidia拡張ならまさにそういうのが使えるよん。
頂点シェーダやピクセルシェーダって、
OpenGLのNvidia拡張の方が数段優れてる。
0121デフォルトの名無しさん
NGNGKilgardさんのヤツ勉強になりました。
日本語のOpenGLの資料もっと増えないかな
■ このスレッドは過去ログ倉庫に格納されています