Вам не нужно снова создавать весь эффект, просто измените свойства, необходимые для исходного Effect
свойства ModelMeshPart
.
Таким образом, вместо:
var basicEffect = new BasicEffect( game.GraphicsDevice );
basicEffect.EnableDefaultLighting();
foreach (var mesh in _modelHead.Meshes)
foreach (var part in mesh.MeshParts)
part.Effect = basicEffect;
Сделайте это:
foreach (var mesh in _modelHead.Meshes)
foreach (var part in mesh.MeshParts)
((BasicEffect)part.Effect).EnableDefaultLighting();
Это сохранит зеркальный и рассеянный цвет, который был потерян при использовании первого метода, и сохранит пространство кода.
Кроме того, поскольку каждыйModelMeshPart
может иметь собственный материал, что гарантирует, что вы не потеряете данные, которые хотите сохранить.