public static void applyToModelDatabase() { ConfigNode[] textureNodes = GameDatabase.Instance.GetConfigNodes("SSTU_SHADER"); ConfigNode textureNode; ShaderProperty[] props; int len = textureNodes.Length; string name, shader, diff, nrm, spec, glow, ao; string[] excludeMeshes, meshes; for (int i = 0; i < len; i++) { textureNode = textureNodes[i]; name = textureNode.GetStringValue("name"); shader = textureNode.GetStringValue("shader"); diff = textureNode.GetStringValue("diffuse"); nrm = textureNode.GetStringValue("normal"); spec = textureNode.GetStringValue("specular"); glow = textureNode.GetStringValue("emissive"); ao = textureNode.GetStringValue("occlusion"); excludeMeshes = textureNode.GetStringValues("excludeMesh"); meshes = textureNode.GetStringValues("mesh"); props = ShaderProperty.parse(textureNode); GameObject go = GameDatabase.Instance.GetModelPrefab(name); if (go == null) { MonoBehaviour.print("ERROR: Could not locate game object for model: " + name + ". Could not update shader or textures for model"); continue; } MonoBehaviour.print("Updating shader for model: " + name); updateModelMaterial(go.transform, excludeMeshes, meshes, shader, diff, nrm, spec, glow, ao, props); } }
public static ShaderProperty[] parse(ConfigNode node) { ShaderProperty[] props; ConfigNode[] propNodes = node.GetNodes("PROPERTY"); int len = propNodes.Length; props = new ShaderProperty[len]; for (int i = 0; i < len; i++) { props[i] = new ShaderProperty(propNodes[i]); } return props; }
public static ShaderProperty[] parse(ConfigNode node) { ShaderProperty[] props; ConfigNode[] propNodes = node.GetNodes("PROPERTY"); int len = propNodes.Length; props = new ShaderProperty[len]; for (int i = 0; i < len; i++) { props[i] = new ShaderProperty(propNodes[i]); } return(props); }
public static void updateRenderer(Renderer rend, string shader, string diffuse, string normal, string specular, string emissive, string occlusion, ShaderProperty[] props) { Material m = rend.material; if (!String.IsNullOrEmpty(shader) && shader != m.shader.name) { m.shader = SSTUDatabase.getShader(shader); } if (!String.IsNullOrEmpty(diffuse)) { m.mainTexture = GameDatabase.Instance.GetTexture(diffuse, false); } if (!String.IsNullOrEmpty(normal)) { m.SetTexture("_BumpMap", GameDatabase.Instance.GetTexture(normal, true)); } if (!String.IsNullOrEmpty(specular)) { m.SetTexture("_SpecMap", GameDatabase.Instance.GetTexture(specular, false)); } if (!String.IsNullOrEmpty(emissive)) { m.SetTexture("_Emissive", GameDatabase.Instance.GetTexture(emissive, false)); } if (!String.IsNullOrEmpty(occlusion)) { m.SetTexture("_AOMap", GameDatabase.Instance.GetTexture(occlusion, false)); } updateMaterialProperties(m, props); }
public static void updateModelMaterial(Transform root, string[] excludeMeshes, string[] meshes, string shader, string diffuse, string normal, string specular, string emissive, string occlusion, ShaderProperty[] props) { //black-list, do everything not specified in excludeMeshes array if (excludeMeshes != null && excludeMeshes.Length > 0) { //TODO } else if (meshes == null || meshes.Length <= 0)//no validation, do them all { Renderer[] rends = root.GetComponentsInChildren<Renderer>(true); int len = rends.Length; for (int i = 0; i < len; i++) { updateRenderer(rends[i], shader, diffuse, normal, specular, emissive, occlusion, props); } } else//white-list, only do what is specified by meshes array { int len = meshes.Length; Transform tr; Renderer r; for (int i = 0; i < len; i++) { tr = root.FindRecursive(meshes[i]); if (tr == null) { continue; } r = tr.GetComponent<Renderer>(); if (r == null) { continue; } updateRenderer(r, shader, diffuse, normal, specular, emissive, occlusion, props); } } }
public static void updateMaterialProperties(Material m, ShaderProperty[] props) { if (m == null || props == null || props.Length == 0) { return; } int len = props.Length; for (int i = 0; i < len; i++) { props[i].apply(m); } }