/// <summary>
 /// Initializes a new instance of the <see cref="PhongMaterial"/> class.
 /// </summary>
 /// <param name="core">The core.</param>
 public PhongMaterial(PhongMaterialCore core) : base(core)
 {
     AmbientColor                  = core.AmbientColor;
     DiffuseColor                  = core.DiffuseColor;
     DisplacementMap               = core.DisplacementMap;
     EmissiveColor                 = core.EmissiveColor;
     Name                          = core.Name;
     NormalMap                     = core.NormalMap;
     ReflectiveColor               = core.ReflectiveColor;
     SpecularColor                 = core.SpecularColor;
     SpecularShininess             = core.SpecularShininess;
     DiffuseMap                    = core.DiffuseMap;
     DiffuseAlphaMap               = core.DiffuseAlphaMap;
     SpecularColorMap              = core.SpecularColorMap;
     EmissiveMap                   = core.EmissiveMap;
     DisplacementMapScaleMask      = core.DisplacementMapScaleMask;
     DiffuseMapSampler             = core.DiffuseMapSampler;
     DisplacementMapSampler        = core.DisplacementMapSampler;
     MaxTessellationDistance       = core.MaxTessellationDistance;
     MinTessellationDistance       = core.MinTessellationDistance;
     MaxDistanceTessellationFactor = core.MaxDistanceTessellationFactor;
     MinDistanceTessellationFactor = core.MinDistanceTessellationFactor;
     EnableTessellation            = core.EnableTessellation;
     RenderDiffuseAlphaMap         = core.RenderDiffuseAlphaMap;
     RenderDiffuseMap              = core.RenderDiffuseMap;
     RenderDisplacementMap         = core.RenderDisplacementMap;
     RenderNormalMap               = core.RenderNormalMap;
     RenderEnvironmentMap          = core.RenderEnvironmentMap;
     RenderShadowMap               = core.RenderShadowMap;
     RenderSpecularColorMap        = core.RenderSpecularColorMap;
     RenderEmissiveMap             = core.RenderEmissiveMap;
     EnableAutoTangent             = core.EnableAutoTangent;
     UVTransform                   = core.UVTransform;
     EnableFlatShading             = core.EnableFlatShading;
 }
 public override int GetHashCode()
 {
     return(GetType().GetHashCode() ^
            Position.GetHashCode() ^
            Size.GetHashCode() ^
            NWidth.GetHashCode() ^
            NHeight.GetHashCode() ^
            UVMin.GetHashCode() ^
            UVMax.GetHashCode() ^
            UVTransform.GetHashCode() ^
            Transform.GetHashCode() ^
            MeshType.GetHashCode());
 }
Beispiel #3
0
        public void Read(AssetReader reader)
        {
            Texture.Read(reader);
            if (IsReadAlphaTexture(reader.Version))
            {
                AlphaTexture.Read(reader);
            }
            if (IsReadSecondaryTextures(reader.Version))
            {
                m_secondaryTextures = reader.ReadAssetArray <SecondarySpriteTexture>();
            }

            if (IsReadVertices(reader.Version))
            {
                m_vertices = reader.ReadAssetArray <SpriteVertex>();
                m_indices  = reader.ReadUInt16Array();
                reader.AlignStream(AlignType.Align4);
            }
            else
            {
                m_subMeshes   = reader.ReadAssetArray <SubMesh>();
                m_indexBuffer = reader.ReadByteArray();
                reader.AlignStream(AlignType.Align4);

                VertexData.Read(reader);
            }
            if (IsReadBindpose(reader.Version))
            {
                m_bindpose = reader.ReadAssetArray <Matrix4x4f>();
            }
            if (IsReadSourceSkin(reader.Version))
            {
                m_sourceSkin = reader.ReadAssetArray <BoneWeights4>();
            }

            TextureRect.Read(reader);
            TextureRectOffset.Read(reader);
            if (IsReadAtlasRectOffset(reader.Version))
            {
                AtlasRectOffset.Read(reader);
            }
            SettingsRaw = reader.ReadUInt32();
            if (IsReadUVTransform(reader.Version))
            {
                UVTransform.Read(reader);
            }
            if (IsReadDownscaleMultiplier(reader.Version))
            {
                DownscaleMultiplier = reader.ReadSingle();
            }
        }
