1

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

 1 year ago
source link: https://www.xuanyusong.com/archives/4965
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK