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);
}
相关推荐
千里马-horse9 天前
Building a Simple Engine -- Mobile Development -- Conclusion
pipeline·shader·rendering·vulkan
千里马-horse10 天前
Building a Simple Engine -- Mobile Development -- Performance optimizations
shader·内存优化·rendering·纹理优化·vulkan·压缩格式
weixin_4093831210 天前
cocosshader像素风沙消散
shader·cocos
千里马-horse13 天前
Building a Simple Engine -- Tooling -- Introduction
pipeline·shader·rendering·vulkan
千里马-horse1 个月前
Multithreading with Vulkan
shader·rendering·vulkan·vertex·multithreaded
weixin_409383121 个月前
cocos shader消失
shader·cocos
weixin_409383121 个月前
cocos魔法阵shader
shader·cocos
weixin_409383121 个月前
cocos 按钮光环shader
shader·cocos
两水先木示1 个月前
【Unity】对指定物体进行描边——模板测试法
unity·游戏引擎·shader·外描边
avi91111 个月前
Unity毛玻璃渲染模糊渲染Shader数学入门
unity·aigc·图形学·shader·hlsl