トップページ > 記事閲覧
オリジナルシェーダを使用した際の頂点情報について
名前:sss 日時: 2023/12/21 11:56

DX11でのオリジナルシェーダを使用しつつ、モデルのフレーム単位でディフューズカラーをαを使用して半透明化を行なおうと考えております。 オリジナルシェーダを使用した場合、 おそらくMV1SetFrameOpacityRate関数は効かないかと思いまして、 参照メッシュを使用して、指定フレームのディフューズカラーをα値を調整しました。 auto list = MV1GetReferenceMesh(modelId, idx, true); int num = list.VertexNum; for (int p = 0; p < num; p++) { list.Vertexs[p].DiffuseColor = GetColorU8(255, 255, 255, 128); } MV1RefreshReferenceMesh(modelId, idx, true); 上記で指定した頂点のディフューズカラーが、 頂点シェーダの下記構造体、diffuse に渡されるものだと想定し、 ピクセルシェーダで、diffuse.aを使用して対象フレームの半透明化が実現できると思ったのですが、 上手くいっておりません。 #elif (VERTEX_INPUT == DX_MV1_VERTEX_TYPE_NMAP_1FRAME) //法線マップの情報が含まれる1フレームの影響を受ける頂点 struct VertexInput { float3 pos : POSITION; // 座標(ローカル空間) float3 norm : NORMAL; // 法線(ローカル空間) float4 diffuse : COLOR0; // ディフューズカラー float4 specular : COLOR1; // スペキュラカラー float4 uv0 : TEXCOORD0; // テクスチャ座標 float4 uv1 : TEXCOORD1; // サブテクスチャ座標 float3 tan : TANGENT0; // 接線(ローカル空間) float3 bin : BINORMAL0; // 従法線(ローカル空間) }; オリジナルシェーダを使用した場合、参照メッシュも無効になりますでしょうか。 もし、代案などありましたら、ご教授頂けますと幸いです。 お忙しい中、恐縮ですが、よろしくお願い致します。
メンテ

Page: 1 |

Re: オリジナルシェーダを使用した際の頂点情報について ( No.1 )
名前:管理人 日時:2023/12/22 01:22

MV1GetReferenceMesh で取得できる参照用メッシュは名前の通り情報を参照するためだけに 使用されるものなので、この関数で取得できる情報を書き換えても描画に使用される 頂点情報を書き換えることはできません そして申し訳ありませんが現状では描画に使用される頂点情報を書き換える手段はありません 昨今のモデルは基本的に頂点情報が多く、透明度が変化する度にフレームの全頂点情報を書き換える というのは速度的に現実的ではありませんので、オリジナルシェーダを使用されるのでしたら 定数を使用して透明度を変更するような処理にされるのが現実的だと思います m(_ _)m
メンテ
Re: オリジナルシェーダを使用した際の頂点情報について ( No.2 )
名前:sss 日時:2023/12/22 14:31

ご回答、ありがとうございます!! 描画単位をモデル全体ではなく、フレーム単位にして、 定数バッファから透明度を調整しようと思います。
メンテ

Page: 1 |

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

   クッキー保存