This commit is contained in:
2021-06-13 10:28:03 +02:00
parent eb70603c85
commit df2d24cbd3
7487 changed files with 943244 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
using System;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Scripting.APIUpdating;
namespace UnityEditor.Rendering.Universal.ShaderGUI
{
[MovedFrom("UnityEditor.Rendering.LWRP.ShaderGUI")] public static class BakedLitGUI
{
public struct BakedLitProperties
{
// Surface Input Props
public MaterialProperty bumpMapProp;
public BakedLitProperties(MaterialProperty[] properties)
{
// Surface Input Props
bumpMapProp = BaseShaderGUI.FindProperty("_BumpMap", properties, false);
}
}
public static void Inputs(BakedLitProperties properties, MaterialEditor materialEditor)
{
BaseShaderGUI.DrawNormalArea(materialEditor, properties.bumpMapProp);
}
}
}

View File

@@ -0,0 +1,68 @@
using UnityEngine;
using UnityEngine.Rendering;
namespace UnityEditor.Rendering.Universal.ShaderGUI
{
internal class LitDetailGUI
{
public static class Styles
{
public static readonly GUIContent detailInputs = new GUIContent("Detail Inputs",
"These settings let you add details to the surface.");
public static readonly GUIContent detailMaskText = new GUIContent("Mask",
"Select a mask for the Detail maps. The mask uses the alpha channel of the selected texture. The __Tiling__ and __Offset__ settings have no effect on the mask.");
public static readonly GUIContent detailAlbedoMapText = new GUIContent("Base Map",
"Select the texture containing the surface details.");
public static readonly GUIContent detailNormalMapText = new GUIContent("Normal Map",
"Select the texture containing the normal vector data.");
public static readonly GUIContent detailAlbedoMapScaleInfo = new GUIContent("Setting the scaling factor to a value other than 1 results in a less performant shader variant.");
}
public struct LitProperties
{
public MaterialProperty detailMask;
public MaterialProperty detailAlbedoMapScale;
public MaterialProperty detailAlbedoMap;
public MaterialProperty detailNormalMapScale;
public MaterialProperty detailNormalMap;
public LitProperties(MaterialProperty[] properties)
{
detailMask = BaseShaderGUI.FindProperty("_DetailMask", properties, false);
detailAlbedoMapScale = BaseShaderGUI.FindProperty("_DetailAlbedoMapScale", properties, false);
detailAlbedoMap = BaseShaderGUI.FindProperty("_DetailAlbedoMap", properties, false);
detailNormalMapScale = BaseShaderGUI.FindProperty("_DetailNormalMapScale", properties, false);
detailNormalMap = BaseShaderGUI.FindProperty("_DetailNormalMap", properties, false);
}
}
public static void DoDetailArea(LitProperties properties, MaterialEditor materialEditor)
{
materialEditor.TexturePropertySingleLine(Styles.detailMaskText, properties.detailMask);
materialEditor.TexturePropertySingleLine(Styles.detailAlbedoMapText, properties.detailAlbedoMap,
properties.detailAlbedoMap.textureValue != null ? properties.detailAlbedoMapScale : null);
if (properties.detailAlbedoMapScale.floatValue != 1.0f)
{
EditorGUILayout.HelpBox(Styles.detailAlbedoMapScaleInfo.text, MessageType.Info, true);
}
materialEditor.TexturePropertySingleLine(Styles.detailNormalMapText, properties.detailNormalMap,
properties.detailNormalMap.textureValue != null ? properties.detailNormalMapScale : null);
materialEditor.TextureScaleOffsetProperty(properties.detailAlbedoMap);
}
public static void SetMaterialKeywords(Material material)
{
if (material.HasProperty("_DetailAlbedoMap") && material.HasProperty("_DetailNormalMap") && material.HasProperty("_DetailAlbedoMapScale"))
{
bool isScaled = material.GetFloat("_DetailAlbedoMapScale") != 1.0f;
bool hasDetailMap = material.GetTexture("_DetailAlbedoMap") || material.GetTexture("_DetailNormalMap");
CoreUtils.SetKeyword(material, "_DETAIL_MULX2", !isScaled && hasDetailMap);
CoreUtils.SetKeyword(material, "_DETAIL_SCALED", isScaled && hasDetailMap);
}
}
}
}

