学习Unity Shader,简易阴影

本文介绍了如何在Unity中利用Shader实现简易阴影效果,通过在第二个pass中进行位置偏移,模拟阴影。从无到有,逐步展示了阴影的生成过程,并最终添加半透明效果,达到预期的视觉感受。虽然只是一个Demo,可能存在错位和深度问题,但作为学习Shader的一个实例,有助于理解并应用在实际项目中。
摘要由CSDN通过智能技术生成

Unity自带的阴影,效果还不错。但是手机端有限的性能有限,大多数游戏都不使用光照实时渲染。很多光照的效果都可以使用shader来代替。今天分享一个阴影的效果。
效果:
在这里插入图片描述

最终成果
思路:用一个pass,根据位置偏移来渲染“影子”

第一个pass就是普通的渲染,就不赘述了。第二个渲染先使用进行简单偏移,得到这样的效果。

    float3 worldPos = mul(unity_ObjectToWorld , v.pos).xyz;
    worldPos.x = worldPos.x - 1;
    o.pos = UnityWorldToClipPos(worldPos);

在这里插入图片描述
如果这时候我们把阴的高度直接设为0就可以得到这样的效果:
在这里插入图片描述
感觉好像小时候看过的某部动画,里面的人物可以从地面的洞洞钻出来洞洞那个感觉。
但是这个不是我们想要的效果,于是我们来加点处理,让他根据高度进行横向的偏移。

 worldPos.x = worldPos.x - 1 * max(0, worldPos.y);
 worldPos.y = 0;

就会得到这样的效果
在这里插入图片描述
在这里插入图片描述是不是有点内味道了?
再加个半透明的效果

    float factor = 0.5;
    o._color = _Shadow_Color;
    o._color.a *= factor;

在这里插入图片描述
就差不多了,做一些调整

最后再稍微整理一下,开放一些参数,以下是完整代码

// write by Uu_Orangry 
// github:  https://github.com/Orangry
// simple Shadow
Shader "Uu/UuShadow"
{
   
    Properties
    {
   
        _Color("Color", Color) = (1,1,1,1)
        _MainTex ("Texture", 2D) = "white" {
   }
        Shadow_Color
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值