カスタムエフェクトでのテクスチャ

シェーダをいじり始めて、モデルのテクスチャを描画しようとしたところでつまずいた。
http://social.msdn.microsoft.com/Forums/ja-JP/xnagameja/thread/377561e2-783c-4be2-8337-69364080f1bb
にあるように、ひとつのモデルに複数毎のテクスチャがあるとカスタムエフェクトで描画するときに、コンテントパイプラインでいろいろやる必要があって簡単にはできない。で、いろいろ調べて次のような方法をひねり出した。
まず、モデルを読み込んだ後にこんな処理をする。

foreach (var m in model.Meshes)
{
	foreach (var mp in m.MeshParts)
	{
		mp.Tag = ((BasicEffect)mp.Effect).Texture;
		mp.Effect = effect;
	}
}

そして描画するときにはこうする。

meshPart.Effect.Parameters["MainTexture"].SetValue((Texture)meshPart.Tag);

デフォルトのモデルインポーターだとメッシュにBasicEffectを設定して、そのときに使用するテクスチャの情報も一緒に設定する、という仕様を利用した。
しかし、この方法ではバンプマップのようなマルチテクスチャには原理的に対応できないので根本的解決にはなっていない。