Unity 屏幕特效 冬天积雪

本文介绍了一个在Unity中创建冬季积雪屏幕特效的方法。通过获取屏幕像素的深度纹理并处理法线,结合积雪贴图与原始贴图混合,实现逼真的积雪效果。详细代码实现包括了cs脚本和shader的使用。
摘要由CSDN通过智能技术生成

这里写图片描述
这里写图片描述

Begin

这个冬天积雪的屏幕特效,从效果上看还是不错的。

实现的原理还是挺简单的。首先获取到屏幕像素的深度纹理信息,得到每个像素的法线。利用法线的Y值得到积雪的程度。然后把积雪贴图和原本的贴图进行混合。

获取屏幕像素的深度纹理

屏幕特效的实现都需要有一个cs脚本和shader 文件。

在cs脚本上,设定好摄像机获取深度纹理

void OnEnable() {
        GetComponent<Camera>().depthTextureMode |= DepthTextureMode.DepthNormals;
    }

然后需要在shander 文件中定义变量 ,和把屏幕坐标的法线转换为世界坐标的法线。

sampler2D _CameraDepthNormalsTexture;

fixed4 frag (v2f i) : SV_Target
{

    half3 normal;
    float depth;

    float2 uv =float2(i.uv.x, i.uv.y);

    DecodeDepthNormal(tex2D(_CameraDepthNormalsTexture, uv), depth, normal);
    normal = mul( (float3x3)_CamToWorld, normal);
}

完整代码实现

1 屏幕特效基类,来自 Unity shader 入门精要 这本书的。主要是检测硬件是否支持屏幕特效。

using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
[RequireComponent (typeof(Camera))]
public class PostEffectsBase : MonoBehaviour {

    // Called when start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值