Beispiel #4
0
        public YAMLNode ExportYAML(IExportContainer container)
        {
            YAMLMappingNode node = new YAMLMappingNode();

            node.Add(TextureName, Texture.ExportYAML(container));
            node.Add(AlphaTextureName, AlphaTexture.ExportYAML(container));
            node.Add(TextureRectName, TextureRect.ExportYAML(container));
            node.Add(TextureRectOffsetName, TextureRectOffset.ExportYAML(container));
            node.Add(AtlasRectOffsetName, AtlasRectOffset.ExportYAML(container));
            node.Add(UVTransformName, UVTransform.ExportYAML(container));
            node.Add(DownscaleMultiplierName, DownscaleMultiplier);
            node.Add(SettingsRawName, SettingsRaw);
            return(node);
        }
Beispiel #5
0
 public void Read(AssetReader reader)
 {
     Texture.Read(reader);
     AlphaTexture.Read(reader);
     TextureRect.Read(reader);
     TextureRectOffset.Read(reader);
     if (HasAtlasRectOffset(reader.Version))
     {
         AtlasRectOffset.Read(reader);
     }
     UVTransform.Read(reader);
     DownscaleMultiplier = reader.ReadSingle();
     SettingsRaw         = reader.ReadUInt32();
 }
 public void Read(AssetStream stream)
 {
     Texture.Read(stream);
     AlphaTexture.Read(stream);
     Texture.Read(stream);
     TextureRectOffset.Read(stream);
     if (IsReadAtlasRectOffset(stream.Version))
     {
         AtlasRectOffset.Read(stream);
     }
     UVTransform.Read(stream);
     DownscaleMultiplier = stream.ReadSingle();
     SettingsRaw         = stream.ReadUInt32();
 }
Beispiel #7
0
 public void Write(AssetsWriter writer)
 {
     Texture.Write(writer);
     AlphaTexture.Write(writer);
     writer.WriteArrayOf(SubMeshes, (o, w) => o.Write(w));
     writer.WriteArray(IndexBuffer);
     writer.AlignTo(4);
     VertexData.Write(writer);
     writer.WriteArrayOf(BindPose, (o, w) => w.Write(o));
     TextureRect.Write(writer);
     TextureRectOffset.Write(writer);
     AtlasRectOffset.Write(writer);
     writer.Write(SettingsRaw);
     UVTransform.Write(writer);
     writer.Write(DownscaleMultiplier);
 }
Beispiel #8
0
        public void Read(AssetStream stream)
        {
            Texture.Read(stream);
            if (IsReadAlphaTexture(stream.Version))
            {
                AlphaTexture.Read(stream);
            }

            if (IsReadVertices(stream.Version))
            {
                m_vertices = stream.ReadArray <SpriteVertex>();
                m_indices  = stream.ReadUInt16Array();
                stream.AlignStream(AlignType.Align4);
            }
            else
            {
                m_subMeshes   = stream.ReadArray <SubMesh>();
                m_indexBuffer = stream.ReadByteArray();
                stream.AlignStream(AlignType.Align4);

                VertexData.Read(stream);
            }
            if (IsReadBindpose(stream.Version))
            {
                m_bindpose = stream.ReadArray <Matrix4x4f>();
            }
            if (IsReadSourceSkin(stream.Version))
            {
                m_sourceSkin = stream.ReadArray <BoneWeights4>();
            }

            TextureRect.Read(stream);
            TextureRectOffset.Read(stream);
            if (IsReadAtlasRectOffset(stream.Version))
            {
                AtlasRectOffset.Read(stream);
            }
            SettingsRaw = stream.ReadUInt32();
            if (IsReadUVTransform(stream.Version))
            {
                UVTransform.Read(stream);
            }
            if (IsReadDownscaleMultiplier(stream.Version))
            {
                DownscaleMultiplier = stream.ReadSingle();
            }
        }
