1.7 C#传递参数给Shader

1.MaterialPropertyBlock

2.通过Material的Set方法

3.Shader全局属性(Global Shader Properties)


1.MaterialPropertyBlock

csharp 复制代码
运行时修改材质属性, 而不会创建新的材质实例(不会增加内存开销)
csharp 复制代码
private Renderer renderer;
private MaterialPropertyBlock propertyBlock;

void Start()
{
    renderer = GetComponent<Renderer>();
    propertyBlock = new MaterialPropertyBlock();
}

void Update()
{
    // 获取当前渲染器的属性块
    renderer.GetPropertyBlock(propertyBlock);
    // 设置颜色属性
    propertyBlock.SetColor("_Color", color);
    // 设置浮点数属性
    propertyBlock.SetFloat("_FloatValue", floatValue);
    // 将属性块应用回渲染器
    renderer.SetPropertyBlock(propertyBlock);
}

2.通过Material的Set方法

csharp 复制代码
这种方法会修改材质的属性, 如果材质是共享的, 那么所有使用该材质的对象都会受到影响; 如果不想影响其他对象, 可以

先复制一份材质(使用Material.Instantiate)
csharp 复制代码
private Material material;

void Start()
{
    // 获取渲染器上的材质,这里会创建一份新的材质实例(如果材质不是实例化的,则会实例化)
    Renderer renderer = GetComponent<Renderer>();
    // 使用material会创建实例,使用sharedMaterial则不会创建实例但会修改共享材质
    material = renderer.material; 

	material.SetColor("_Color", color);
    material.SetFloat("_FloatValue", floatValue);
}

3.Shader全局属性(Global Shader Properties)

csharp 复制代码
这种方法设置的值会对所有Shader中同名的全局属性生效

void Start()
{
    Shader.SetGlobalColor("_GlobalColor", color);
    Shader.SetGlobalFloat("_GlobalFloat", floatValue);
}
相关推荐
千里马-horse12 天前
Multithreading with Vulkan
shader·rendering·vulkan·vertex·multithreaded
weixin_4093831212 天前
cocos shader消失
shader·cocos
weixin_4093831213 天前
cocos魔法阵shader
shader·cocos
weixin_4093831215 天前
cocos 按钮光环shader
shader·cocos
两水先木示15 天前
【Unity】对指定物体进行描边——模板测试法
unity·游戏引擎·shader·外描边
avi911117 天前
Unity毛玻璃渲染模糊渲染Shader数学入门
unity·aigc·图形学·shader·hlsl
怪力左手25 天前
renderdoc使用
shader·glsl·render
Huanzhi_Lin1 个月前
图形渲染管线流程笔记
笔记·图形渲染·shader·glsl
CreasyChan1 个月前
ShaderLab 基本结构详解
shader
CreasyChan1 个月前
Unity Shader 入门指南
unity·c#·游戏引擎·shader