View File

@@ -0,0 +1,331 @@
using System;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Scripting.APIUpdating;
namespace UnityEditor.Rendering.Universal.ShaderGUI
{
[MovedFrom("UnityEditor.Rendering.LWRP.ShaderGUI")] public static class LitGUI
{
public enum WorkflowMode
{
Specular = 0,
Metallic
}
public enum SmoothnessMapChannel
{
SpecularMetallicAlpha,
AlbedoAlpha,
}
public static class Styles
{
public static GUIContent workflowModeText = new GUIContent("Workflow Mode",
"Select a workflow that fits your textures. Choose between Metallic or Specular.");
public static GUIContent specularMapText =
new GUIContent("Specular Map", "Sets and configures the map and color for the Specular workflow.");
public static GUIContent metallicMapText =
new GUIContent("Metallic Map", "Sets and configures the map for the Metallic workflow.");
public static GUIContent smoothnessText = new GUIContent("Smoothness",
"Controls the spread of highlights and reflections on the surface.");
public static GUIContent smoothnessMapChannelText =
new GUIContent("Source",
"Specifies where to sample a smoothness map from. By default, uses the alpha channel for your map.");
public static GUIContent highlightsText = new GUIContent("Specular Highlights",
"When enabled, the Material reflects the shine from direct lighting.");
public static GUIContent reflectionsText =
new GUIContent("Environment Reflections",
"When enabled, the Material samples reflections from the nearest Reflection Probes or Lighting Probe.");
public static GUIContent heightMapText = new GUIContent("Height Map",
"Specifies the Height Map (G) for this Material.");
public static GUIContent occlusionText = new GUIContent("Occlusion Map",
"Sets an occlusion map to simulate shadowing from ambient lighting.");
public static readonly string[] metallicSmoothnessChannelNames = {"Metallic Alpha", "Albedo Alpha"};
public static readonly string[] specularSmoothnessChannelNames = {"Specular Alpha", "Albedo Alpha"};
public static GUIContent clearCoatText = new GUIContent("Clear Coat",
"A multi-layer material feature which simulates a thin layer of coating on top of the surface material." +
"\nPerformance cost is considerable as the specular component is evaluated twice, once per layer.");
public static GUIContent clearCoatMaskText = new GUIContent("Mask",
"Specifies the amount of the coat blending." +
"\nActs as a multiplier of the clear coat map mask value or as a direct mask value if no map is specified." +
"\nThe map specifies clear coat mask in the red channel and clear coat smoothness in the green channel.");
public static GUIContent clearCoatSmoothnessText = new GUIContent("Smoothness",
"Specifies the smoothness of the coating." +
"\nActs as a multiplier of the clear coat map smoothness value or as a direct smoothness value if no map is specified.");
}
public struct LitProperties
{
// Surface Option Props
public MaterialProperty workflowMode;
// Surface Input Props
public MaterialProperty metallic;
public MaterialProperty specColor;
public MaterialProperty metallicGlossMap;
public MaterialProperty specGlossMap;
public MaterialProperty smoothness;
public MaterialProperty smoothnessMapChannel;
public MaterialProperty bumpMapProp;
public MaterialProperty bumpScaleProp;
public MaterialProperty parallaxMapProp;
public MaterialProperty parallaxScaleProp;
public MaterialProperty occlusionStrength;
public MaterialProperty occlusionMap;
// Advanced Props
public MaterialProperty highlights;
public MaterialProperty reflections;
public MaterialProperty clearCoat; // Enable/Disable dummy property
public MaterialProperty clearCoatMap;
public MaterialProperty clearCoatMask;
public MaterialProperty clearCoatSmoothness;
public LitProperties(MaterialProperty[] properties)
{
// Surface Option Props
workflowMode = BaseShaderGUI.FindProperty("_WorkflowMode", properties, false);
// Surface Input Props
metallic = BaseShaderGUI.FindProperty("_Metallic", properties);
specColor = BaseShaderGUI.FindProperty("_SpecColor", properties, false);
metallicGlossMap = BaseShaderGUI.FindProperty("_MetallicGlossMap", properties);
specGlossMap = BaseShaderGUI.FindProperty("_SpecGlossMap", properties, false);
smoothness = BaseShaderGUI.FindProperty("_Smoothness", properties, false);
smoothnessMapChannel = BaseShaderGUI.FindProperty("_SmoothnessTextureChannel", properties, false);
bumpMapProp = BaseShaderGUI.FindProperty("_BumpMap", properties, false);
bumpScaleProp = BaseShaderGUI.FindProperty("_BumpScale", properties, false);
parallaxMapProp = BaseShaderGUI.FindProperty("_ParallaxMap", properties, false);
parallaxScaleProp = BaseShaderGUI.FindProperty("_Parallax", properties, false);
occlusionStrength = BaseShaderGUI.FindProperty("_OcclusionStrength", properties, false);
occlusionMap = BaseShaderGUI.FindProperty("_OcclusionMap", properties, false);
// Advanced Props
highlights = BaseShaderGUI.FindProperty("_SpecularHighlights", properties, false);
reflections = BaseShaderGUI.FindProperty("_EnvironmentReflections", properties, false);
clearCoat = BaseShaderGUI.FindProperty("_ClearCoat", properties, false);
clearCoatMap = BaseShaderGUI.FindProperty("_ClearCoatMap", properties, false);
clearCoatMask = BaseShaderGUI.FindProperty("_ClearCoatMask", properties, false);
clearCoatSmoothness = BaseShaderGUI.FindProperty("_ClearCoatSmoothness", properties, false);
}
}
public static void Inputs(LitProperties properties, MaterialEditor materialEditor, Material material)
{
DoMetallicSpecularArea(properties, materialEditor, material);
BaseShaderGUI.DrawNormalArea(materialEditor, properties.bumpMapProp, properties.bumpScaleProp);
if (HeightmapAvailable(material))
DoHeightmapArea(properties, materialEditor);
if (properties.occlusionMap != null)
{
materialEditor.TexturePropertySingleLine(Styles.occlusionText, properties.occlusionMap,
properties.occlusionMap.textureValue != null ? properties.occlusionStrength : null);
}
// Check that we have all the required properties for clear coat,
// otherwise we will get null ref exception from MaterialEditor GUI helpers.
if (ClearCoatAvailable(material))
DoClearCoat(properties, materialEditor, material);
}
private static bool ClearCoatAvailable(Material material)
{
return material.HasProperty("_ClearCoat")
&& material.HasProperty("_ClearCoatMap")
&& material.HasProperty("_ClearCoatMask")
&& material.HasProperty("_ClearCoatSmoothness");
}
private static bool HeightmapAvailable(Material material)
{
return material.HasProperty("_Parallax")
&& material.HasProperty("_ParallaxMap");
}
private static void DoHeightmapArea(LitProperties properties, MaterialEditor materialEditor)
{
materialEditor.TexturePropertySingleLine(Styles.heightMapText, properties.parallaxMapProp,
properties.parallaxMapProp.textureValue != null ? properties.parallaxScaleProp : null);
}
private static bool ClearCoatEnabled(Material material)
{
return material.HasProperty("_ClearCoat") && material.GetFloat("_ClearCoat") > 0.0;
}
public static void DoClearCoat(LitProperties properties, MaterialEditor materialEditor, Material material)
{
var coatEnabled = ClearCoatEnabled(material);
EditorGUI.BeginChangeCheck();
EditorGUI.Toggle(EditorGUILayout.GetControlRect(), Styles.clearCoatText, coatEnabled);
if (EditorGUI.EndChangeCheck())
{
if (coatEnabled)
material.SetFloat("_ClearCoat", 0); // Toggle off
else
material.SetFloat("_ClearCoat", 1);
coatEnabled = !coatEnabled;
}
EditorGUI.BeginDisabledGroup(!coatEnabled);
{
materialEditor.TexturePropertySingleLine(Styles.clearCoatMaskText, properties.clearCoatMap, properties.clearCoatMask);
EditorGUI.indentLevel += 2;
// Texture and HDR color controls
materialEditor.ShaderProperty(properties.clearCoatSmoothness , Styles.clearCoatSmoothnessText);
EditorGUI.indentLevel -= 2;
}
EditorGUI.EndDisabledGroup();
}
public static void DoMetallicSpecularArea(LitProperties properties, MaterialEditor materialEditor, Material material)
{
string[] smoothnessChannelNames;
bool hasGlossMap = false;
if (properties.workflowMode == null ||
(WorkflowMode)properties.workflowMode.floatValue == WorkflowMode.Metallic)
{
hasGlossMap = properties.metallicGlossMap.textureValue != null;
smoothnessChannelNames = Styles.metallicSmoothnessChannelNames;
materialEditor.TexturePropertySingleLine(Styles.metallicMapText, properties.metallicGlossMap,
hasGlossMap ? null : properties.metallic);
}
else
{
hasGlossMap = properties.specGlossMap.textureValue != null;
smoothnessChannelNames = Styles.specularSmoothnessChannelNames;
BaseShaderGUI.TextureColorProps(materialEditor, Styles.specularMapText, properties.specGlossMap,
hasGlossMap ? null : properties.specColor);
}
EditorGUI.indentLevel++;
DoSmoothness(properties, material, smoothnessChannelNames);
EditorGUI.indentLevel--;
}
public static void DoSmoothness(LitProperties properties, Material material, string[] smoothnessChannelNames)
{
var opaque = ((BaseShaderGUI.SurfaceType)material.GetFloat("_Surface") ==
BaseShaderGUI.SurfaceType.Opaque);
EditorGUI.indentLevel++;
EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = properties.smoothness.hasMixedValue;
var smoothness = EditorGUILayout.Slider(Styles.smoothnessText, properties.smoothness.floatValue, 0f, 1f);
if (EditorGUI.EndChangeCheck())
properties.smoothness.floatValue = smoothness;
EditorGUI.showMixedValue = false;
if (properties.smoothnessMapChannel != null) // smoothness channel
{
EditorGUI.indentLevel++;
EditorGUI.BeginDisabledGroup(!opaque);
EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = properties.smoothnessMapChannel.hasMixedValue;
var smoothnessSource = (int)properties.smoothnessMapChannel.floatValue;
if (opaque)
smoothnessSource = EditorGUILayout.Popup(Styles.smoothnessMapChannelText, smoothnessSource,
smoothnessChannelNames);
else
EditorGUILayout.Popup(Styles.smoothnessMapChannelText, 0, smoothnessChannelNames);
if (EditorGUI.EndChangeCheck())
properties.smoothnessMapChannel.floatValue = smoothnessSource;
EditorGUI.showMixedValue = false;
EditorGUI.EndDisabledGroup();
EditorGUI.indentLevel--;
}
EditorGUI.indentLevel--;
}
public static SmoothnessMapChannel GetSmoothnessMapChannel(Material material)
{
int ch = (int)material.GetFloat("_SmoothnessTextureChannel");
if (ch == (int)SmoothnessMapChannel.AlbedoAlpha)
return SmoothnessMapChannel.AlbedoAlpha;
return SmoothnessMapChannel.SpecularMetallicAlpha;
}
public static void SetMaterialKeywords(Material material)
{
// Note: keywords must be based on Material value not on MaterialProperty due to multi-edit & material animation
// (MaterialProperty value might come from renderer material property block)
var hasGlossMap = false;
var isSpecularWorkFlow = false;
var opaque = ((BaseShaderGUI.SurfaceType)material.GetFloat("_Surface") ==
BaseShaderGUI.SurfaceType.Opaque);
if (material.HasProperty("_WorkflowMode"))
{
isSpecularWorkFlow = (WorkflowMode)material.GetFloat("_WorkflowMode") == WorkflowMode.Specular;
if (isSpecularWorkFlow)
hasGlossMap = material.GetTexture("_SpecGlossMap") != null;
else
hasGlossMap = material.GetTexture("_MetallicGlossMap") != null;
}
else
{
hasGlossMap = material.GetTexture("_MetallicGlossMap") != null;
}
CoreUtils.SetKeyword(material, "_SPECULAR_SETUP", isSpecularWorkFlow);
CoreUtils.SetKeyword(material, "_METALLICSPECGLOSSMAP", hasGlossMap);
if (material.HasProperty("_SpecularHighlights"))
CoreUtils.SetKeyword(material, "_SPECULARHIGHLIGHTS_OFF",
material.GetFloat("_SpecularHighlights") == 0.0f);
if (material.HasProperty("_EnvironmentReflections"))
CoreUtils.SetKeyword(material, "_ENVIRONMENTREFLECTIONS_OFF",
material.GetFloat("_EnvironmentReflections") == 0.0f);
if (material.HasProperty("_OcclusionMap"))
CoreUtils.SetKeyword(material, "_OCCLUSIONMAP", material.GetTexture("_OcclusionMap"));
if (material.HasProperty("_ParallaxMap"))
CoreUtils.SetKeyword(material, "_PARALLAXMAP", material.GetTexture("_ParallaxMap"));
if (material.HasProperty("_SmoothnessTextureChannel"))
{
CoreUtils.SetKeyword(material, "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A",
GetSmoothnessMapChannel(material) == SmoothnessMapChannel.AlbedoAlpha && opaque);
}
// Clear coat keywords are independent to remove possiblity of invalid combinations.
if (ClearCoatEnabled(material))
{
var hasMap = material.HasProperty("_ClearCoatMap") && material.GetTexture("_ClearCoatMap") != null;
if (hasMap)
{
CoreUtils.SetKeyword(material, "_CLEARCOAT", false);
CoreUtils.SetKeyword(material, "_CLEARCOATMAP", true);
}
else
{
CoreUtils.SetKeyword(material, "_CLEARCOAT", true);
CoreUtils.SetKeyword(material, "_CLEARCOATMAP", false);
}
}
else
{
CoreUtils.SetKeyword(material, "_CLEARCOAT", false);
CoreUtils.SetKeyword(material, "_CLEARCOATMAP", false);
}
}
}
}

