Mud-H Posted July 3, 2015 Share Posted July 3, 2015 I'm trying to get a rid of the missing material warning for TerrainMaterial: [MaterialList::mapMaterials] Unable to find material for texture: [matName]After comparing with fullTemplate, I realized that all TerrainMaterial have a Material defined for the diffuseMap, what is it needed for? Just to get rid off the warning?I remember a while back I was making a Material for each of my TerrainMaterial but I lost this habit and I don't see a difference. I just want to know if I'm missing something, is there a use for the extra Material or it's just in case you need the TerrainMaterial as standard material? If it's not needed, anyone have a solution to get rid of the warning? Quote Link to comment Share on other sites More sharing options...
Duion Posted July 3, 2015 Share Posted July 3, 2015 Terrain materials don't need a standard material, but there is a case where they do, there are Terrain_FX materials that define some settings like footstep sound, decals, particle effects etc.So you need a "new TerrainMaterial()" and a "singleton Material(TerrainFX_)No idea why, but it works that way. Quote Link to comment Share on other sites More sharing options...
Mud-H Posted July 3, 2015 Author Share Posted July 3, 2015 Well since I'm lasy and don't like having to write extra Material, I made a TerrainMaterial fix function that check all TerrainMaterial in art/terrains folder. It create a new material file with a pre_ prefix containing all diffuseMap with missing Materials.Here's the initial version in case someone want to use it, it's a quick scripting job but it do the job and save time writing material. Also you can use the %reset to regenerate all the materials. The %loadNew var is for loading the new Material file instantly once created . For future updates, it will be included in my helpers collection.function fixTerrainMaterialsStock(%loadNew,%reset) { %searchFolder = "art/terrains/*materials.cs"; //Now go through each files again to add a brush with latest items for(%matFile = findFirstFile(%searchFolder); %matFile !$= ""; %matFile = findNextFile(%searchFolder)) { %fileObj = new FileObject(); // Open a text file, if it exists %fileObj.OpenForRead(%matFile); %folder = filePath(%matFile); %fileBase = fileBase(%matFile); %newMatFile = %folder@"/pre_"@%fileBase@".cs"; %fileWrite = ""; while( !%fileObj.isEOF() ) { %line = %fileObj.readLine(); if (strFind(%line,"TerrainMaterial")) { %inTerrainMaterial = true; } else if(%inTerrainMaterial && strFind(%line,"diffuseMap")) { %lineFields = strreplace(%line,"\"","\t"); %difMap = getField(%lineFields,getFieldCount(%lineFields)-2); %difMapName = fileBase(%difMap); %matObj = "Mat_"@%difMapName; %matObj = strReplaceList(%matObj,"-" TAB "_" NL " " TAB "_"); if (isObject(%matObj) && %reset) delObj(%matObj); if (!isObject(%matObj)) { if (!isObject(%fileWrite)) { %fileWrite = new FileObject(); %fileWrite.OpenForWrite(%newMatFile); %fileWrite.writeLine("//=============================================================================="); %fileWrite.writeLine("//Auto generated material for TerrainMaterial in:"@%fileBase@""); %fileWrite.writeLine("//------------------------------------------------------------------------------"); %fileWrite.writeLine("//=============================================================================="); %fileWrite.writeLine("info(\"Loading generated materials for:"@%fileBase@"\");"); } %fileWrite.writeLine("//=============================================================================="); %fileWrite.writeLine("singleton Material("@%matObj@")"); %fileWrite.writeLine("{"); %fileWrite.writeLine(" mapTo = \""@%difMapName@"\";"); %fileWrite.writeLine(" footstepSoundId = 0;"); %fileWrite.writeLine(" terrainMaterials = \"1\";"); %fileWrite.writeLine(" ShowDust = \"1\";"); %fileWrite.writeLine(" showFootprints = \"1\";"); %fileWrite.writeLine(" materialTag0 = \"Terrain\";"); %fileWrite.writeLine(" impactSoundId = 0;"); %fileWrite.writeLine("};"); %fileWrite.writeLine("//------------------------------------------------------------------------------"); } } else if (strFind(%line,"};")) { %inTerrainMaterial = false; } } if (isObject(%fileWrite)) { %fileWrite.close(); %fileWrite.delete(); if (%loadNew) exec(%newMatFile); } %fileObj.close(); %fileObj.delete(); } }You could then simply paster the new material file before your terrain materials or to keep the pre_ material file, I have add a check for that file in the loadMaterials function, if the pre_ file is found, it will execute it before executing the standard material file.Just add this before the exec(%file) in loadMaterials() %folder = filePath(%file); %fileBase = fileBase(%file); %preMatFile = %folder@"/pre_"@%fileBase@".cs"; if (isFile(%preMatFile)) exec(%preMatFile); Quote Link to comment Share on other sites More sharing options...
Duion Posted July 4, 2015 Share Posted July 4, 2015 I don't understand what you are doing there, I just create materials by copy and paste by hand and then change the values I need. Quote Link to comment Share on other sites More sharing options...
Mud-H Posted July 4, 2015 Author Share Posted July 4, 2015 Yeah, I know but like I said I'm lazy. These days I'm experimenting a lot with terrains and I often change or create materials. With that functions, I can make sure the linked Materials are up-to-date.It's quite useless for basic use of already develloped materials but it will help me a bit... And I would expand it someday... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.