static void ExportUnlit(Material material, UnityEngine.Material uMaterial, IGltfWritable gltf, ICodeLogger logger) { gltf.RegisterExtensionUsage(Extension.MaterialsUnlit); material.extensions = material.extensions ?? new MaterialExtension(); material.extensions.KHR_materials_unlit = new MaterialUnlit(); var pbr = material.pbrMetallicRoughness ?? new PbrMetallicRoughness(); if (uMaterial.HasProperty(k_Color)) { pbr.baseColor = uMaterial.GetColor(k_Color); } if (uMaterial.HasProperty(k_MainTex)) { var mainTex = uMaterial.GetTexture(k_MainTex); if (mainTex != null) { if (mainTex is Texture2D) { pbr.baseColorTexture = ExportTextureInfo(mainTex, TextureMapType.Main, gltf); ExportTextureTransform(pbr.baseColorTexture, uMaterial, k_MainTex, gltf); } else { logger?.Error(LogCode.TextureInvalidType, "main", material.name); } } } material.pbrMetallicRoughness = pbr; }
static void ExportTextureTransform(TextureInfo def, UnityEngine.Material mat, int texPropertyId, IGltfWritable gltf) { var offset = mat.GetTextureOffset(texPropertyId); var scale = mat.GetTextureScale(texPropertyId); // Counter measure for Unity/glTF texture coordinate difference // TODO: Offer UV conversion as alternative offset.y = 1 - offset.x; scale.y *= -1; if (offset != Vector2.zero || scale != Vector2.one) { gltf.RegisterExtensionUsage(Extension.TextureTransform); def.extensions = def.extensions ?? new TextureInfoExtension(); def.extensions.KHR_texture_transform = new TextureTransform { scale = new[] { scale.x, scale.y }, offset = new[] { offset.x, offset.y } }; } }