• 涨知识!文字里的秘密 最全甲骨文书展来了 2019-09-13
  • 晋中市着力将“厕所革命”进行到底 2019-09-05
  • 供应链如何更“智慧” 2019-09-05
  • 红枣食疗效果好 6种吃法最滋补-美食资讯 2019-09-01
  • 党的十九大最重大的理论成就 2019-08-28
  • 余世存:阅读经典不仅是消费,也是责任 2019-08-20
  • 实干树形象 实绩惠民生——“两学一做”特别关注 2019-08-20
  • 曲速引擎:曾被寄予厚望 现遭“一瓢冷水” 2019-08-18
  • 毛泽东说帝国主义都是纸老虎。是有社会基础的 2019-08-07
  • 外国人就医计划示范医院授牌 天津医院泰达医院获认定 2019-07-21
  • 文体 —频道 春城壹网 七彩云南 一网天下 2019-07-18
  • 【理上网来喜迎十九大】苏格:习近平总书记外交思想领航中国特色大国外交 2019-07-18
  • 8种家居环境很败“性” 2019-06-28
  • 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-06-15
  • 晋城市举办干部素质提升工程第十八期专题讲座 2019-06-15
  • 查福建36选7走势图: zhang273162308 Unity&Shader案例篇—光锥扫描效果

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

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

    主题

    595

    帖子

    7000

    积分

    Rank: 9Rank: 9Rank: 9

    UID
    3579
    好友
    109
    蛮牛币
    5493
    威望
    0
    注册时间
    2013-9-10
    在线时间
    1548 小时
    最后登录
    2019-9-11

    专栏作家活力之星游戏蛮牛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
    排名
    18792
    昨日变化

    1

    主题

    35

    帖子

    123

    积分

    Rank: 2Rank: 2

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

    0

    主题

    28

    帖子

    307

    积分

    Rank: 4

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

    2

    主题

    25

    帖子

    171

    积分

    Rank: 3Rank: 3Rank: 3

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

    2

    主题

    25

    帖子

    171

    积分

    Rank: 3Rank: 3Rank: 3

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

    2

    主题

    25

    帖子

    171

    积分

    Rank: 3Rank: 3Rank: 3

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

    52

    主题

    770

    帖子

    2104

    积分

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

    UID
    214924
    好友
    5
    蛮牛币
    22498
    威望
    0
    注册时间
    2017-3-28
    在线时间
    566 小时
    最后登录
    2019-9-12
    7#
    2019-2-21 17:44:00 只看该作者
    排名
    1089
    昨日变化

    33

    主题

    331

    帖子

    2362

    积分

    Rank: 9Rank: 9Rank: 9

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

    1

    主题

    68

    帖子

    1657

    积分

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

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

    31

    主题

    542

    帖子

    5300

    积分

    Rank: 8Rank: 8

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

    0

    主题

    743

    帖子

    2395

    积分

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

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

    8

    主题

    300

    帖子

    2290

    积分

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

    UID
    167044
    好友
    1
    蛮牛币
    3457
    威望
    0
    注册时间
    2016-9-6
    在线时间
    748 小时
    最后登录
    2019-9-16
    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熟悉之中
    849/1000
    排名
    4013
    昨日变化

    1

    主题

    81

    帖子

    849

    积分

    Rank: 5Rank: 5

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

    0

    主题

    163

    帖子

    3059

    积分

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

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

    本版积分规则

  • 涨知识!文字里的秘密 最全甲骨文书展来了 2019-09-13
  • 晋中市着力将“厕所革命”进行到底 2019-09-05
  • 供应链如何更“智慧” 2019-09-05
  • 红枣食疗效果好 6种吃法最滋补-美食资讯 2019-09-01
  • 党的十九大最重大的理论成就 2019-08-28
  • 余世存:阅读经典不仅是消费,也是责任 2019-08-20
  • 实干树形象 实绩惠民生——“两学一做”特别关注 2019-08-20
  • 曲速引擎:曾被寄予厚望 现遭“一瓢冷水” 2019-08-18
  • 毛泽东说帝国主义都是纸老虎。是有社会基础的 2019-08-07
  • 外国人就医计划示范医院授牌 天津医院泰达医院获认定 2019-07-21
  • 文体 —频道 春城壹网 七彩云南 一网天下 2019-07-18
  • 【理上网来喜迎十九大】苏格:习近平总书记外交思想领航中国特色大国外交 2019-07-18
  • 8种家居环境很败“性” 2019-06-28
  • 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-06-15
  • 晋城市举办干部素质提升工程第十八期专题讲座 2019-06-15
  • 排列三组选奖126前后的关系 梅西球鞋 最佳阵容公告 幸运赛车走势图爱彩人人网 新疆时时彩几点开始 浙江快乐彩12选5软件 足球比分预测分析基本法 下五子棋规则 购买生肖时时彩 重庆百变王牌投注 云南时时彩开奖结果走势图 吉林快3专家预测 河南22选5胆拖 吉利心水论坛打不开 组六开奖