UnityHDRP中雪地留下脚印的Shader

博客展示了一个效果视频及参考教学视频,介绍了实现特定效果的思路。该实现依赖一个C#脚本和两个shader,通过C#脚本向平面打射线获取UV位置,在隐式shader绘制脚印,再将贴图给到显示shader的高度图,最终得到效果。

效果如视频中所示:https://www.bilibili.com/video/BV15i4y1E7ZZ/

参考教学视频:https://www.bilibili.com/video/BV1Mb411i7WQ

实现思路不复杂,依赖一个C#脚本和两个shader,一个隐式shader,一个显示shader。

思路:

1.用C#脚本,在玩家的两个脚底向平面打射线,得到射线碰撞点UV的位置。

2.得到了UV坐标,在隐式shader中,在该点绘制脚印,返回到C#脚本。

3.C#脚本,将绘制的贴图,给到显示shader的高度图,即可得到效果,显示shader是HDRP自带的曲面细分。

以下是C#脚本,隐式shader用来绘制脚印贴图,显示shader是HDRP自带的LitTessellation。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DrawWithMouse : MonoBehaviour
{
    //public Camera _camera;
    public Shader _drawShader;
    private RenderTexture _splatmap;
    private Material _snowMaterial, _drawMaterial;
    private RaycastHit _hit;
    public Transform footL;
    public Transform footR;
    public float footCheckDis = 0.1f;
    void Start()
    {
        _drawMaterial = new Material(_drawShader);
        _drawMaterial.SetVector("_Color", Color.white);
        _snowMaterial = GetComponent<Renderer>().material;
        _splatmap = new RenderTexture(1024, 1024, 0, RenderTextureFormat.ARGBFloat);
        _snowMaterial.SetTexture("_HeightMap", _splatmap);
        _snowMaterial.SetTexture("_BaseColorMap", _splatmap);
        SetWhite();
        //_snowMaterial.SetColor("_EmissionColor",Color.red);
    }
    void Update()
    {
        FootDrawSnowTrack();
    }
    void 
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值