public static VrmProtobuf.MaterialUVBind ToGltf(this UVScaleOffsetValue self, List <VrmLib.Material> materials) { var m = new VrmProtobuf.MaterialUVBind { Material = materials.IndexOfThrow(self.Material), }; m.Scaling.Add(self.Scale.X); m.Scaling.Add(self.Scale.Y); m.Offset.Add(self.Offset.X); m.Offset.Add(self.Offset.Y); return(m); }
public static VrmLib.BlendShape FromGltf(BlendShapeGroup x, List <VrmLib.Node> nodes, List <VrmLib.Material> materials) { var expression = new VrmLib.BlendShape((VrmLib.BlendShapePreset)x.Preset, x.Name, x.IsBinary.HasValue && x.IsBinary.Value) { IgnoreBlink = x.IgnoreBlink.GetValueOrDefault(), IgnoreLookAt = x.IgnoreLookAt.GetValueOrDefault(), IgnoreMouth = x.IgnoreMouth.GetValueOrDefault(), }; foreach (var y in x.Binds) { var node = nodes[y.Node.Value]; var blendShapeName = node.Mesh.MorphTargets[y.Index.Value].Name; var blendShapeBind = new BlendShapeBindValue(node, blendShapeName, y.Weight.Value); expression.BlendShapeValues.Add(blendShapeBind); } foreach (var y in x.MaterialValues) { var material = materials[y.Material.Value]; Vector4 target = default; if (y.TargetValue.Count > 0) { target.X = y.TargetValue[0]; } if (y.TargetValue.Count > 1) { target.Y = y.TargetValue[1]; } if (y.TargetValue.Count > 2) { target.Z = y.TargetValue[2]; } if (y.TargetValue.Count > 3) { target.W = y.TargetValue[3]; } var materialColorBind = new MaterialBindValue(material, EnumUtil.Cast <MaterialBindType>(y.Type), target); expression.MaterialValues.Add(materialColorBind); } foreach (var y in x.MaterialUVBinds) { var material = materials[y.Material.Value]; var scaling = Vector2.One; if (y.Scaling.Count > 0) { scaling.X = y.Scaling[0]; } if (y.Scaling.Count > 1) { scaling.Y = y.Scaling[1]; } var offset = Vector2.Zero; if (y.Offset.Count > 0) { offset.X = y.Offset[0]; } if (y.Offset.Count > 1) { offset.Y = y.Offset[1]; } var materialUVBind = new UVScaleOffsetValue(material, scaling, offset); expression.UVScaleOffsetValues.Add(materialUVBind); } return(expression); }