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; // 従法線(ローカル空間)
};
オリジナルシェーダを使用した場合、参照メッシュも無効になりますでしょうか。
もし、代案などありましたら、ご教授頂けますと幸いです。
お忙しい中、恐縮ですが、よろしくお願い致します。