// ShaderLab doesn't understand virtual texture inputs, they need to be processed to replace the virtual texture input with the layers that compose it instead public static GraphInputData ProcessVirtualTextureProperty(VirtualTextureShaderProperty virtualTextureShaderProperty) { var layerReferenceNames = new List <string>(); virtualTextureShaderProperty.GetPropertyReferenceNames(layerReferenceNames); var virtualTextureLayerDataList = new List <SubPropertyData>(); // Skip the first entry in this list as that's the Virtual Texture reference name itself, which won't exist in ShaderLab foreach (var referenceName in layerReferenceNames.Skip(1)) { var layerPropertyData = new SubPropertyData() { referenceName = referenceName, propertyType = PropertyType.Texture2D }; virtualTextureLayerDataList.Add(layerPropertyData); } var virtualTexturePropertyData = new GraphInputData() { referenceName = virtualTextureShaderProperty.displayName, propertyType = PropertyType.VirtualTexture, isKeyword = false }; virtualTexturePropertyData.isCompoundProperty = true; virtualTexturePropertyData.subProperties = virtualTextureLayerDataList; return(virtualTexturePropertyData); }