// 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); }
internal override ShaderInput Copy() { var vt = new VirtualTextureShaderProperty { displayName = displayName, value = new SerializableVirtualTexture(), }; // duplicate layer data, but reset reference names (they should be unique) for (int layer = 0; layer < value.layers.Count; layer++) { var guid = Guid.NewGuid(); vt.value.layers.Add(new SerializableVirtualTextureLayer(value.layers[layer])); } return(vt); }
internal override ShaderInput Copy() { var vt = new VirtualTextureShaderProperty { displayName = displayName, hidden = hidden, value = new SerializableVirtualTexture(), precision = precision }; // duplicate layer data, but reset reference names (they should be unique) for (int layer = 0; layer < value.layers.Count; layer++) { var guid = Guid.NewGuid(); vt.value.layers.Add( new SerializableVirtualTextureLayer( value.layers[layer].layerName, $"Layer_{GuidEncoder.Encode(guid)}", value.layers[layer].layerTexture)); } return(vt); }