Exemplo n.º 1
0
 public override void GetParams(CMaterialParams parameters)
 {
     // ???
 }
Exemplo n.º 2
0
 public override void GetParams(CMaterialParams parameters)
 {
     throw new System.NotImplementedException();
 }
Exemplo n.º 3
0
        public MaterialExporter(UUnrealMaterial?unrealMaterial, bool bNoOtherTextures) : this()
        {
            if (unrealMaterial == null)
            {
                return;
            }
            _internalFilePath = unrealMaterial.Owner?.Name ?? unrealMaterial.Name;

            var allTextures = new List <UUnrealMaterial>();

            unrealMaterial.AppendReferencedTextures(allTextures, false);

            var parameters = new CMaterialParams();

            unrealMaterial.GetParams(parameters);
            if ((parameters.IsNull || parameters.Diffuse == unrealMaterial) && allTextures.Count == 0)
            {
                return;
            }

            var sb       = new StringBuilder();
            var toExport = new List <UUnrealMaterial>();

            void Proc(string name, UUnrealMaterial?arg)
            {
                if (arg == null)
                {
                    return;
                }
                sb.AppendLine($"{name}={arg.Name}");
                switch (bNoOtherTextures)
                {
                case true when !name.StartsWith("Other["):
                case false:
                    toExport.Add(arg);
                    break;
                }
            }

            Proc("Diffuse", parameters.Diffuse);
            Proc("Normal", parameters.Normal);
            Proc("Specular", parameters.Specular);
            Proc("SpecPower", parameters.SpecPower);
            Proc("Opacity", parameters.Opacity);
            Proc("Emissive", parameters.Emissive);
            Proc("Cube", parameters.Cube);
            Proc("Mask", parameters.Mask);

            // Export other textures
            var numOtherTextures = 0;

            foreach (var texture in allTextures)
            {
                if (toExport.Contains(texture))
                {
                    continue;
                }
                Proc($"Other[{numOtherTextures++}]", texture);
            }

            _fileData = sb.ToString().Trim();

            foreach (var texture in toExport)
            {
                if (texture == unrealMaterial || texture is not UTexture2D t)
                {
                    continue;
                }

                var bNearest = false;
                if (t.TryGetValue(out FName trigger, "LODGroup", "Filter") && !trigger.IsNone)
                {
                    bNearest = trigger.Text.EndsWith("TEXTUREGROUP_Pixels2D", StringComparison.OrdinalIgnoreCase) ||
                               trigger.Text.EndsWith("TF_Nearest", StringComparison.OrdinalIgnoreCase);
                }

                _textures[t.Owner?.Name ?? t.Name] = t.Decode(bNearest);
            }

            if (!bNoOtherTextures && unrealMaterial is UMaterialInstanceConstant {
                Parent : { }
            } material)
            {
                _parentData = new MaterialExporter(material.Parent, bNoOtherTextures);
            }
        }
Exemplo n.º 4
0
        public MaterialExporter(UUnrealMaterial?unrealMaterial) : this()
        {
            if (unrealMaterial == null)
            {
                return;
            }
            _internalFilePath = unrealMaterial.Owner?.Name ?? unrealMaterial.Name;

            var allTextures = new List <UUnrealMaterial>();

            unrealMaterial.AppendReferencedTextures(allTextures, false);

            var parameters = new CMaterialParams();

            unrealMaterial.GetParams(parameters);
            if ((parameters.IsNull || parameters.Diffuse == unrealMaterial) && allTextures.Count == 0)
            {
                return;
            }

            var sb       = new StringBuilder();
            var toExport = new List <UUnrealMaterial>();

            void Proc(string name, UUnrealMaterial?arg)
            {
                if (arg == null)
                {
                    return;
                }
                sb.AppendLine($"{name}={arg.Name}");
                toExport.Add(arg);
            }

            Proc("Diffuse", parameters.Diffuse);
            Proc("Normal", parameters.Normal);
            Proc("Specular", parameters.Specular);
            Proc("SpecPower", parameters.SpecPower);
            Proc("Opacity", parameters.Opacity);
            Proc("Emissive", parameters.Emissive);
            Proc("Cube", parameters.Cube);
            Proc("Mask", parameters.Mask);

            // Export other textures
            var numOtherTextures = 0;

            foreach (var texture in allTextures)
            {
                if (toExport.Contains(texture))
                {
                    continue;
                }
                Proc($"Other[{numOtherTextures++}]", texture);
            }

            _fileData = sb.ToString().Trim();

            foreach (var texture in toExport)
            {
                if (texture == unrealMaterial || !(texture is UTexture2D t))
                {
                    continue;
                }
                _textures[t.Owner?.Name ?? t.Name] = t.Decode();
            }

            if (unrealMaterial is UMaterialInstanceConstant {
                Parent : { }
            } material)
            {
                _parentData = new MaterialExporter(material.Parent);
            }
        }