游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2313

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 4244|回复: 234

[zhang273162308] Unity&Shader案例篇—地图上热图分布

  [复制链接]  [移动端链接]
排名
139
昨日变化

113

主题

549

帖子

6630

积分

Rank: 9Rank: 9Rank: 9

UID
3579
好友
103
蛮牛币
4194
威望
0
注册时间
2013-9-10
在线时间
1403 小时
最后登录
2018-9-21

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

发表于 2018-7-9 18:25:58 | 显示全部楼层 |阅读模式

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

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

x

一、介绍

        在2维平面地图上随机或者指定位置生成一系列的热量、能源或者其他需要表示的信息的分布图。可以通过切换不同的贴图表示不同的信息,如图所示表示的是该地区的降水量的变化

heatMap.gif

如图所示为表示该地区的温度变化分布图

heatMap2.gif

二、实现

       在贴图的的某个位置处绘制指定半径的圆圈,然后调整圆圈的强度也即透明度。因此Shader部分会定义这两类变量,因为Shader里面不能定义没有长度的数组,只能一开始给个固定比较大的100作为初始长度,在代码里传这个数组变量的时候只要不超过这个数组的长度的参数都是可以的。当然你穿了101个数组的参数也不会报错,但是超出100的肯定也不会被shader代码使用到。代码

[C#] 纯文本查看 复制代码
			//自定义变量
			uniform int _Points_Length = 0;
			uniform float3 _Points[100];		// (x, y, z) = 位置
			uniform float2 _Properties[100];	// x = 半径, y = 透明度
			sampler2D _HeatTex;

然后,计算每个分布点位置相对世界坐标原地的距离,再结合强度就可以都到一个输出的透明度值。片段着色器代码为:

[C#] 纯文本查看 复制代码
			half4 frag(vertOutput output) : COLOR
			{
				half h = 0;
				for (int i = 0; i < _Points_Length; i++)
				{
					// 计算每一个分布点位置的距离
					half di = distance(output.worldPos, _Points[i].xyz);

					half ri = _Properties[i].x;
					half hi = 1 - saturate(di / ri);

					h += hi * _Properties[i].y;
				}

				
				h = saturate(h);
				half4 col = tex2D(_HeatTex, fixed2(h, 0.5));
				return col;
			}

接下来编写控制脚本,这里写了一个随机的位置、半径和强度。

最后要得到如上图所示的闪烁的热图效果,就是在已有的点位置上加一个噪声处理,如:

[C#] 纯文本查看 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HeatMap : MonoBehaviour {

    [SerializeField] private int countPoint;
   [SerializeField] private Material heatMat;

    [SerializeField]
    private Vector4[] pointPoses;
    [SerializeField]
    private Vector4[] pointProper;

    
    private void Awake()
    {
        heatMat.SetFloatArray("_Points", new float[countPoint]);
    }
    // Use this for initialization
    void Start () {

        pointPoses = new Vector4[countPoint];
        pointProper = new Vector4[countPoint];

        for (int i = 0; i < pointPoses.Length; i++)
        {
            pointPoses[i] = new Vector2(Random.Range(-0.9f, 0.9f), Random.Range(-0.5f, 0.5f));
            pointProper[i] = new Vector2(Random.Range(0f, 0.25f), Random.Range(-0.25f, 1f)); // (Radius, Intensities)
        }

        heatMat.SetVectorArray("_Properties", pointProper);
        heatMat.SetInt("_Points_Length", countPoint);
	}
	
	// Update is called once per frame
	void Update () {
        for (int i = 0; i < countPoint; i++)
        {
            pointPoses[i] += new Vector4(Random.Range(-0.1f, +0.1f), Random.Range(-0.1f, +0.1f), 0f, 0f) * Time.deltaTime;
        }
        heatMat.SetVectorArray("_Points", pointPoses);
       // heatMat.SetVectorArray("_Properties", pointProper);
    }
}

三、总结

完整的工程文件下载地址为

游客,如果您要查看本帖隐藏内容请回复




回复

使用道具 举报

7日久生情
3647/5000
排名
175
昨日变化

11

主题

481

帖子

3647

积分

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

UID
52346
好友
0
蛮牛币
4666
威望
0
注册时间
2014-10-31
在线时间
955 小时
最后登录
2018-9-21
发表于 2018-7-9 18:54:54 | 显示全部楼层
感谢分享  感谢分享

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1150/1500
排名
2430
昨日变化
8

0

主题

284

帖子

1150

积分

Rank: 6Rank: 6Rank: 6

UID
135463
好友
0
蛮牛币
168
威望
0
注册时间
2016-1-23
在线时间
318 小时
最后登录
2018-9-21
发表于 2018-7-9 19:07:35 | 显示全部楼层
u9ipoiuouiouioiuoiu

回复 支持 反对

使用道具 举报

4四处流浪
429/500
排名
8050
昨日变化
3

0

主题

223

帖子

429

积分

Rank: 4

UID
281167
好友
1
蛮牛币
848
威望
0
注册时间
2018-5-14
在线时间
64 小时
最后登录
2018-8-21
发表于 2018-7-9 19:30:27 | 显示全部楼层
感谢分享

回复

使用道具 举报

7日久生情
4159/5000
排名
149
昨日变化

18

主题

313

帖子

4159

积分

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

UID
67323
好友
1
蛮牛币
3305
威望
0
注册时间
2015-1-10
在线时间
1641 小时
最后登录
2018-9-9
发表于 2018-7-9 20:37:47 | 显示全部楼层
6666  最近也想搞 一堆这个东西

回复 支持 反对

使用道具 举报

排名
15742
昨日变化
15

0

主题

8

帖子

87

积分

Rank: 2Rank: 2

UID
275619
好友
0
蛮牛币
24
威望
0
注册时间
2018-4-4
在线时间
37 小时
最后登录
2018-7-23
发表于 2018-7-9 20:42:09 | 显示全部楼层
666666

回复

使用道具 举报

4四处流浪
387/500
排名
6973
昨日变化
62

0

主题

145

帖子

387

积分

Rank: 4

UID
114090
好友
0
蛮牛币
253
威望
0
注册时间
2015-7-18
在线时间
70 小时
最后登录
2018-9-21
发表于 2018-7-9 22:09:38 | 显示全部楼层
666666666666666666

回复 支持 反对

使用道具 举报

7日久生情
3807/5000
排名
157
昨日变化

1

主题

511

帖子

3807

积分

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

UID
11004
好友
0
蛮牛币
4270
威望
0
注册时间
2013-12-24
在线时间
1141 小时
最后登录
2018-9-21

VIP

发表于 2018-7-9 22:54:51 | 显示全部楼层
这么好的东西。
[发帖际遇]: hzwlm 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

4四处流浪
341/500
排名
7144
昨日变化
62

0

主题

57

帖子

341

积分

Rank: 4

UID
272612
好友
1
蛮牛币
201
威望
0
注册时间
2018-3-15
在线时间
116 小时
最后登录
2018-9-21
发表于 2018-7-9 23:07:42 | 显示全部楼层
感谢分享
[发帖际遇]: zisen 在网吧通宵,花了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
3757/5000
排名
100
昨日变化

1

主题

366

帖子

3757

积分

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

UID
28000
好友
0
蛮牛币
4522
威望
0
注册时间
2014-6-4
在线时间
986 小时
最后登录
2018-9-22
发表于 2018-7-9 23:46:10 | 显示全部楼层
谢谢~~~~~~~~~~~~
[发帖际遇]: vtbox 被钱袋砸中进医院,看病花了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

5熟悉之中
818/1000
排名
2377
昨日变化
13

0

主题

59

帖子

818

积分

Rank: 5Rank: 5

UID
3463
好友
2
蛮牛币
1257
威望
0
注册时间
2013-9-8
在线时间
203 小时
最后登录
2018-9-21
发表于 2018-7-10 05:22:55 | 显示全部楼层
謝謝分享,研究一下。

回复 支持 反对

使用道具 举报

4四处流浪
310/500
排名
6453
昨日变化
38

0

主题

41

帖子

310

积分

Rank: 4

UID
111073
好友
0
蛮牛币
525
威望
0
注册时间
2015-6-29
在线时间
75 小时
最后登录
2018-9-21
发表于 2018-7-10 07:58:31 | 显示全部楼层
感谢分享  感谢分享
[发帖际遇]: 一个袋子砸在了 weiyuliang 头上,weiyuliang 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

4四处流浪
310/500
排名
6453
昨日变化
38

0

主题

41

帖子

310

积分

Rank: 4

UID
111073
好友
0
蛮牛币
525
威望
0
注册时间
2015-6-29
在线时间
75 小时
最后登录
2018-9-21
发表于 2018-7-10 08:18:22 | 显示全部楼层
实验了一下UP的工程,热点的生成似乎不能动态变化,增加在工程运行的时候改变countPoint就会报错

回复 支持 反对

使用道具 举报

4四处流浪
415/500
排名
5931
昨日变化
38

6

主题

77

帖子

415

积分

Rank: 4

UID
232340
好友
0
蛮牛币
360
威望
0
注册时间
2017-7-15
在线时间
118 小时
最后登录
2018-9-21
发表于 2018-7-10 08:19:19 | 显示全部楼层
谢谢分享

回复

使用道具 举报

6蛮牛粉丝
1039/1500
排名
2565
昨日变化
1

0

主题

244

帖子

1039

积分

Rank: 6Rank: 6Rank: 6

UID
83972
好友
2
蛮牛币
361
威望
0
注册时间
2015-3-24
在线时间
273 小时
最后登录
2018-9-21
发表于 2018-7-10 08:24:29 | 显示全部楼层
钱钱钱钱钱钱钱钱钱钱钱钱钱钱钱

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表