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);
}
相关推荐
mxwin1 天前
Unity Shader 极坐标特效 从数学原理到实战案例
unity·游戏引擎·shader·uv
mxwin2 天前
Unity Shader UI 流光效果完全推导指南
ui·unity·游戏引擎·shader·uv
mxwin3 天前
Unity Shader FLOWMAP岩浆流动制作案例
unity·游戏引擎·shader·uv
mxwin3 天前
Unity Shader 用 Ramp 贴图实现薄膜干涉效果
unity·游戏引擎·贴图·shader·uv
mxwin3 天前
Unity Shader · UV 技术 用 UV 坐标打造水波涟漪效果
unity·游戏引擎·shader·uv
千里马-horse1 个月前
Building a Simple Engine -- Mobile Development -- Conclusion
pipeline·shader·rendering·vulkan
千里马-horse1 个月前
Building a Simple Engine -- Mobile Development -- Performance optimizations
shader·内存优化·rendering·纹理优化·vulkan·压缩格式
weixin_409383121 个月前
cocosshader像素风沙消散
shader·cocos
千里马-horse1 个月前
Building a Simple Engine -- Tooling -- Introduction
pipeline·shader·rendering·vulkan
千里马-horse2 个月前
Multithreading with Vulkan
shader·rendering·vulkan·vertex·multithreaded