トップページ > 記事閲覧
DxLibのVertexShaderの入力順について
名前:Comaneco 日時: 2020/07/03 09:55

毎度、お世話になっております。 今回、Dx9用で作ったシェーダーをDx11用に変更しようとしたところ、 VS_INPUTのtanとbin以下に値が入らなくなってしまいました。 Dx11用のシェーダーでは、書く順番も大事ということは分かっているのですが、その順番が分かりません。 一応以下の順で定義しているのですが、何か間違えているでしょうか? //ノーマルマップとスキニングメッシュ1〜8個用頂点シェーダー struct VS_INPUT { float3 pos : POSITION; // 座標(ローカル空間) float3 norm : NORMAL; // 法線(ローカル空間) float4 diffuse : COLOR0; // ディフューズカラー float4 specular : COLOR1; // スペキュラカラー float4 texCoords0 : TEXCOORD0; // テクスチャ座標 float4 texCoords1 : TEXCOORD1; // サブテクスチャ座標 float3 tan : TANGENT0; // 接線(ローカル空間) float3 binorm : BINORMAL0; // 従法線(ローカル空間) int4 blendIndices0 : BLENDINDICES0; // スキニング処理用 Float型定数配列インデックス float4 blendWeight0 : BLENDWEIGHT0; // スキニング処理用ウエイト値 int4 blendIndices1 : BLENDINDICES1; // スキニング処理用 Float型定数配列インデックス float4 blendWeight1 : BLENDWEIGHT1; // スキニング処理用ウエイト値 };
メンテ

Page: 1 |

Re: DxLibのVertexShaderの入力順について ( No.1 )
名前:管理人 日時:2020/07/04 00:05

Dx11 を使用する場合のシェーダー関連の情報はこちらのスレッドの No.1 に纏めてありますので よろしければご覧ください m(_ _)m < DxLibでシェーダーを使うにはどうすればいいのか? > https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4904
メンテ
Re: DxLibのVertexShaderの入力順について ( No.2 )
名前:Comaneco 日時:2020/07/05 12:55

