diff --git a/Scripts/BlendShape/BlendShapeMerger.cs b/Scripts/BlendShape/BlendShapeMerger.cs index 1f45c82c8..8a8c514a3 100644 --- a/Scripts/BlendShape/BlendShapeMerger.cs +++ b/Scripts/BlendShape/BlendShapeMerger.cs @@ -258,7 +258,15 @@ namespace VRM foreach (var y in x.MaterialValues) { // restore values - m_materialMap[y.MaterialName].SetColor(y.ValueName, y.BaseValue); + Material material; + if(m_materialMap.TryGetValue(y.MaterialName, out material)) + { + material.SetColor(y.ValueName, y.BaseValue); + } + else + { + Debug.LogWarningFormat("{0} not found", y.MaterialName); + } } } } diff --git a/Scripts/Format/VRMImporter.cs b/Scripts/Format/VRMImporter.cs index e14aff88e..b81d5b596 100644 --- a/Scripts/Format/VRMImporter.cs +++ b/Scripts/Format/VRMImporter.cs @@ -183,14 +183,39 @@ namespace VRM case 3: value.w = x.targetValue[3]; break; } } - return new MaterialValueBinding + + var material = context.GetMaterials().FirstOrDefault(y => y.name == x.materialName); + var propertyName = x.propertyName; + if (x.propertyName.EndsWith("_ST_S") + || x.propertyName.EndsWith("_ST_T")) { - MaterialName = x.materialName, - ValueName = x.propertyName, - TargetValue = value, - BaseValue = context.GetMaterials().First(y => y.name == x.materialName).GetColor(x.propertyName), - }; + propertyName = x.propertyName.Substring(0, x.propertyName.Length - 2); + } + + var binding = default(MaterialValueBinding?); + + if (material != null) + { + try + { + binding = new MaterialValueBinding + { + MaterialName = x.materialName, + ValueName = x.propertyName, + TargetValue = value, + BaseValue = material.GetColor(propertyName), + }; + } + catch(Exception) + { + // do nothing + } + } + + return binding; }) + .Where(x => x.HasValue) + .Select(x => x.Value) .ToArray(); }