{ "ASSET_TYPE_DEFINITIONS": { "Surface": { "description": "A single Standard PBR material set for a surface.", "color": "#1f3e5d", "examples": [ "WoodFloor01", "MetalPlate05" ] }, "Model": { "description": "A set that contains models, can include PBR textureset", "color": "#b67300", "examples": [ "Chair.fbx", "Character.obj" ] }, "Decal": { "description": "A alphamasked textureset", "color": "#68ac68", "examples": [ "Graffiti01", "LeakStain03", "DecalMancover" ] }, "Atlas": { "description": "A texture sheet containing multiple smaller textures.", "color": "#955b8b", "examples": [ "FoliageAtlas", "UITextureSheet" ] }, "UtilityMap": { "description": "A useful image-asset consisting of only a single texture. Therefor each Utilitymap can only contain a single item.", "color": "#706b87", "examples": [ "FlowMap", "CurvatureMap", "imperfection", "smudges", "scratches" ] } }, "FILE_TYPE_DEFINITIONS": { "MAP_COL": { "description": "Color/Albedo Map", "color": "#ffaa00", "examples": [ "_col.", "_basecolor.", "albedo", "diffuse" ], "standard_type": "COL", "bit_depth_rule": "force_8bit" }, "MAP_NRM": { "description": "Normal Map", "color": "#cca2f1", "examples": [ "_nrm.", "_normal." ], "standard_type": "NRM", "bit_depth_rule": "respect" }, "MAP_METAL": { "description": "Metalness Map", "color": "#dcf4f2", "examples": [ "_metal.", "_met." ], "standard_type": "METAL", "bit_depth_rule": "force_8bit" }, "MAP_ROUGH": { "description": "Roughness Map", "color": "#bfd6bf", "examples": [ "_rough.", "_rgh.", "_gloss" ], "standard_type": "ROUGH", "bit_depth_rule": "force_8bit" }, "MAP_AO": { "description": "Ambient Occlusion Map", "color": "#e3c7c7", "examples": [ "_ao.", "_ambientocclusion." ], "standard_type": "AO", "bit_depth_rule": "force_8bit" }, "MAP_DISP": { "description": "Displacement/Height Map", "color": "#c6ddd5", "examples": [ "_disp.", "_height." ], "standard_type": "DISP", "bit_depth_rule": "respect" }, "MAP_REFL": { "description": "Reflection/Specular Map", "color": "#c2c2b9", "examples": [ "_refl.", "_specular." ], "standard_type": "REFL", "bit_depth_rule": "force_8bit" }, "MAP_SSS": { "description": "Subsurface Scattering Map", "color": "#a0d394", "examples": [ "_sss.", "_subsurface." ], "standard_type": "SSS", "bit_depth_rule": "respect" }, "MAP_FUZZ": { "description": "Fuzz/Sheen Map", "color": "#a2d1da", "examples": [ "_fuzz.", "_sheen." ], "standard_type": "FUZZ", "bit_depth_rule": "force_8bit" }, "MAP_IDMAP": { "description": "ID Map (for masking)", "color": "#ca8fb4", "examples": [ "_id.", "_matid." ], "standard_type": "IDMAP", "bit_depth_rule": "force_8bit" }, "MAP_MASK": { "description": "Generic Mask Map", "color": "#c6e2bf", "examples": [ "_mask." ], "standard_type": "MASK", "bit_depth_rule": "force_8bit" }, "MAP_IMPERFECTION": { "description": "Imperfection Map (scratches, dust)", "color": "#e6d1a6", "examples": [ "_imp.", "_imperfection.", "splatter", "scratches", "smudges", "hairs", "fingerprints" ], "standard_type": "IMPERFECTION", "bit_depth_rule": "force_8bit" }, "MODEL": { "description": "3D Model File", "color": "#3db2bd", "examples": [ ".fbx", ".obj" ], "standard_type": "", "bit_depth_rule": "" }, "EXTRA": { "description": "asset previews or metadata", "color": "#8c8c8c", "examples": [ ".txt", ".zip", "preview.", "_flat.", "_sphere.", "_Cube.", "thumb" ], "standard_type": "", "bit_depth_rule": "" }, "FILE_IGNORE": { "description": "File to be ignored", "color": "#673d35", "examples": [ "Thumbs.db", ".DS_Store" ], "standard_type": "", "bit_depth_rule": "" } }, "TARGET_FILENAME_PATTERN": "{base_name}_{map_type}_{resolution}.{ext}", "STANDARD_MAP_TYPES": [ "COL", "NRM", "ROUGH", "METAL", "AO", "DISP", "REFL", "SSS", "FUZZ", "IDMAP", "MASK" ], "RESPECT_VARIANT_MAP_TYPES": [ "COL" ], "EXTRA_FILES_SUBDIR": "Extra", "OUTPUT_BASE_DIR": "../Asset_Processor_Output", "METADATA_FILENAME": "metadata.json", "DEFAULT_NODEGROUP_BLEND_PATH": "G:/02 Content/10-19 Content/19 Catalogs/19.01 Blender Asset Catalogue/_CustomLibraries/Nodes-Linked/PBRSET-Nodes-Testing.blend", "DEFAULT_MATERIALS_BLEND_PATH": "G:/02 Content/10-19 Content/19 Catalogs/19.01 Blender Asset Catalogue/_CustomLibraries/Materials-Append/PBR Materials-Testing.blend", "BLENDER_EXECUTABLE_PATH": "C:/Program Files/Blender Foundation/Blender 4.4/blender.exe", "PNG_COMPRESSION_LEVEL": 6, "JPG_QUALITY": 98, "RESOLUTION_THRESHOLD_FOR_JPG": 999999, "IMAGE_RESOLUTIONS": { "8K": 8192, "4K": 4096, "2K": 2048, "1K": 1024 }, "ASPECT_RATIO_DECIMALS": 2, "OUTPUT_FORMAT_16BIT_PRIMARY": "exr", "OUTPUT_FORMAT_16BIT_FALLBACK": "png", "OUTPUT_FORMAT_8BIT": "png", "MAP_MERGE_RULES": [ { "output_map_type": "NRMRGH", "inputs": { "R": "NRM", "G": "NRM", "B": "ROUGH" }, "defaults": { "R": 0.5, "G": 0.5, "B": 0.5 }, "output_bit_depth": "respect_inputs" } ], "CALCULATE_STATS_RESOLUTION": "1K", "DEFAULT_ASSET_CATEGORY": "Surface", "TEMP_DIR_PREFIX": "_PROCESS_ASSET_", "llm_predictor_examples": [ { "input": "MessyTextures/Concrete_Damage_Set/concrete_col.png\nMessyTextures/Concrete_Damage_Set/concrete_N.png\nMessyTextures/Concrete_Damage_Set/concrete_rough.jpg\nMessyTextures/Concrete_Damage_Set/height_map_concrete.tif\nMessyTextures/Concrete_Damage_Set/Thumbs.db\nMessyTextures/Fabric_Pattern/pattern_01_diffuse.tga\nMessyTextures/Fabric_Pattern/pattern_01_ao.png\nMessyTextures/Fabric_Pattern/pattern_01_normal.png\nMessyTextures/Fabric_Pattern/notes.txt\nMessyTextures/Fabric_Pattern/variant_blue_diffuse.tga\nMessyTextures/Fabric_Pattern/fabric_flat.jpg", "output": { "predicted_assets": [ { "suggested_asset_name": "Concrete_Damage_01", "predicted_asset_type": "Surface", "files": [ { "file_path": "MessyTextures/Concrete_Damage_Set/concrete_col.png", "predicted_file_type": "MAP_COL" }, { "file_path": "MessyTextures/Concrete_Damage_Set/concrete_N.png", "predicted_file_type": "MAP_NRM" }, { "file_path": "MessyTextures/Concrete_Damage_Set/concrete_rough.jpg", "predicted_file_type": "MAP_ROUGH" }, { "file_path": "MessyTextures/Concrete_Damage_Set/height_map_concrete.tif", "predicted_file_type": "MAP_DISP" }, { "file_path": "MessyTextures/Concrete_Damage_Set/Thumbs.db", "predicted_file_type": "FILE_IGNORE" } ] }, { "suggested_asset_name": "Fabric_Pattern_01", "predicted_asset_type": "Surface", "files": [ { "file_path": "MessyTextures/Fabric_Pattern/pattern_01_diffuse.tga", "predicted_file_type": "MAP_COL" }, { "file_path": "MessyTextures/Fabric_Pattern/pattern_01_ao.png", "predicted_file_type": "MAP_AO" }, { "file_path": "MessyTextures/Fabric_Pattern/pattern_01_normal.png", "predicted_file_type": "MAP_NRM" }, { "file_path": "MessyTextures/Fabric_Pattern/variant_blue_diffuse.tga", "predicted_file_type": "MAP_COL" }, { "file_path": "MessyTextures/Fabric_Pattern/fabric_flat.jpg", "predicted_file_type": "EXTRA" }, { "file_path": "MessyTextures/Fabric_Pattern/notes.txt", "predicted_file_type": "EXTRA" } ] } ] } }, { "input": "SciFi_Drone/Drone_Model.fbx\nSciFi_Drone/Textures/Drone_BaseColor.png\nSciFi_Drone/Textures/Drone_Metallic.png\nSciFi_Drone/Textures/Drone_Roughness.png\nSciFi_Drone/Textures/Drone_Normal.png\nSciFi_Drone/Textures/Drone_Emissive.jpg\nSciFi_Drone/ReferenceImages/concept.jpg", "output": { "predicted_assets": [ { "suggested_asset_name": "SciFi_Drone", "predicted_asset_type": "Model", "files": [ { "file_path": "SciFi_Drone/Drone_Model.fbx", "predicted_file_type": "MODEL" }, { "file_path": "SciFi_Drone/Textures/Drone_BaseColor.png", "predicted_file_type": "MAP_COL" }, { "file_path": "SciFi_Drone/Textures/Drone_Metallic.png", "predicted_file_type": "MAP_METAL" }, { "file_path": "SciFi_Drone/Textures/Drone_Roughness.png", "predicted_file_type": "MAP_ROUGH" }, { "file_path": "SciFi_Drone/Textures/Drone_Normal.png", "predicted_file_type": "MAP_NRM" }, { "file_path": "SciFi_Drone/Textures/Drone_Emissive.jpg", "predicted_file_type": "EXTRA" }, { "file_path": "SciFi_Drone/ReferenceImages/concept.jpg", "predicted_file_type": "EXTRA" } ] } ] } }, { "input": "21_hairs_deposits.tif\n22_hairs_fabric.tif\n23_hairs_fibres.tif\n24_hairs_fibres.tif\n25_bonus_isolatedFingerprints.tif\n26_bonus_isolatedPalmprint.tif\n27_metal_aluminum.tif\n28_metal_castIron.tif\n29_scratcehes_deposits_shapes.tif\n30_scratches_deposits.tif", "output": { "predicted_assets": [ { "suggested_asset_name": "21-Hairs-Deposits", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "21_hairs_deposits.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "22-Hairs-Fabric", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "22_hairs_fabric.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "23-Hairs-Deposits", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "23_hairs_fibres.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "24-Hairs-Fibres", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "24_hairs_fibres.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "27-MetalAluminium", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "27_metal_aluminum.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "28-MetalCastiron", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "28_metal_castIron.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "29-Scratches-Deposits-Shapes", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "29_scratcehes_deposits_shapes.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "30-Scrathes-Deposits", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "30_scratches_deposits.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "Bonus-IsolatedFingerprints", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "25_bonus_isolatedFingerprints.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] }, { "suggested_asset_name": "Bonus-IsolatedPalmprint", "predicted_asset_type": "UtilityMap", "files": [ { "file_path": "26_bonus_isolatedPalmprint.tif", "predicted_file_type": "MAP_IMPERFECTION" } ] } ] } }, { "input": "Part1/TextureSupply_Boards001_A_28x300cm-Albedo.jpg\nPart1/TextureSupply_Boards001_A_28x300cm-Normal.jpg\nPart1/TextureSupply_Boards001_B_28x300cm-Albedo.jpg\nPart1/TextureSupply_Boards001_B_28x300cm-Normal.jpg\nPart1/TextureSupply_Boards001_C_28x300cm-Albedo.jpg\nPart1/TextureSupply_Boards001_C_28x300cm-Normal.jpg\nPart1/TextureSupply_Boards001_D_28x300cm-Albedo.jpg\nPart1/TextureSupply_Boards001_D_28x300cm-Normal.jpg\nPart1/TextureSupply_Boards001_E_28x300cm-Albedo.jpg\nPart1/TextureSupply_Boards001_E_28x300cm-Normal.jpg\nPart1/TextureSupply_Boards001_F_28x300cm-Albedo.jpg\nPart1/TextureSupply_Boards001_F_28x300cm-Normal.jpg", "output": { "predicted_assets": [ { "suggested_asset_name": "Boards001_A", "predicted_asset_type": "Surface", "files": [ { "file_path": "Part1/TextureSupply_Boards001_A_28x300cm-Albedo.jpg", "predicted_file_type": "MAP_COL" }, { "file_path": "Part1/TextureSupply_Boards001_A_28x300cm-Normal.jpg", "predicted_file_type": "MAP_NRM" } ] }, { "suggested_asset_name": "Boards001_B", "predicted_asset_type": "Surface", "files": [ { "file_path": "Part1/TextureSupply_Boards001_B_28x300cm-Albedo.jpg", "predicted_file_type": "MAP_COL" }, { "file_path": "Part1/TextureSupply_Boards001_B_28x300cm-Normal.jpg", "predicted_file_type": "MAP_NRM" } ] }, { "suggested_asset_name": "Boards001_C", "predicted_asset_type": "Surface", "files": [ { "file_path": "Part1/TextureSupply_Boards001_C_28x300cm-Albedo.jpg", "predicted_file_type": "MAP_COL" }, { "file_path": "Part1/TextureSupply_Boards001_C_28x300cm-Normal.jpg", "predicted_file_type": "MAP_NRM" } ] }, { "suggested_asset_name": "Boards001_D", "predicted_asset_type": "Surface", "files": [ { "file_path": "Part1/TextureSupply_Boards001_D_28x300cm-Albedo.jpg", "predicted_file_type": "MAP_COL" }, { "file_path": "Part1/TextureSupply_Boards001_D_28x300cm-Normal.jpg", "predicted_file_type": "MAP_NRM" } ] }, { "suggested_asset_name": "Boards001_E", "predicted_asset_type": "Surface", "files": [ { "file_path": "Part1/TextureSupply_Boards001_E_28x300cm-Albedo.jpg", "predicted_file_type": "MAP_COL" }, { "file_path": "Part1/TextureSupply_Boards001_E_28x300cm-Normal.jpg", "predicted_file_type": "MAP_NRM" } ] }, { "suggested_asset_name": "Boards001_F", "predicted_asset_type": "Surface", "files": [ { "file_path": "Part1/TextureSupply_Boards001_F_28x300cm-Albedo.jpg", "predicted_file_type": "MAP_COL" }, { "file_path": "Part1/TextureSupply_Boards001_F_28x300cm-Normal.jpg", "predicted_file_type": "MAP_NRM" } ] } ] } } ], "llm_endpoint_url": "http://100.65.14.122:1234/v1/chat/completions", "llm_api_key": "", "llm_model_name": "", "llm_temperature": 0.5, "llm_request_timeout": 120, "llm_predictor_prompt": "You are an expert asset classification system. Your task is to analyze a list of file paths from a directory, identify patterns based on directory structure and filenames, and then group related files into logical assets. For each grouped asset, you must suggest a concise asset name, determine the overall asset type, and for each file within that asset, assign its specific file type.\n\nDefinitions:\n\nAsset Types: These define the overall category of an asset. Use one of the following keys for predicted_asset_type:\njson\n{ASSET_TYPE_DEFINITIONS}\n\n\nFile Types: These define the specific purpose of each file. Use one of the following keys for predicted_file_type:\njson\n{FILE_TYPE_DEFINITIONS}\n\n\nCore Task & Grouping Logic:\n\n1. Analyze Input: Examine the provided FILE_LIST. Pay close attention to directory paths and filenames (including prefixes, suffixes, separators like underscores or hyphens, and file extensions).\n2. Identify Potential Assets: Look for patterns that indicate files belong together:\n - Common Base Name: Files sharing a significant common prefix before map-type identifiers (e.g., Concrete_Damage_Set/concrete_ followed by col.png, N.png, rough.jpg).\n - Directory Grouping: Files located within the same immediate directory are often related, especially if their names follow a pattern (e.g., all files directly under SciFi_Drone/Textures/).\n - Model Association: If a MODEL file type (like .fbx, .obj) is present, group it with texture files that share its base name or are located in a plausible associated directory (like Textures/).\n - Single-File Assets (Utility Maps): Files whose names strongly suggest a UtilityMap type (e.g., scratches.tif, FlowMap.png, 21_hairs_deposits.tif) should typically form their own asset, unless they clearly belong to a larger PBR set based on naming conventions. Remember UtilityMap assets usually contain only one file as per their definition.\n - Variations: Files indicating variations (e.g., _A, _B or _variant_blue) should be grouped logically.\n - If variations represent complete, distinct sets (like Boards001_A and Boards001_B in the examples), create separate assets for each variation.\n - If variations seem like alternative maps or supplementary files for a single core asset (like pattern_01_diffuse.tga and variant_blue_diffuse.tga in the examples), group them under one asset. Use the base name (e.g., Fabric_Pattern_01) for the asset.\n3. Group Files: Based on the identified patterns, group the file paths into logical predicted_assets.\n4. Determine Asset Type: For each asset group, determine the most appropriate predicted_asset_type by considering the types of files it contains (e.g., presence of a .fbx suggests Model; multiple PBR maps like MAP_COL, MAP_NRM, MAP_ROUGH suggest Surface; a single imperfection map suggests UtilityMap). Refer to the ASSET_TYPE_DEFINITIONS.\n5. Suggest Asset Name: For each asset, generate a suggested_asset_name. This should be concise and derived from the common base filename or the immediate parent directory name. Clean up the name (e.g., use CamelCase or underscores consistently, remove redundant info like dimensions if not essential).\n6. Assign File Types: For each file_path within an asset, determine the most appropriate predicted_file_type based on its name, extension, and context within the asset. Use the keys from FILE_TYPE_DEFINITIONS.\n - Use FILE_IGNORE for files that should be ignored (e.g., Thumbs.db, .DS_Store).\n - Use EXTRA for files that belong to the asset but don't fit a standard map type (e.g., previews, text files, non-standard maps like Emissive unless you add a specific type for it).\n\nInput File List:\n\ntext\n{FILE_LIST}\n\n\nOutput Format:\n\nYour response MUST be ONLY a single, perfectly valid JSON object adhering strictly to the structure below. Do NOT include any text, explanations, or introductory phrases before or after the JSON object. Ensure all strings are correctly quoted and escaped, and there are NO trailing commas or comments (//, /* */).\n\nCRITICAL: The output must be strictly valid JSON parsable by standard libraries.\n\njson\n{\n \"predicted_assets\": [\n {\n \"suggested_asset_name\": \"string\", // Concise asset name derived from common file parts or directory\n \"predicted_asset_type\": \"string\", // Key from Asset Types definitions\n \"files\": [\n {\n \"file_path\": \"string\", // Exact relative path from the input list\n \"predicted_file_type\": \"string\" // Key from File Types definitions\n },\n // ... more files\n ]\n },\n // ... more assets\n ]\n}\n\n\nExamples:\n\nHere are examples of input file lists and the desired JSON output, illustrating the grouping logic:\n\njson\n[\n {EXAMPLE_INPUT_OUTPUT_PAIRS}\n]\n\n\nNow, process the provided FILE_LIST and generate ONLY the JSON output according to these instructions." }