{"record":{"id":"a4edd5c616c9075d","repo":"Unity-Technologies/UnityCsReference","slug":"material-for-submesh-submeshindex-did-not-exist","errorCode":null,"errorMessage":"material for submesh {submeshIndex} did not exist.","messagePattern":"material for submesh (.+?) did not exist\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/GI/LightBaker.bindings.cs","lineNumber":565,"sourceCode":"            return Internal_instanceAlbedoEmissiveIndex(instanceIndex);\n        }\n        public int instanceToEmissiveIndex(uint instanceIndex)\n        {\n            if (instanceIndex >= instanceCount)\n                throw new ArgumentException($\"index must be between 0 and {instanceCount - 1}, but was {instanceIndex}\");\n            return Internal_instanceAlbedoEmissiveIndex(instanceIndex);\n        }\n        public int instanceToTransmissiveIndex(uint instanceIndex, uint submeshIndex)\n        {\n            if (instanceIndex >= instanceCount)\n                throw new ArgumentException($\"index must be between 0 and {instanceCount - 1}, but was {instanceIndex}\");\n            Instance inst = instance(instanceIndex);\n            int submeshCount = inst.submeshMaterialIndices.Length;\n            if (submeshIndex >= submeshCount)\n                throw new ArgumentException($\"submeshIndex must be between 0 and {submeshCount - 1}, but was {submeshIndex}\");\n            int materialIndex = inst.submeshMaterialIndices[submeshIndex];\n            if (materialIndex == -1)\n                throw new ArgumentException($\"material for submesh {submeshIndex} did not exist.\");\n\n            return Internal_instanceTransmissiveIndex(instanceIndex, submeshIndex);\n        }\n\n        public extern uint albedoTextureCount { get; }\n        public extern uint albedoTexturePropertiesCount { get; }\n        extern TextureData Internal_GetAlbedoTextureData(uint index);\n        extern void Internal_SetAlbedoTextureData(uint index, TextureData textureData);\n\n        public TextureData GetAlbedoTextureData(uint index)\n        {\n            if (index >= albedoTextureCount)\n                throw new ArgumentException($\"index must be between 0 and {albedoTextureCount - 1}, but was {index}\");\n            return Internal_GetAlbedoTextureData(index);\n        }\n        public void SetAlbedoTextureData(uint index, TextureData textureData)\n        {\n            if (index >= albedoTextureCount)","sourceCodeStart":547,"sourceCodeEnd":583,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/GI/LightBaker.bindings.cs#L547-L583","documentation":"instanceToTransmissiveIndex throws ArgumentException 'material for submesh {n} did not exist' when the submesh's entry in submeshMaterialIndices is -1. A -1 sentinel means that submesh has no material assigned, so there is no transmissive mapping to return. This is a data-state condition (the instance has submeshes but this one is unmaterialed), not an index-range error.","triggerScenarios":"Calling instanceToTransmissiveIndex on a submesh whose submeshMaterialIndices entry is -1; instances with partially-assigned materials (some submeshes missing materials).","commonSituations":"Meshes with mixed material assignment (e.g. some submeshes intentionally unmaterialed); editor state where a material slot was cleared; assuming every submesh has a material.","solutions":["Check inst.submeshMaterialIndices[submeshIndex] != -1 before calling instanceToTransmissiveIndex.","Treat a -1 entry as 'no material / not transmissive' and skip.","Investigate upstream material assignment if the submesh should have a material."],"exampleFix":"// before\nint tIdx = lightBaker.instanceToTransmissiveIndex(instIdx, subIdx);\n\n// after\nInstance inst = lightBaker.instance(instIdx);\nif (inst.submeshMaterialIndices[subIdx] == -1) continue;\nint tIdx = lightBaker.instanceToTransmissiveIndex(instIdx, subIdx);","handlingStrategy":"validation","validationCode":"Instance inst = lightBaker.instance(instanceIndex);\nif (inst.submeshMaterialIndices[submeshIndex] != -1)\n    int tIdx = lightBaker.instanceToTransmissiveIndex(instanceIndex, submeshIndex);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Check submeshMaterialIndices[submeshIndex] != -1 before mapping transmissive.","Treat -1 as 'no material assigned' and skip.","Investigate submeshes that should have materials but report -1."],"tags":["gi","lightbaking","material","transmissive","validation","argument"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}