Beispiel #9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PBRMaterial"/> class.
        /// </summary>
        /// <param name="core">The core.</param>
        public PBRMaterial(PBRMaterialCore core) : base(core)
        {
            AlbedoColor            = core.AlbedoColor;
            MetallicFactor         = core.MetallicFactor;
            RoughnessFactor        = core.RoughnessFactor;
            AmbientOcclusionFactor = core.AmbientOcclusionFactor;
            ReflectanceFactor      = core.ReflectanceFactor;
            ClearCoatStrength      = core.ClearCoatStrength;
            ClearCoatRoughness     = core.ClearCoatRoughness;

            AlbedoMap              = core.AlbedoMap;
            NormalMap              = core.NormalMap;
            EmissiveMap            = core.EmissiveMap;
            RoughnessMetallicMap   = core.RoughnessMetallicMap;
            AmbientOcculsionMap    = core.AmbientOcculsionMap;
            IrradianceMap          = core.IrradianceMap;
            DisplacementMap        = core.DisplacementMap;
            SurfaceMapSampler      = core.SurfaceMapSampler;
            IBLSampler             = core.IBLSampler;
            DisplacementMapSampler = core.DisplacementMapSampler;

            RenderAlbedoMap            = core.RenderAlbedoMap;
            RenderDisplacementMap      = core.RenderDisplacementMap;
            RenderEmissiveMap          = core.RenderEmissiveMap;
            RenderEnvironmentMap       = core.RenderEnvironmentMap;
            RenderIrradianceMap        = core.RenderIrradianceMap;
            RenderNormalMap            = core.RenderNormalMap;
            RenderRoughnessMetallicMap = core.RenderRoughnessMetallicMap;
            RenderAmbientOcclusionMap  = core.RenderAmbientOcclusionMap;
            RenderShadowMap            = core.RenderShadowMap;
            EnableAutoTangent          = core.EnableAutoTangent;
            DisplacementMapScaleMask   = core.DisplacementMapScaleMask;
            UVTransform = core.UVTransform;

            EnableTessellation            = core.EnableTessellation;
            MaxDistanceTessellationFactor = core.MaxDistanceTessellationFactor;
            MinDistanceTessellationFactor = core.MinDistanceTessellationFactor;
            MaxTessellationDistance       = core.MaxTessellationDistance;
            MinTessellationDistance       = core.MinTessellationDistance;
        }
    public static void Build()
    {
        var skipList = new List <string>();

        foreach (var i in entries)
        {
            var e  = i.Value;
            var mw = e.right - e.left;
            var mh = e.bottom - e.top;
            var dx = (float)mw / (float)e.texWidth;
            var dy = (float)mh / (float)e.texHeight;

            if (dx >= 0.9 || dy >= 0.9)
            {
                skipList.Add(i.Key);
            }
        }

        foreach (var sl in skipList)
        {
            entries.Remove(sl);
        }

        foreach (var i in entries)
        {
            var e = i.Value;

            var mw = e.right - e.left;
            var mh = e.bottom - e.top;

            mw = Mathf.NextPowerOfTwo(mw);
            mh = Mathf.NextPowerOfTwo(mh);

            int left  = e.left;
            int right = left + (mw - 1);
            if (right > e.texWidth - 1)
            {
                // shift left
                right = e.texWidth - 1;
                left  = right - (mw - 1);
            }

            int top    = e.top;
            int bottom = top + (mh - 1);
            if (bottom > e.texHeight - 1)
            {
                // shift up
                bottom = e.texHeight - 1;
                top    = bottom - (mh - 1);
            }

            UVTransform uvt = new UVTransform();
            uvt.offset = new Vector2(-(float)left / (float)e.texWidth, -(float)top / (float)e.texHeight);
            uvt.scale  = new Vector2((float)e.texWidth / (float)mw, (float)e.texHeight / (float)mh);

            foreach (var j in e.subMeshMap)
            {
                var list = j.Value;
                Dictionary <int, UVTransform> uvtMap = null;
                if (meshMap.ContainsKey(j.Key))
                {
                    uvtMap = meshMap[j.Key];
                }
                else
                {
                    uvtMap         = new Dictionary <int, UVTransform>();
                    meshMap[j.Key] = uvtMap;
                }

                foreach (var subMeshIdx in list)
                {
                    uvtMap[subMeshIdx] = uvt;
                }
            }
        }
    }