View File

@@ -0,0 +1,157 @@
using System;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Scripting.APIUpdating;
namespace UnityEditor.Rendering.Universal.ShaderGUI
{
[MovedFrom("UnityEditor.Rendering.LWRP.ShaderGUI")] public static class SimpleLitGUI
{
public enum SpecularSource
{
SpecularTextureAndColor,
NoSpecular
}
public enum SmoothnessMapChannel
{
SpecularAlpha,
AlbedoAlpha,
}
public static class Styles
{
public static GUIContent specularMapText =
new GUIContent("Specular Map", "Sets and configures a Specular map and color for your Material.");
public static GUIContent smoothnessText = new GUIContent("Smoothness",
"Controls the spread of highlights and reflections on the surface.");
public static GUIContent smoothnessMapChannelText =
new GUIContent("Source",
"Specifies where to sample a smoothness map from. By default, uses the alpha channel for your map.");
public static GUIContent highlightsText = new GUIContent("Specular Highlights",
"When enabled, the Material reflects the shine from direct lighting.");
}
public struct SimpleLitProperties
{
// Surface Input Props
public MaterialProperty specColor;
public MaterialProperty specGlossMap;
public MaterialProperty specHighlights;
public MaterialProperty smoothnessMapChannel;
public MaterialProperty smoothness;
public MaterialProperty bumpMapProp;
public SimpleLitProperties(MaterialProperty[] properties)
{
// Surface Input Props
specColor = BaseShaderGUI.FindProperty("_SpecColor", properties);
specGlossMap = BaseShaderGUI.FindProperty("_SpecGlossMap", properties, false);
specHighlights = BaseShaderGUI.FindProperty("_SpecularHighlights", properties, false);
smoothnessMapChannel = BaseShaderGUI.FindProperty("_SmoothnessSource", properties, false);
smoothness = BaseShaderGUI.FindProperty("_Smoothness", properties, false);
bumpMapProp = BaseShaderGUI.FindProperty("_BumpMap", properties, false);
}
}
public static void Inputs(SimpleLitProperties properties, MaterialEditor materialEditor, Material material)
{
DoSpecularArea(properties, materialEditor, material);
BaseShaderGUI.DrawNormalArea(materialEditor, properties.bumpMapProp);
}
public static void Advanced(SimpleLitProperties properties)
{
SpecularSource specularSource = (SpecularSource)properties.specHighlights.floatValue;
EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = properties.specHighlights.hasMixedValue;
bool enabled = EditorGUILayout.Toggle(Styles.highlightsText, specularSource == SpecularSource.SpecularTextureAndColor);
if (EditorGUI.EndChangeCheck())
properties.specHighlights.floatValue = enabled ? (float)SpecularSource.SpecularTextureAndColor : (float)SpecularSource.NoSpecular;
EditorGUI.showMixedValue = false;
}
public static void DoSpecularArea(SimpleLitProperties properties, MaterialEditor materialEditor, Material material)
{
SpecularSource specSource = (SpecularSource)properties.specHighlights.floatValue;
EditorGUI.BeginDisabledGroup(specSource == SpecularSource.NoSpecular);
BaseShaderGUI.TextureColorProps(materialEditor, Styles.specularMapText, properties.specGlossMap, properties.specColor, true);
DoSmoothness(properties, material);
EditorGUI.EndDisabledGroup();
}
public static void DoSmoothness(SimpleLitProperties properties, Material material)
{
var opaque = ((BaseShaderGUI.SurfaceType)material.GetFloat("_Surface") ==
BaseShaderGUI.SurfaceType.Opaque);
EditorGUI.indentLevel += 2;
EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = properties.smoothness.hasMixedValue;
var smoothnessSource = (int)properties.smoothnessMapChannel.floatValue;
var smoothness = properties.smoothness.floatValue;
smoothness = EditorGUILayout.Slider(Styles.smoothnessText, smoothness, 0f, 1f);
if (EditorGUI.EndChangeCheck())
{
properties.smoothness.floatValue = smoothness;
}
EditorGUI.showMixedValue = false;
EditorGUI.indentLevel++;
EditorGUI.BeginDisabledGroup(!opaque);
EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = properties.smoothnessMapChannel.hasMixedValue;
if (opaque)
smoothnessSource = EditorGUILayout.Popup(Styles.smoothnessMapChannelText, smoothnessSource, Enum.GetNames(typeof(SmoothnessMapChannel)));
else
EditorGUILayout.Popup(Styles.smoothnessMapChannelText, 0, Enum.GetNames(typeof(SmoothnessMapChannel)));
if (EditorGUI.EndChangeCheck())
properties.smoothnessMapChannel.floatValue = smoothnessSource;
EditorGUI.showMixedValue = false;
EditorGUI.indentLevel -= 3;
EditorGUI.EndDisabledGroup();
}
public static void SetMaterialKeywords(Material material)
{
UpdateMaterialSpecularSource(material);
}
private static void UpdateMaterialSpecularSource(Material material)
{
var opaque = ((BaseShaderGUI.SurfaceType)material.GetFloat("_Surface") ==
BaseShaderGUI.SurfaceType.Opaque);
SpecularSource specSource = (SpecularSource)material.GetFloat("_SpecularHighlights");
if (specSource == SpecularSource.NoSpecular)
{
CoreUtils.SetKeyword(material, "_SPECGLOSSMAP", false);
CoreUtils.SetKeyword(material, "_SPECULAR_COLOR", false);
CoreUtils.SetKeyword(material, "_GLOSSINESS_FROM_BASE_ALPHA", false);
}
else
{
var smoothnessSource = (SmoothnessMapChannel)material.GetFloat("_SmoothnessSource");
bool hasMap = material.GetTexture("_SpecGlossMap");
CoreUtils.SetKeyword(material, "_SPECGLOSSMAP", hasMap);
CoreUtils.SetKeyword(material, "_SPECULAR_COLOR", !hasMap);
if (opaque)
CoreUtils.SetKeyword(material, "_GLOSSINESS_FROM_BASE_ALPHA", smoothnessSource == SmoothnessMapChannel.AlbedoAlpha);
else
CoreUtils.SetKeyword(material, "_GLOSSINESS_FROM_BASE_ALPHA", false);
string color;
if (smoothnessSource != SmoothnessMapChannel.AlbedoAlpha || !opaque)
color = "_SpecColor";
else
color = "_BaseColor";
var col = material.GetColor(color);
col.a = material.GetFloat("_Smoothness");
material.SetColor(color, col);
}
}
}
}