• 96次航拍峨眉 换个角度看巴蜀名山 中国国家地理网 2019-04-23
  • 俄罗斯电影《最后一球》定档落魄球星遇上菜鸟球队 2019-04-21
  • 【理上网来·辉煌十九大】缅甸资深媒体人高度评价习近平十九大报告:立意高远 内涵丰富 2019-04-21
  • 特朗普和金正恩先后抵达嘉佩乐酒店 会晤即将开始 2019-04-17
  • 中国侨联直属机关党委举办党务干部培训班 2019-04-17
  • 上海合作组织青岛峰会举行 2019-04-07
  • IT热点小度智能音箱发布 新飞电器破产拍卖 2019-04-04
  • 台州公务员管理再也不用“往返跑”了!“最多跑一次”撬动组织人事改革 全省首个试点 2019-04-03
  • 我要讨干嘛?姜太公钓鱼,愿者上钩。 2019-04-03
  • 新疆花开天山南北 笑迎八方来客 2019-03-25
  • 机器人占领就业市场后:人类还能从事这些工作 2019-03-04
  • 以网络文化建设推进文化惠民 2019-03-03
  • 贸易战,只能是双输。我们是众志成城,美国却不一定。 2019-02-26
  • 辣评2016年9月最HOT 轿车获奖榜单 2019-02-22
  • 交通运输部路网中心:端午假期高速通行不免费 2019-02-18
  • 南粤36选7开奖号码: zhang273162308 Unity&Shader案例篇—光锥扫描效果

    185
    回复
    3223
    查看
    打印 上一主题 下一主题
      [ 复制链接 ]
    排名
    141
    昨日变化

    福建36选7和值走势图 www.00-na.com 120

    主题

    562

    帖子

    6898

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    3579
    好友
    108
    蛮牛币
    5181
    威望
    0
    注册时间
    2013-9-10
    在线时间
    1483 小时
    最后登录
    2019-4-24

    专栏作家活力之星游戏蛮牛QQ群会员蛮牛哥

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?注册帐号

    x
    一、介绍
          在Unity2018.2.14上,一个实现展示敌方视线扇形光锥效果的Shader,其效果图如图所示,当然这种效果还只是实现了一个视线光锥的简单效果

    当这个视线光锥开始扫描的时候,为了表达更加真实的效果,在出现扫描到障碍物的时候,会出现光线被遮挡的效果。如图所示:当光锥扫描到前面的障碍物的时候,会出现光线被遮挡的效果。

    二、实现
    1、简单半透明扫描扇形光锥Shader代码
    游客,如果您要查看本帖隐藏内容请回复


    这个Shader只是实现了静态的扇形扫描光锥效果,接下来还有实现光锥转动的时候扫描到障碍物时候的效果。
    2、动态扫描
    先将光锥的角度进行微分处理,每个单位角度的方向指定距离处得到一个点。由物体向该点发射一个射线,进行射线检测。射线碰到有碰撞体的物体就会得到一个碰撞点,然后将点与扫描半径的比值赋给Shader代码里的深度缓存数组  m_aDepthBuffer。如果没有碰撞到障碍物则赋值为-1。在Shader代码里
    [AppleScript] 纯文本查看 复制代码
    // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
    
    
    Shader "ShaderPack/ConeOfSight" {
            Properties{
                    _Color("Color",Color) = (1,1,1,1)
                    _SightAngle("SightAngle",Float) = 0.5
                    _FarHardness("FarHardness",Float) = 0.5
                    _RangeHardness("RangeHardness",Range(0,100)) = 5
                    _RangeStep("RangeStep",Range(0,1)) = 0.7
                    _SourceWhiteness("SourceWhiteness",Range(0,1)) = 1
                    //_SourceGlow("SourceGlow",Range(1,10)) = 1
            }
    
                    SubShader{
                            Tags {
                                    "Queue" = "Transparent"
                                    "RenderType" = "Transparent"
                            }
                            Blend SrcAlpha OneMinusSrcAlpha
    
                            Pass{
                                    ZWrite Off
                                    CGPROGRAM
    
                                    #pragma vertex vert
                                    #pragma fragment frag
    
                                    #include "UnityCG.cginc"
    
                                    struct v2f {
                                            float4 position : SV_POSITION;
                                            float4 uv : TEXCOORD0;
                                    };
    
                                    half4 _Color;
                                    half _SightAngle;
                                    half _FarHardness;
                                    half _RangeHardness;
                                    half _RangeStep;
                                    half _SourceWhiteness;
                                    //half _SourceGlow;
    
                                    //uniform half _CurrentAngle = 0;
                                    //int _BufferSize = 64;
                                    uniform float _SightDepthBuffer[256];
    
                                    //Vertex
                                    v2f vert(appdata_base IN) {
                                            v2f o;
                                            o.position = UnityObjectToClipPos(IN.vertex);
                                            o.uv = IN.texcoord;
                                            return o;
                                    }
    
                                    //Fragment
                                    fixed4 frag(v2f IN) : SV_Target{
                                            const float PI = 3.14159;
    
                                            IN.uv.x -= 0.5f;
                                            IN.uv.y -= 0.5f;
                                            half distcenter = 1 - sqrt(IN.uv.x*IN.uv.x + IN.uv.y*IN.uv.y) * 2;
    
                                            half2 fragmentDir = normalize(IN.uv.xy);
                                            half viewDotPos = clamp(dot(half2(1,0), fragmentDir),0,1);
                                            half sightAngleRads = _SightAngle / 2 * PI / 180;
                                            half sightVal = cos(sightAngleRads);
    
                                            half4 col = lerp(_Color,half4(1,1,1,1),distcenter*_SourceWhiteness);
                                            col.a *= pow(viewDotPos / sightVal,_RangeHardness) *distcenter * pow(distcenter,_FarHardness);
    
                                            //col.a *= clamp(distcenter*abs(pow(col.a,-_FarHardness*10)),0,1);
                                            if (viewDotPos < sightVal) 
                                            {
                                                    col.a *= _RangeStep;
                                            }
                                            else 
                                            {
                                                    // --- Depth check
                                                    float fragmentAngle = asin(fragmentDir.y) + sightAngleRads;
                                                    float fragmentVal = 1.0f - (fragmentAngle) / (sightAngleRads * 2);
                                                    int index = fragmentVal * 256;
                                                    if (_SightDepthBuffer[index] > 0 && (1 - distcenter) > _SightDepthBuffer[index])
                                                            col *= 0;
                                            }
    
                                            col.a *= _Color.a;
                                            return col;
                                    }
    
                                    ENDCG
                            }
            }
    
    }
    
    


    进行判断的时候就会将碰撞到障碍物的后面的透明度都设置为0,这样就实现了光线被遮挡的效果。代码如下:
    游客,如果您要查看本帖隐藏内容请回复

    三、总结
    1、实现了光锥扫描到障碍物的动态效果
    2、不足之处是该扫描效果紧紧是水平面的效果,不能做到立体的效果
    3、工程下载地址
    游客,如果您要查看本帖隐藏内容请回复



    2初来乍到
    123/150
    排名
    18789
    昨日变化

    1

    主题

    35

    帖子

    123

    积分

    Rank: 2Rank: 2

    UID
    218899
    好友
    1
    蛮牛币
    253
    威望
    0
    注册时间
    2017-4-22
    在线时间
    55 小时
    最后登录
    2019-3-26
    沙发
    2019-2-21 16:55:48 只看该作者
    来学习学习,打算做一个俯视视角的游戏需要这样的功能
    3偶尔光临
    281/300
    排名
    7735
    昨日变化

    0

    主题

    24

    帖子

    281

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    250515
    好友
    0
    蛮牛币
    152
    威望
    0
    注册时间
    2017-10-24
    在线时间
    96 小时
    最后登录
    2019-4-22
    板凳
    2019-2-21 17:20:49 只看该作者
    来学习学习,打算做一个俯视视角的游戏需要这样的功能
    3偶尔光临
    171/300
    排名
    11370
    昨日变化

    2

    主题

    25

    帖子

    171

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    116279
    好友
    0
    蛮牛币
    579
    威望
    0
    注册时间
    2015-8-2
    在线时间
    56 小时
    最后登录
    2019-2-21
    地板
    2019-2-21 17:22:04 只看该作者
    6666666666666666
    3偶尔光临
    171/300
    排名
    11370
    昨日变化

    2

    主题

    25

    帖子

    171

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    116279
    好友
    0
    蛮牛币
    579
    威望
    0
    注册时间
    2015-8-2
    在线时间
    56 小时
    最后登录
    2019-2-21
    5#
    2019-2-21 17:24:45 只看该作者
    不错,学习6666666666
    3偶尔光临
    171/300
    排名
    11370
    昨日变化

    2

    主题

    25

    帖子

    171

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    116279
    好友
    0
    蛮牛币
    579
    威望
    0
    注册时间
    2015-8-2
    在线时间
    56 小时
    最后登录
    2019-2-21
    6#
    2019-2-21 17:26:50 只看该作者
    学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习
    7日久生情
    2006/5000
    排名
    1897
    昨日变化

    41

    主题

    737

    帖子

    2006

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    214924
    好友
    4
    蛮牛币
    17455
    威望
    0
    注册时间
    2017-3-28
    在线时间
    512 小时
    最后登录
    2019-4-25
    7#
    2019-2-21 17:44:00 只看该作者
    7日久生情
    2217/5000
    排名
    1089
    昨日变化

    30

    主题

    322

    帖子

    2217

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    82788
    好友
    25
    蛮牛币
    7389
    威望
    0
    注册时间
    2015-3-21
    在线时间
    803 小时
    最后登录
    2019-4-24
    8#
    2019-2-21 17:58:09 只看该作者
    这个好,谢谢楼主
    7日久生情
    1622/5000
    排名
    1160
    昨日变化

    1

    主题

    65

    帖子

    1622

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    179667
    好友
    1
    蛮牛币
    6641
    威望
    0
    注册时间
    2016-10-31
    在线时间
    564 小时
    最后登录
    2019-4-23
    9#
    2019-2-21 18:17:29 只看该作者
    6+66666666666666
    8常驻蛮牛
    5222/10000
    排名
    32
    昨日变化

    31

    主题

    540

    帖子

    5222

    积分

    Rank: 8Rank: 8

    UID
    47602
    好友
    5
    蛮牛币
    25239
    威望
    0
    注册时间
    2014-10-3
    在线时间
    1477 小时
    最后登录
    2019-4-25
    10#
    2019-2-21 19:54:01 只看该作者
    多谢版主分享,很好的资源。
    7日久生情
    2233/5000
    排名
    1394
    昨日变化

    0

    主题

    693

    帖子

    2233

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    135463
    好友
    0
    蛮牛币
    174
    威望
    0
    注册时间
    2016-1-23
    在线时间
    650 小时
    最后登录
    2019-4-25
    11#
    2019-2-21 21:16:26 只看该作者
    66666666666666666666666
    7日久生情
    2153/5000
    排名
    758
    昨日变化

    7

    主题

    258

    帖子

    2153

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    167044
    好友
    0
    蛮牛币
    3303
    威望
    0
    注册时间
    2016-9-6
    在线时间
    654 小时
    最后登录
    2019-4-24
    12#
    2019-2-21 21:20:22 只看该作者
    厉害了这个 看着很厉害
    7日久生情
    1714/5000
    排名
    2263
    昨日变化

    0

    主题

    643

    帖子

    1714

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    182268
    好友
    2
    蛮牛币
    758
    威望
    0
    注册时间
    2016-11-9
    在线时间
    450 小时
    最后登录
    2019-4-22
    13#
    2019-2-21 21:37:11 只看该作者
    超神之路啊超神之路啊超神之路啊超神之路啊超神之路啊超神之路啊超神之路啊超神之路啊超神之路啊
    5熟悉之中
    785/1000
    排名
    4013
    昨日变化

    1

    主题

    72

    帖子

    785

    积分

    Rank: 5Rank: 5

    UID
    14034
    好友
    0
    蛮牛币
    270
    威望
    0
    注册时间
    2014-2-10
    在线时间
    342 小时
    最后登录
    2019-4-25
    14#
    2019-2-21 21:42:31 只看该作者
    支持一下~~~~~~~~
    7日久生情
    2990/5000
    排名
    516
    昨日变化

    0

    主题

    163

    帖子

    2990

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    57299
    好友
    3
    蛮牛币
    2075
    威望
    0
    注册时间
    2014-11-24
    在线时间
    1345 小时
    最后登录
    2019-4-22
    15#
    2019-2-21 22:07:40 只看该作者
    谢谢楼主分享?。?!
    您需要登录后才可以回帖 登录 | 注册帐号

    本版积分规则

  • 96次航拍峨眉 换个角度看巴蜀名山 中国国家地理网 2019-04-23
  • 俄罗斯电影《最后一球》定档落魄球星遇上菜鸟球队 2019-04-21
  • 【理上网来·辉煌十九大】缅甸资深媒体人高度评价习近平十九大报告:立意高远 内涵丰富 2019-04-21
  • 特朗普和金正恩先后抵达嘉佩乐酒店 会晤即将开始 2019-04-17
  • 中国侨联直属机关党委举办党务干部培训班 2019-04-17
  • 上海合作组织青岛峰会举行 2019-04-07
  • IT热点小度智能音箱发布 新飞电器破产拍卖 2019-04-04
  • 台州公务员管理再也不用“往返跑”了!“最多跑一次”撬动组织人事改革 全省首个试点 2019-04-03
  • 我要讨干嘛?姜太公钓鱼,愿者上钩。 2019-04-03
  • 新疆花开天山南北 笑迎八方来客 2019-03-25
  • 机器人占领就业市场后:人类还能从事这些工作 2019-03-04
  • 以网络文化建设推进文化惠民 2019-03-03
  • 贸易战,只能是双输。我们是众志成城,美国却不一定。 2019-02-26
  • 辣评2016年9月最HOT 轿车获奖榜单 2019-02-22
  • 交通运输部路网中心:端午假期高速通行不免费 2019-02-18