Unity里vertexShader里压扁模型来实现比较low的阴影

只有阴影pass,请自行合并,需要指定高度,忽略深度检测,需要控制好排序,或者去掉忽略,视情况而定,最后我觉得还是shadowmap好

Shader "Custom/MeshShadow"
{
    Properties
    {
        _ShadowOffset("ShadowOffset",vector) = (0,0,0,0)
        _ShadowHeight("ShadowHeight",float) = 0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque"  "Queue"="Transparent"}
        Pass
        {
            Name "MeshShadow"
            Tags {"LightMode" = "Always"}

            Blend One OneMinusSrcAlpha
            ZWrite Off
            ZTest Always

            Stencil
            {
                Ref 2
                Comp NotEqual
                Pass Replace
            }

            CGPROGRAM
            #include "UnityCG.cginc"
            #pragma vertex vert
            #pragma fragment frag 

            float4 _ShadowOffset;
            float _ShadowHeight;

            struct v2f
            {
                float4 pos : POSITION;
                float4 texcoord : TEXCOORD0;
            };

            v2f vert ( appdata_base v )
            {
                v2f o;
                float4x4 _RotMatrix = _Object2World;
                _RotMatrix[0][3] = 0;
                _RotMatrix[1][3] = 0;
                _RotMatrix[2][3] = 0;
                float3 tempPos = float3(_Object2World[0][3],_Object2World[1][3],_Object2World[2][3]);

                float4 vertexPos = mul(_RotMatrix,v.vertex);
                vertexPos.x += _ShadowOffset.x * vertexPos.y + _ShadowOffset.x;
                vertexPos.z += _ShadowOffset.y * vertexPos.y + _ShadowOffset.y;
                vertexPos.xyz += tempPos;
                vertexPos.y = _ShadowHeight;

                o.pos = mul(UNITY_MATRIX_VP, vertexPos);
                o.texcoord = v.texcoord;
                return o;
            }

            fixed4 frag(v2f i) :COLOR
            {
                return fixed4(0,0,0,0.3);
            }
            ENDCG
        }
    } 

}

时间: 2024-10-13 15:10:41

Unity里vertexShader里压扁模型来实现比较low的阴影的相关文章

大图片显示在客户端,被压扁失真的问题

需求:一个300*500的图片(长*宽),放在200*200,的控件上. 问题:如果不经过设置,直接放在控件上,图片会被压扁失真.而加上了 [cell.imageView setContentMode:UIViewContentModeScaleAspectFill];,tableView的第一个cell上得图片还是被压缩.第二个图片就正常显示了. 解决办法:其实很简单,[cell.imageView setContentMode:UIViewContentModeScaleAspectFill

用Unity模仿CSGO里的火焰效果

CSGO里的火焰效果和真实的情况比较像,能沿着遮挡物前进,如下是模仿效果. 思路比较简单,开始想的是一圈一圈发出去,但是前圈与后圈的联系不好做,换种思路,每个方向发射一条线,这样根据上一个位置的方位先向前进,如果前面有遮挡,则计算好新的位置与方向,反之前面没有遮挡,选择合适的位置,并从这个方向的上面向下检测,检测这个方向的垂直位置有没遮挡,如果有遮挡,计算新的方向与位置,没有,则表明延展不下去.如下图所示. 相关主要代码: //根据一条线的上一个节点,确定这个节点如何定位 bool forwar

Unity插件 - MeshEditor(十) 模型风力拉扯特效

先上一张效果图: (依旧是翰老弟) (导演:我们需要一个刮风的效果,道具组,上大风扇) (导演:咔!!!行了,道具组你们明天不用来上班了) (大风扇:怪我咯) OK,效果虽然渣了点,但我们还是进入今天的正题吧,我记得在PS或者是某些图片编辑工具里都有类似给目标添加一个大风的效果,虽然这样做最终图片也会被风刮得模糊不清了,但有时候就是需要这样的效果,不是吗?虽然我就是那样的逗比,所以我再次秉承了暴力解决一切的终极技巧,将大风扇搬了过来. 一.原理: 我的做法是首先确定风向,然后根据风向与每个顶点的

aspx里构造函数里无法使用session,需要重写一个方法放在load里面就能正常使用session了

1.构造一个函数,继承System.Web.UI.Page /// <summary> /// Brand的构造函数 /// </summary> public class CBrandBaseBage : System.Web.UI.Page { protected string BrandId; public CBrandBaseBage() { //ShowPage(); showpage给子类用,如果子类用session[""]=""

Unity游戏资源解压

Unity2017:ICSharpCode.SharpZipLib.Zip: using UnityEngine; using System.Collections; using System.IO; using ICSharpCode.SharpZipLib.Zip; public class ZipTest : MonoBehaviour { private WWW www; private bool isUnzipped = false; // Use this for initializ

unity编辑器拓展七——脚本创建模型

描述: 其实这个教程到处都是,我真正想做的是把模型分成N个等分,实现动态加载.但是在网上搜索了很久,也没有搜索 到合适的方法,要么就是不写清楚,舍不得把代码全部放出来.要么就是自带地形的切割,最想要的是,t4m 刷完后直 接将模型分成N分,所以只能苦逼的从最mesh最基础的开始学吧. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using Sys

html 里 checkbox里 只要选中就会自动添加checked=“checked”么?

事实上HTML代码是不会发生变化的,但是控件对象的属性会发生变化以反映这个操作的结果.也就是说,该对象的checked属性值会由false变成true.但元素标签中并不会插入checked="checked"这样的字符串. <section id="main"> <input id="toggleAll" type="checkbox" > <lable for="toggleAll&q

Entity Framework 6 Recipes 2nd Edition(11-4)译 -&gt; 在”模型定义”函数里调用另一个”模型定义”函数

11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11-4所示: Figure 11-4. A model representing the associate types in a company together with the reporting association 在我们的虚拟的公司里, , team members被一个team lea

Unity里脚本的执行顺序

Unity里的每个脚本里,都有Unity自带的一些事件, 比如:Awake(),Start(),Update()等...执行顺序也是从上至下的. 但是,在某些情况下, A脚本要在Awake()里调用B脚本里Awake()里初始化的值,但是又不清楚到底是A脚本的Awake()先运行,还是B脚本的Awake()先运行 或者是运行后,发现是A脚本先运行,就报错空指针了.这时候,可以调整一下脚本的执行顺序. 在Unity里的Edit-->Project Setting-->Script Executi