private static Material CreateMaterial(this Link.Visual.Material urdfMaterial)
        {
            if (urdfMaterial.name == "")
            {
                urdfMaterial.name = GenerateMaterialName(urdfMaterial);
            }

            var material = RuntimeUrdf.AssetDatabase_LoadAssetAtPath <Material>(UrdfAssetPathHandler.GetMaterialAssetPath(urdfMaterial.name));

            if (material != null)
            {   //material already exists
                return(material);
            }

            material = MaterialExtensions.CreateBasicMaterial();
            if (urdfMaterial.color != null)
            {
                MaterialExtensions.SetMaterialColor(material, CreateColor(urdfMaterial.color));
            }
            else if (urdfMaterial.texture != null)
            {
                material.mainTexture = LoadTexture(urdfMaterial.texture.filename);
            }

            RuntimeUrdf.AssetDatabase_CreateAsset(material, UrdfAssetPathHandler.GetMaterialAssetPath(urdfMaterial.name));
            return(material);
        }
        public static void SetUrdfMaterial(GameObject gameObject, Link.Visual.Material urdfMaterial)
        {
            if (urdfMaterial != null)
            {
                var material = CreateMaterial(urdfMaterial);
                SetMaterial(gameObject, material);
            }
            else
            {
                //If the URDF material is not defined, and the renderer is missing
                //a material, assign the default material.
                Renderer renderer = gameObject.GetComponentInChildren <Renderer>();
                if (renderer != null && renderer.sharedMaterial == null)
                {
                    Material material = defaultMaterial;
#if UNITY_EDITOR
                    if (!RuntimeUrdf.IsRuntimeMode())
                    {
                        material = RuntimeUrdf.AssetDatabase_LoadAssetAtPath <Material>(UrdfAssetPathHandler.GetMaterialAssetPath(DefaultMaterialName));
                    }
#endif
                    SetMaterial(gameObject, material);
                }
            }
        }
        public static Link.Visual ExportVisualData(this UrdfVisual urdfVisual)
        {
            UrdfGeometry.CheckForUrdfCompatibility(urdfVisual.transform, urdfVisual.geometryType);

            Link.Geometry geometry = UrdfGeometry.ExportGeometryData(urdfVisual.geometryType, urdfVisual.transform);

            Link.Visual.Material material = null;
            if ((geometry.mesh != null))
            {
                material = UrdfMaterial.ExportMaterialData(urdfVisual.GetComponentInChildren <MeshRenderer>().sharedMaterial);
            }
            string visualName = urdfVisual.name == "unnamed" ? null : urdfVisual.name;

            return(new Link.Visual(geometry, visualName, UrdfOrigin.ExportOriginData(urdfVisual.transform), material));
        }
        private static string GenerateMaterialName(Link.Visual.Material urdfMaterial)
        {
            var materialName = "";

            if (urdfMaterial.color != null)
            {
                materialName = "rgba-";
                for (var i = 0; i < urdfMaterial.color.rgba.Length; i++)
                {
                    materialName += urdfMaterial.color.rgba[i];
                    if (i != urdfMaterial.color.rgba.Length - 1)
                    {
                        materialName += "-";
                    }
                }
            }
            else if (urdfMaterial.texture != null)
            {
                materialName = "texture-" + Path.GetFileName(urdfMaterial.texture.filename);
            }

            return(materialName);
        }
예제 #5
0
        /// <summary>
        /// Compares material information of two visuals
        /// </summary>
        /// <param name="source">First visual's material information to be compared</param>
        /// <param name="exported">Second visuals's material information to be compared</param>
        /// <param name="indent">Indent level in the log file</param>
        /// <returns></returns>
        private bool CompareMaterial(Link.Visual.Material source, Link.Visual.Material exported, int indent)
        {
            bool materialNameEqual = source.name == exported.name;

            linkLog.AppendLine(String.Format("{0}Name Equal:{1,6}", Indent(indent), materialNameEqual));
            linkLog.AppendLine(String.Format("{0}Name: Source: {1,12} ", Indent(indent), source.name));
            linkLog.AppendLine(String.Format("{0}Exported: {1,12}", Indent(indent), exported.name));

            if (!materialNameEqual)
            {
                return(false);
            }

            if (source.color != null && exported.color != null)
            {
                for (int i = 0; i < 3; i++)
                {
                    if (source.color.rgba[i] != exported.color.rgba[i])
                    {
                        linkLog.AppendLine(String.Format("{0}Colors Equal: {1,6}", Indent(indent), "False"));
                        linkLog.AppendLine(String.Format("{0}RGB Source: {1,5:F3} {2,5:F3} {3,5:F3} ", Indent(indent), source.color.rgba[0], source.color.rgba[1], source.color.rgba[2]));
                        linkLog.AppendLine(String.Format("{0}RGB Exported: {1,5:F3} {2,5:F3} {3,5:F3}", Indent(indent), exported.color.rgba[0], exported.color.rgba[1], exported.color.rgba[2]));
                        return(false);
                    }
                }
                linkLog.AppendLine(String.Format("{0}Colors Equal: {1,6}", Indent(indent), "True"));
                linkLog.AppendLine(String.Format("{0}RGB :{1,5:F3} {2,5:F3} {3,5:F3} ", Indent(indent), source.color.rgba[0], source.color.rgba[1], source.color.rgba[2]));
            }
            else if (source.color == null && exported.color == null)
            {
                linkLog.AppendLine(String.Format("{0} Color nullity equality:{1,6}", Indent(indent), "True"));
            }
            else
            {
                linkLog.AppendLine(String.Format("{0} Color nullity equality:{1,6}", Indent(indent), "False"));
                return(false);
            }

            if (source.texture != null && exported.texture != null)
            {
                bool textureNameEqual = (source.texture.filename != exported.texture.filename);
                linkLog.AppendLine(String.Format("{0}Name Equal: {1,6}", Indent(indent), textureNameEqual));
                linkLog.AppendLine(String.Format("{0}Name: Source:{1,12}", Indent(indent), source.texture.filename));
                linkLog.AppendLine(String.Format("{0}Exported:{1,12}", Indent(indent), exported.texture.filename));
                if (!textureNameEqual)
                {
                    return(false);
                }
            }
            else if (source.texture == null && source.texture == null)
            {
                linkLog.AppendLine(String.Format("{0}Texture nullity equality:{1,6}", Indent(indent), "True"));
            }
            else
            {
                linkLog.AppendLine(String.Format("{0}Texture nullity equality:{1,6}", Indent(indent), "False"));
                return(false);
            }


            return(true);
        }