/// <inheritdoc /> public virtual void ApplyMaterialPatch(Material material, MWMaterial patch) { if (patch.Color != null) { _materialColor.FromUnityColor(material.color); _materialColor.ApplyPatch(patch.Color); material.color = _materialColor.ToColor(); } if (patch.MainTextureOffset != null) { _textureOffset.FromUnityVector2(material.mainTextureOffset); _textureOffset.ApplyPatch(patch.MainTextureOffset); material.mainTextureOffset = _textureOffset.ToVector2(); } if (patch.MainTextureScale != null) { _textureScale.FromUnityVector2(material.mainTextureScale); _textureScale.ApplyPatch(patch.MainTextureScale); material.mainTextureScale = _textureScale.ToVector2(); } if (patch.MainTextureId != null) { var textureId = patch.MainTextureId.Value; textureAssignments[material.GetInstanceID()] = textureId; if (patch.MainTextureId == Guid.Empty) { material.mainTexture = null; } else { MREAPI.AppsAPI.AssetCache.OnCached(textureId, tex => { if (!material || textureAssignments[material.GetInstanceID()] != textureId) { return; } material.mainTexture = (Texture)tex; }); } } }
/// <inheritdoc /> public virtual void ApplyMaterialPatch(IMixedRealityExtensionApp app, Material material, MWMaterial patch) { if (patch.Color != null) { _materialColor.FromUnityColor(material.color); _materialColor.ApplyPatch(patch.Color); material.color = _materialColor.ToColor(); } if (patch.MainTextureOffset != null) { _textureOffset.FromUnityVector2(material.mainTextureOffset); _textureOffset.ApplyPatch(patch.MainTextureOffset); material.mainTextureOffset = _textureOffset.ToVector2(); } if (patch.MainTextureScale != null) { _textureScale.FromUnityVector2(material.mainTextureScale); _textureScale.ApplyPatch(patch.MainTextureScale); material.mainTextureScale = _textureScale.ToVector2(); } if (patch.MainTextureId != null) { var textureId = patch.MainTextureId.Value; mainTextureAssignments[material.GetInstanceID()] = textureId; if (patch.MainTextureId == Guid.Empty) { material.mainTexture = null; } else { app.AssetManager.OnSet(textureId, tex => { if (!material || mainTextureAssignments[material.GetInstanceID()] != textureId) { return; } material.mainTexture = (Texture)tex.Asset; }); } } }
/// <inheritdoc /> public virtual void ApplyMaterialPatch(IMixedRealityExtensionApp app, Material material, MWMaterial patch) { if (patch.Color != null) { _materialColor.FromGodotColor(material.AlbedoColor); _materialColor.ApplyPatch(patch.Color); material.AlbedoColor = _materialColor.ToColor(); } if (patch.MainTextureOffset != null) { _textureOffset.FromGodotVector3(material.Uv1Offset); _textureOffset.ApplyPatch(patch.MainTextureOffset); _textureOffset.Y *= -1; material.Uv1Offset = _textureOffset.ToVector3(); } if (patch.MainTextureScale != null) { _textureScale.FromGodotVector3(material.Uv1Scale); _textureScale.ApplyPatch(patch.MainTextureScale); material.Uv1Scale = _textureScale.ToVector3(); } if (patch.MainTextureId != null) { var textureId = patch.MainTextureId.Value; mainTextureAssignments[material.GetInstanceId()] = textureId; if (patch.MainTextureId == Guid.Empty) { material.AlbedoTexture = null; } else { app.AssetManager.OnSet(textureId, tex => { if (material == null || mainTextureAssignments[material.GetInstanceId()] != textureId) { return; } material.AlbedoTexture = (Texture)tex.Asset; }); } } if (patch.EmissiveColor != null) { material.EmissionEnabled = true; var color = material.Emission; color.r = patch.EmissiveColor.R ?? color.r; color.g = patch.EmissiveColor.G ?? color.g; color.b = patch.EmissiveColor.B ?? color.b; color.a = patch.EmissiveColor.A ?? color.a; material.Emission = color; } if (patch.EmissiveTextureOffset != null) { material.EmissionEnabled = true; var offset = material.Uv2Offset; offset.x = patch.EmissiveTextureOffset.X ?? offset.x; offset.y = patch.EmissiveTextureOffset.Y ?? offset.y; material.Uv2Offset = offset; } if (patch.EmissiveTextureScale != null) { material.EmissionEnabled = true; var scale = material.Uv2Scale; scale.x = patch.EmissiveTextureScale.X ?? scale.x; scale.y = patch.EmissiveTextureScale.Y ?? scale.y; material.Uv2Scale = scale; } if (patch.EmissiveTextureId != null) { material.EmissionEnabled = true; var textureId = patch.EmissiveTextureId.Value; emissiveTextureAssignments[material.GetInstanceId()] = textureId; if (textureId == Guid.Empty) { material.EmissionTexture = null; } else { app.AssetManager.OnSet(textureId, tex => { if (material == null || emissiveTextureAssignments[material.GetInstanceId()] != textureId) { return; } material.EmissionTexture = (Texture)tex.Asset; }); } } if (patch.AlphaCutoff != null) { material.ParamsUseAlphaScissor = true; material.ParamsAlphaScissorThreshold = patch.AlphaCutoff.Value; } switch (patch.AlphaMode) { case MWAssets.AlphaMode.Opaque: material.FlagsTransparent = false; break; case MWAssets.AlphaMode.Mask: material.ParamsUseAlphaScissor = true; material.ParamsAlphaScissorThreshold = 1.0f; break; case MWAssets.AlphaMode.Blend: material.FlagsTransparent = true; material.ParamsUseAlphaScissor = false; break; // ignore default case, i.e. null } }