>Dx11 を使用する場合のシェーダー関連の情報はこちらのスレッドの No.1 に纏めてあります スレッドのno1を拝見しました。 ただ、見たところスキニングメッシュのインデックス、ウェイト値の入力が無いようですが、 こちらの後に書き足すので宜しいのでしょうか? struct VS_INPUT { float3 pos : POSITION0 ; // 座標( ローカル空間 ) float4 spos : POSITION1 ; // 予備座標 float3 norm : NORMAL0 ; // 法線( ローカル空間 ) float3 tan : TANGENT0 ; // 接線( ローカル空間 ) float3 binorm : BINORMAL0 ; // 従法線( ローカル空間 ) float4 dif : COLOR0 ; // ディフューズカラー float4 spc : COLOR1 ; // スペキュラカラー float2 texCoords0 : TEXCOORD0 ; // テクスチャ座標 float2 texCoords1 : TEXCOORD1 ; // サブテクスチャ座標 //ここにスキニングメッシュ用? } ; 一応こちらでもそれを試し、 スキニングメッシュ1〜4ではこちらの入力で描画に成功したのですが、 struct VS_INPUT { float3 pos : POSITION; // 座標(ローカル空間) float3 norm : NORMAL; // 法線(ローカル空間) float4 diffuse : COLOR0; // ディフューズカラー float4 specular : COLOR1; // スペキュラカラー float4 texCoords0 : TEXCOORD0; // テクスチャ座標 float4 texCoords1 : TEXCOORD1; // サブテクスチャ座標 float3 tan : TANGENT0; // 接線(ローカル空間) float3 binorm : BINORMAL0; // 従法線(ローカル空間) int4 blendIndices0 : BLENDINDICES0; // スキニング処理用 Float型定数配列インデックス float4 blendWeight0 : BLENDWEIGHT0; // スキニング処理用ウエイト値 }; 上のVS_INPUT入力に変え、 そこにスキニングメッシュ用の要素を追加したところ、描画が破綻しました。 破綻の仕方は、頂点座標が様々な所へ飛び交い、モデルの原型を留めていないと言った感じです
メンテ
Re: DxLibのVertexShaderの入力順について ( No.3 )
名前:管理人 日時:2020/07/05 22:32

> ただ、見たところスキニングメッシュのインデックス、ウェイト値の入力が無いようですが、 > こちらの後に書き足すので宜しいのでしょうか? すみません、件のスレッドには剛体メッシュ用の頂点入力情報しかありませんでした… スキニングメッシュ用は以下のようになります // 影響するボーンが4個以内の場合 struct VS_INPUT { float3 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 float4 TexCoords1 : TEXCOORD1 ; // サブテクスチャ座標 // バンプマップ float3 Tan : TANGENT0 ; // 接線( ローカル空間 ) float3 Bin : BINORMAL0 ; // 従法線( ローカル空間 ) // スキニングメッシュ int4 BlendIndices0 : BLENDINDICES0 ; // ボーン処理用 Float型定数配列インデックス0 float4 BlendWeight0 : BLENDWEIGHT0 ; // ボーン処理用ウエイト値0 } ; // 影響するボーンが5個以上8個以内の場合 struct VS_INPUT { float3 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 float4 TexCoords1 : TEXCOORD1 ; // サブテクスチャ座標 // バンプマップ float3 Tan : TANGENT0 ; // 接線( ローカル空間 ) float3 Bin : BINORMAL0 ; // 従法線( ローカル空間 ) // スキニングメッシュ int4 BlendIndices0 : BLENDINDICES0 ; // ボーン処理用 Float型定数配列インデックス0 float4 BlendWeight0 : BLENDWEIGHT0 ; // ボーン処理用ウエイト値0 int4 BlendIndices1 : BLENDINDICES1 ; // ボーン処理用 Float型定数配列インデックス1 float4 BlendWeight1 : BLENDWEIGHT1 ; // ボーン処理用ウエイト値1 } ; > 上のVS_INPUT入力に変え、 > そこにスキニングメッシュ用の要素を追加したところ、描画が破綻しました。 > 破綻の仕方は、頂点座標が様々な所へ飛び交い、モデルの原型を留めていないと言った感じです 描画するモデルの中に剛体部分と影響ボーン数1〜4ボーンの部分と影響ボーン数5〜8ボーンの部分が 混在していますと、描画が破綻すると思います( 剛体部分には剛体用のシェーダー、1〜4ボーン部分には 1〜4ボーン用のシェーダー、5〜8ボーンの部分には5〜8ボーン用のシェーダーを使用しないと正常に描画できないので… )
メンテ
Re: DxLibのVertexShaderの入力順について ( No.4 )
名前:Comaneco 日時:2020/07/07 13:15

返信が遅れてしまい申し訳ないです。 こちらで、色々検証したところ、 MV1GetTriangleListVertexTypeを使って対応している物を調べ、 DX_MV1_VERTEX_TYPE_NMAP_4FRAME や DX_MV1_VERTEX_TYPE_NMAP_8FRAME が返ってきているにもかかわらず、4(5〜8)ボーン用のシェーダーで モデルによってはtanとbinだけが入らなくなってしまっているようです… 一応DrawModelも、ボーンによって異なるところがあったので、MV1DrawTriangleListを使用しております。 現象が起きているファイルをこちらにアップロードしておきましたので間違えているところがあればご教授お願い致します。 えいちてぃーてぃーぴー://drive.google.com/file/d/1Em3ouIvreodeR_043vSKGSh0oGV9YwQX/view?usp=sharing ※えいちてぃーてぃーぴーの所は半角英数字で入力して下さい。 モデルは正常にtanとbin値が入った奴と入らなかった奴の二つを同封しています
メンテ
Re: DxLibのVertexShaderの入力順について ( No.5 )
名前:管理人 日時:2020/07/08 01:27

> DX_MV1_VERTEX_TYPE_NMAP_4FRAME や DX_MV1_VERTEX_TYPE_NMAP_8FRAME すみません、法線マップ入りかどうかでも頂点データが変化するのでした… // DX_MV1_VERTEX_TYPE_1FRAME 1フレームの影響を受ける頂点 struct VS_INPUT { float3 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 float4 TexCoords1 : TEXCOORD1 ; // サブテクスチャ座標 } ; // DX_MV1_VERTEX_TYPE_4FRAME 1〜4フレームの影響を受ける頂点 struct VS_INPUT { float3 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 float4 TexCoords1 : TEXCOORD1 ; // サブテクスチャ座標 // スキニングメッシュ int4 BlendIndices0 : BLENDINDICES0 ; // ボーン処理用 Float型定数配列インデックス0 float4 BlendWeight0 : BLENDWEIGHT0 ; // ボーン処理用ウエイト値0 } ; // DX_MV1_VERTEX_TYPE_8FRAME 5〜8フレームの影響を受ける頂点 struct VS_INPUT { float3 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 float4 TexCoords1 : TEXCOORD1 ; // サブテクスチャ座標 // スキニングメッシュ int4 BlendIndices0 : BLENDINDICES0 ; // ボーン処理用 Float型定数配列インデックス0 float4 BlendWeight0 : BLENDWEIGHT0 ; // ボーン処理用ウエイト値0 int4 BlendIndices1 : BLENDINDICES1 ; // ボーン処理用 Float型定数配列インデックス1 float4 BlendWeight1 : BLENDWEIGHT1 ; // ボーン処理用ウエイト値1 } ; // DX_MV1_VERTEX_TYPE_NMAP_1FRAME 法線マップ用の情報が含まれる1フレームの影響を受ける頂点 struct VS_INPUT { float3 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 float4 TexCoords1 : TEXCOORD1 ; // サブテクスチャ座標 // 法線マップ float3 Tan : TANGENT0 ; // 接線( ローカル空間 ) float3 Bin : BINORMAL0 ; // 従法線( ローカル空間 ) } ; // DX_MV1_VERTEX_TYPE_NMAP_4FRAME 法線マップ用の情報が含まれる1〜4フレームの影響を受ける頂点 struct VS_INPUT { float3 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 float4 TexCoords1 : TEXCOORD1 ; // サブテクスチャ座標 // 法線マップ float3 Tan : TANGENT0 ; // 接線( ローカル空間 ) float3 Bin : BINORMAL0 ; // 従法線( ローカル空間 ) // スキニングメッシュ int4 BlendIndices0 : BLENDINDICES0 ; // ボーン処理用 Float型定数配列インデックス0 float4 BlendWeight0 : BLENDWEIGHT0 ; // ボーン処理用ウエイト値0 } ; // DX_MV1_VERTEX_TYPE_NMAP_8FRAME 法線マップ用の情報が含まれる5〜8フレームの影響を受ける頂点 struct VS_INPUT { float3 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 float4 TexCoords1 : TEXCOORD1 ; // サブテクスチャ座標 // 法線マップ float3 Tan : TANGENT0 ; // 接線( ローカル空間 ) float3 Bin : BINORMAL0 ; // 従法線( ローカル空間 ) // スキニングメッシュ int4 BlendIndices0 : BLENDINDICES0 ; // ボーン処理用 Float型定数配列インデックス0 float4 BlendWeight0 : BLENDWEIGHT0 ; // ボーン処理用ウエイト値0 int4 BlendIndices1 : BLENDINDICES1 ; // ボーン処理用 Float型定数配列インデックス1 float4 BlendWeight1 : BLENDWEIGHT1 ; // ボーン処理用ウエイト値1 } ; > 一応DrawModelも、ボーンによって異なるところがあったので、MV1DrawTriangleListを使用しております。 > 現象が起きているファイルをこちらにアップロードしておきましたので間違えているところがあればご教授お願い致します。 >  > えいちてぃーてぃーぴー://drive.google.com/file/d/1Em3ouIvreodeR_043vSKGSh0oGV9YwQX/view?usp=sharing 『MyDxLib.h』が無い、というエラーが発生してしまったので『DxLib.h』に書き換えたところ ビルドが通り、実行してみましたが、真っ黒な eve_j_gonzales.mv1 が表示されました > こちらで、色々検証したところ、 > MV1GetTriangleListVertexTypeを使って対応している物を調べ、 > DX_MV1_VERTEX_TYPE_NMAP_4FRAME や DX_MV1_VERTEX_TYPE_NMAP_8FRAME > が返ってきているにもかかわらず、4(5〜8)ボーン用のシェーダーで > モデルによってはtanとbinだけが入らなくなってしまっているようです… 形状自体は正常に描画されているので、eve_j_gonzales.mv1 の元となっている fbxファイルなどのファイルの tan, bin の情報が正常ではないか、DXライブラリが正常に読み込めていない可能性があります よろしければ eve_j_gonzales.mv1 の元となった fbxファイルを頂けないでしょうか? m(_ _)m
メンテ
Re: DxLibのVertexShaderの入力順について ( No.6 )
名前:Comaneco 日時:2020/07/08 09:30

>『MyDxLib.h』が無い 申し訳ありません。すべて拡張した機能を切ったつもりがそこだけ残ってしまっていました、、、 >よろしければ eve_j_gonzales.mv1 の元となった fbxファイルを頂けないでしょうか? えいちてぃーてぃーぴー://drive.google.com/file/d/1wdi_E2QUVx9QjVzI0TIDiAZtAE7L9U5K/view?usp=sharing こちらに元となるFBXのファイルをアップロードしておきました。 お手数をかけて申し訳ありませんがご確認を宜しくお願い致します。 ※えいちてぃーてぃーぴーの所は半角英数字で入力して下さい。
メンテ
Re: DxLibのVertexShaderの入力順について ( No.7 )
名前:管理人 日時:2020/07/08 21:58

fbxファイルのご提供ありがとうございます データを拝見しましたが、やはり tan と bin のデータが無い、若しくはDXライブラリで読み込めていないようです すみません、DXライブラリが読み込めていないだけかどうかはテキスト形式の fbxファイルでないと判断ができません 申し訳ありませんが、テキスト形式の fbxファイルを頂けますでしょうか? m(_ _;m あと、よろしければ fbxファイルに出力する際に tan と bin の出力に関するオプションがあるか等を確認してみてください m(_ _)m
メンテ
Re: DxLibのVertexShaderの入力順について ( No.8 )
名前:Comaneco 日時:2020/07/09 11:01

>テキスト形式の fbxファイルを頂けますでしょうか? フリーのモデルで、私自身余りモデリングのツールを使ったことが無いので出来てるか分からないのですが、 こちらで大丈夫でしょうか? ※正常に出来ていればASCII形式に変わっていると思います えいちてぃーてぃーぴー://drive.google.com/file/d/1wdi_E2QUVx9QjVzI0TIDiAZtAE7L9U5K/view?usp=sharing >fbxファイルに出力する際に tan と bin の出力に関するオプションがあるか等を確認してみてください Mayaの方で接線、従法線のチェック項目があったのですが、入れて書き出してみても接線、従法線に値が入らないようです、、、 後、Mayaを通した後のモデル(今回送ったモデル)は描画が破綻していると思いますが、こちらはスキニングの問題でしたので、スルーしていただけるとありがたいです。 ※えいちてぃーてぃーぴーの所は半角英数字で入力して下さい。
メンテ
Re: DxLibのVertexShaderの入力順について ( No.9 )
名前:管理人 日時:2020/07/10 00:16

> フリーのモデルで、私自身余りモデリングのツールを使ったことが無いので出来てるか分からないのですが、 > こちらで大丈夫でしょうか? > ※正常に出来ていればASCII形式に変わっていると思います > えいちてぃーてぃーぴー://drive.google.com/file/d/1wdi_E2QUVx9QjVzI0TIDiAZtAE7L9U5K/view?usp=sharing すみません、URLを間違われていませんでしょうか? こちらのURLからダウンロードさせていただいた eve_j_gonzales.fbx はASCII形式ではなく、 更新日時も 2020/6/25 15:06 と、先日頂いたファイルと同じ日時でした
メンテ
Re: DxLibのVertexShaderの入力順について ( No.10 )
名前:Comaneco 日時:2020/07/10 09:13

>すみません、URLを間違われていませんでしょうか? あぁ!申し訳ありません、、、同じ法のURLを送っていました、、、 正しくはこちらです えいちてぃーてぃーぴー://drive.google.com/file/d/1fwV9jXopGkN-kUqFd9vN9PMN2GqrO2EU/view?usp=sharing
メンテ
Re: DxLibのVertexShaderの入力順について ( No.11 )
名前:管理人 日時:2020/07/11 07:17

ありがとうございます、ASCII形式のfbxファイルを拝見出来ました 結果、今回アップしていただいたASCII形式の fbxファイルには tan と bin の情報が含まれていました ( 因みに前回いただいた Binary型のfbxファイルにはやはり tan と bin の情報は含まれていませんでした ) ただ、今度は DxLibModelViewer.exe の fbx読み込みプログラムが eve_j_gonzales.fbx の tan と bin の情報の格納形式に対応していなかったため、読み込まれない状態になっていました なので、eve_j_gonzales.fbx の tan と bin の情報の格納形式でも正常に読み込まれるように 修正してみましたので、よろしければこちらの修正版の DxLibModelViewer.exe を使ってみてください m(_ _;m // ビューアー https://dxlib.xsrv.jp/temp/DxLibModelViewerTest.zip
メンテ
Re: DxLibのVertexShaderの入力順について ( No.12 )
名前:Comaneco(解決) 日時:2020/07/13 13:18

新しいDxLibModelViewerを通したmv1が正常にtan、binの値が出力されたのを確認できました。 長くなってしまい申し訳ありません。また、早急な対応ありがとうございました。 これにて解決済みとさせて頂きます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存