public static void GetGradientPropertiesForPreview(PropertyCollector properties, string name, Gradient value) { properties.AddShaderProperty(new Vector1ShaderProperty() { overrideReferenceName = $"{name}_Type", value = (int)value.mode, generatePropertyBlock = false }); properties.AddShaderProperty(new Vector1ShaderProperty() { overrideReferenceName = $"{name}_ColorsLength", value = value.colorKeys.Length, generatePropertyBlock = false }); properties.AddShaderProperty(new Vector1ShaderProperty() { overrideReferenceName = $"{name}_AlphasLength", value = value.alphaKeys.Length, generatePropertyBlock = false }); for (int i = 0; i < 8; i++) { properties.AddShaderProperty(new Vector4ShaderProperty() { overrideReferenceName = $"{name}_ColorKey{i}", value = i < value.colorKeys.Length ? GradientUtil.ColorKeyToVector(value.colorKeys[i]) : Vector4.zero, generatePropertyBlock = false }); } for (int i = 0; i < 8; i++) { properties.AddShaderProperty(new Vector2ShaderProperty() { overrideReferenceName = $"{name}_AlphaKey{i}", value = i < value.alphaKeys.Length ? GradientUtil.AlphaKeyToVector(value.alphaKeys[i]) : Vector2.zero, generatePropertyBlock = false }); } }
public void SetMaterialPropertyBlockValue(Material mat) { if ((propType == PropertyType.Texture2D || propType == PropertyType.Texture2DArray || propType == PropertyType.Texture3D) && textureValue != null) { mat.SetTexture(name, m_ClassData.textureValue); } else if (propType == PropertyType.Cubemap && cubemapValue != null) { mat.SetTexture(name, m_ClassData.cubemapValue); } else if (propType == PropertyType.Color) { mat.SetColor(name, m_StructData.colorValue); } else if (propType == PropertyType.Vector2 || propType == PropertyType.Vector3 || propType == PropertyType.Vector4) { mat.SetVector(name, m_StructData.vector4Value); } else if (propType == PropertyType.Vector1) { mat.SetFloat(name, m_StructData.floatValue); } else if (propType == PropertyType.Boolean) { mat.SetFloat(name, m_StructData.booleanValue ? 1 : 0); } else if (propType == PropertyType.Matrix2 || propType == PropertyType.Matrix3 || propType == PropertyType.Matrix4) { mat.SetMatrix(name, m_StructData.matrixValue); } else if (propType == PropertyType.Gradient) { mat.SetFloat(string.Format("{0}_Type", name), (int)m_ClassData.gradientValue.mode); mat.SetFloat(string.Format("{0}_ColorsLength", name), m_ClassData.gradientValue.colorKeys.Length); mat.SetFloat(string.Format("{0}_AlphasLength", name), m_ClassData.gradientValue.alphaKeys.Length); for (int i = 0; i < 8; i++) { mat.SetVector(string.Format("{0}_ColorKey{1}", name, i), i < m_ClassData.gradientValue.colorKeys.Length ? GradientUtil.ColorKeyToVector(m_ClassData.gradientValue.colorKeys[i]) : Vector4.zero); } for (int i = 0; i < 8; i++) { mat.SetVector(string.Format("{0}_AlphaKey{1}", name, i), i < m_ClassData.gradientValue.alphaKeys.Length ? GradientUtil.AlphaKeyToVector(m_ClassData.gradientValue.alphaKeys[i]) : Vector2.zero); } } }
public void SetValueOnMaterialPropertyBlock(MaterialPropertyBlock mat) { if ((propType == PropertyType.Texture2D || propType == PropertyType.Texture2DArray || propType == PropertyType.Texture3D)) { if (m_ClassData.textureValue == null) { // there's no way to set the texture back to NULL // and no way to delete the property either // so instead we set the value to what we know the default will be // (all textures in ShaderGraph default to white) mat.SetTexture(name, Texture2D.whiteTexture); } else { mat.SetTexture(name, m_ClassData.textureValue); } } else if (propType == PropertyType.Cubemap) { if (m_ClassData.cubemapValue == null) { // there's no way to set the texture back to NULL // and no way to delete the property either // so instead we set the value to what we know the default will be // (all textures in ShaderGraph default to white) // there's no Cubemap.whiteTexture, but this seems to work mat.SetTexture(name, Texture2D.whiteTexture); } else { mat.SetTexture(name, m_ClassData.cubemapValue); } } else if (propType == PropertyType.Color) { mat.SetColor(name, m_StructData.colorValue); } else if (propType == PropertyType.Vector2 || propType == PropertyType.Vector3 || propType == PropertyType.Vector4) { mat.SetVector(name, m_StructData.vector4Value); } else if (propType == PropertyType.Vector1) { mat.SetFloat(name, m_StructData.floatValue); } else if (propType == PropertyType.Boolean) { mat.SetFloat(name, m_StructData.booleanValue ? 1 : 0); } else if (propType == PropertyType.Matrix2 || propType == PropertyType.Matrix3 || propType == PropertyType.Matrix4) { mat.SetMatrix(name, m_StructData.matrixValue); } else if (propType == PropertyType.Gradient) { mat.SetFloat(string.Format("{0}_Type", name), (int)m_ClassData.gradientValue.mode); mat.SetFloat(string.Format("{0}_ColorsLength", name), m_ClassData.gradientValue.colorKeys.Length); mat.SetFloat(string.Format("{0}_AlphasLength", name), m_ClassData.gradientValue.alphaKeys.Length); for (int i = 0; i < 8; i++) { mat.SetVector(string.Format("{0}_ColorKey{1}", name, i), i < m_ClassData.gradientValue.colorKeys.Length ? GradientUtil.ColorKeyToVector(m_ClassData.gradientValue.colorKeys[i]) : Vector4.zero); } for (int i = 0; i < 8; i++) { mat.SetVector(string.Format("{0}_AlphaKey{1}", name, i), i < m_ClassData.gradientValue.alphaKeys.Length ? GradientUtil.AlphaKeyToVector(m_ClassData.gradientValue.alphaKeys[i]) : Vector2.zero); } } else if (propType == PropertyType.VirtualTexture) { // virtual texture assignments are not supported via the material property block, we must assign them to the materials } }