首页 >Unity3D频道 >【Unity3D研究院之游戏开发】 > URP的OverridMaterial给每个物体单独设置参数
2022
04-17

URP的OverridMaterial给每个物体单独设置参数

Overrid Material就是在原本材质的基础上在覆盖一个新的,如果覆盖了这个材质就会绘制2次。如下图所示一般会添加一个层,在Filtering中不包含Actor层,这样渲染时就会过滤它。

URP的OverridMaterial给每个物体单独设置参数 - 雨松MOMO程序研究院 - 1

如下图所示,添加一个新的渲染器,设置LayerMask为Actor层,下面在设置一个可覆盖的material材质,这样Actor层中所有的材质都会使用Overrid的这个材质进行渲染。URP的OverridMaterial给每个物体单独设置参数 - 雨松MOMO程序研究院 - 2

此时已经出了个大问题,立方体原本设置的材质贴图、颜色、等其他参数都变成统一的了,所以需要添加脚本动态将原本的参数赋值给新的OverridMaterial才行。

URP的OverridMaterial给每个物体单独设置参数 - 雨松MOMO程序研究院 - 3
如下代码所示,通过MaterialPropertyBlock的方式将参数传递给新材质中,只要确保传递的这些参数在新材质Shader中的CBUFFER中极即可。

public class NewBehaviourScript : MonoBehaviour
{
    public Color color = Color.white;
    public Texture2D texture;
    void Awake()
    {
        Renderer renderer = GetComponent<Renderer>();
        MaterialPropertyBlock block = new MaterialPropertyBlock();

        renderer.GetPropertyBlock(block);
        block.SetTexture("_BaseMap", texture);
        block.SetColor("_BaseColor", color);
        renderer.SetPropertyBlock(block);
    }
}
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
CBUFFER_START(UnityPerMaterial)
    float4 _BaseMap_ST;
    float4 _BaseColor;
CBUFFER_END

如下图所示,多个Actor层下的物体以不同的参数进行绘制OverridMaterial。

URP的OverridMaterial给每个物体单独设置参数 - 雨松MOMO程序研究院 - 4

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

留下一个回复

你的email不会被公开。 必填项已用 * 标注。