天气系统(环境系统)_SLG项目开发经验三
前言:这部分讲得是天气(环境)系统的思路与实现,由于这部分首先不是每个项目必备的系统,加上关于表现相关能够实现方法很多,想要的效果也各不相同,但貌似网上没有比较完整的介绍帖子和实现帖子,而且表现相关的可能很多开发人员会想到Shader或者可视化编程相关的插件(ASE,Shader Graph,Shader Forge),但如果只是基础的天气效果的话其实并不太需要那部分的知识,所以这次就想分享下我使用unity自带组件实现的天气特效。转载请附上本文链接
一、天气系统的定义与作用
以我参考的游戏与网上的资料,主要是季节变化、时间段变化、天气现象。季节变化体现在地表材质,时间段变化主要体现在地表叠色,天气现象就是特效相关。(这里并没有提建筑相关的天气相关,不过其实大同小异)
然后就是天气系统的作用,其实表现上的优化无论是什么游戏都可以认为在做差异化,除非你的游戏风格独一无二,不然只靠天气系统更多只是相较竞品多了一个亮点而已。当然是否为了这一个亮点投入时间和人力就要看各项目组的成本了,由于是我一个人全权管理和开发,中间插入了大量上个项目的商业化内容,本人也不是专业特效,所以这边断断续续大概做了一个月左右,不过总体来说做个天气系统成本应该可以接受的。
开发软件:Unity2019.4
二、天气系统的实现
这里先附上我录制的视频:
https://www.bilibili.com/video/BV1zv411N7Sm
首先推荐几个我实际开发中有参考和对我有帮助的视频:
https://www.youtube.com/watch?v=b8oVAS9IdZM
https://www.youtube.com/watch?v=cDHJuRV5Ays
https://www.youtube.com/watch?v=ewC_c6aHbf8
https://www.youtube.com/watch?v=saGyjU5wHWw
https://www.bilibili.com/video/BV1vW411g72k
方案:
一、时间段变化:这边采用的是比较简单的做法是:给地表叠色。首先是美术那边出一张早上的图,然后程序通过叠色来表现黄昏和晚上的时间段。(这个过程可能需要美术协同)
二、四季变化:这个主要是地表材质的变化,所以一定要美术那边出图。前端部分主要说过渡方面的,春->夏,夏->秋 这两个用简单的透明度过渡即可,而秋->冬,冬->春的效果(看我录的视频),用的是一种叫溶解的效果。
这里附上关键部分代码
half4 frag(v2f i) : SV_Target
{half a = _Color.a;half4 col1 = tex2D(_MainTex,i.texcoord);half4 col2 = tex2D(_NextTex,i.texcoord);half4 col;half r = tex2D(_NoiseTex,i.texcoord).r - _NoiseVal;if(r < 0){col = col2;}else{col = a * col1 + col2 * (1 - a);}return col * _Color;
}
这里实现还是用比较简单的,如果想要更好的效果可以使用一种叫软溶解的效果,可以让边界更加平滑和自然。
三:天气、气候的变化:这部分用的Unity的粒子系统,基本不包含shader和可视化编程相关的。这段分四部分,第一部分是介绍下粒子系统,第二部分是特效的制作,第三部分是特效在场景中的实际应用,第四部分是性能分析。
粒子系统的介绍
先附上官方文档:https://docs.unity.cn/cn/2019.4/Manual/class-ParticleSystem.html
这里先简单说一下Unity比较常用的美术效果制作方式,从上手难度来说:动画系统->粒子系统->可视化编程->Shader,这些以后如果有时间或者感觉有东西写的话,我会写一个相关系统的分享文章。
粒子系统在平时的业务开发是基本用不到,用这个系统的可能更多是特效与TA。个人使用后感觉还是很不错,第一是Unity自带系统优势,在性能方面可能有底层级别的优化,第二是大幅度增加开发效率,毕竟如果要自己写个类似的系统,不管是通用性和性能都会很捉急。
特效的制作
PS:由于效果都不算复杂,这边直接给出关键参数,由于每个项目的地面与摄像机都不一样,所以旋转、Shape模块、Emission模块相关的要自己调试 ,这边只给出关键的参数,以及效果不代表最佳效果。
1、雨&水花:
2、 打雷&雷光
3、闪电&火花
3、雪:
4、云
5、光
6、叶子
特效在大地图中的应用
天气系统除去一直跟着摄像机移动的特效以外(叶子的那个效果),其他都要生成后移动时会产生位置上的差异(雨,阳光,云那些效果),这时候就要考虑两个问题,第一就是如何在移动时一直保持特效的产生,第二就是如何保证不露馅,第三种就是如果有需要碰撞触发的特效处理。
1、第一点的解决主要根据摄像机的移动速度和视野范围来控制 startLifetime 和Emission模块 和 Shape模块。关于这一点只能慢慢的去调试,毕竟每个人的效果都不一样,但一定要记住控制的是Shape的position 而不是游戏物体的位置,如果整个移动的话特效粒子也会跟着移动,这里提供一个U3D的坐标转换接口 transform.InverseTransformPoint 把摄像机的位置转成shape的坐标。
2、第二点的话主要是像打雷和阳光那个特效,要保证往上移动时,不会看到特效的根部(生成处)。这里主要是要用 3D Start Size 的 y 和 shape的position的y,一方面是提高生成的位置另一方面是增加y轴的缩放,但如果还是需要优化的话,可能就要单独处理了(比如接近时特效需要y轴移动之类)
3、第三点的是说如果有类似水花溅起、火花溅起时的特效处理。
s
首先是弄个的触发盒(位置如上图,要看项目实际情况)
由于只是用于触发 碰撞盒用的trigger 所以在特效上勾上在的是Triggers,这个触发回调我勾的是inside和enter 触碰时和进入后触发。同时给Colliders赋值,这里由于我是分离的所以用接口赋值:ps.trigger.SetCollider(0,collider)
性能相关
先直观看下特效找成的性能消耗
左边是未开启时的性能消耗,右边是“特效全开”后的性能消耗。
只开启雨的特效
总体来说性能的消耗还是很少的。
这里说一些优化相关的
1:控制生成的粒子数量,如果有大面积的需要显示,就移动shape的范围
2:如果使用Noise 模块,可以调整到Quality窗口调整质量
3:尽量不要使用Lights模块
4:如果想要触发粒子,尽量使用Triggers(触发)而不是Collision(碰撞)
结语:
SLG“三部曲”到此结束了,写这几篇文章也算是为了温故知新、抛砖引玉,最后也希望这些文章能帮到大家。
天气系统(环境系统)_SLG项目开发经验三相关推荐
- 国产中标麒麟Linux部署dotnet core 环境并运行项目 (三) 部署运行WEB API项目
部署dotnet Core Web API 上一步的文章,是我们公司最核心的一个ORM组件,在中标麒麟系统完成了一个插入数据的任务,这一步是将正式的从dot net framework 迁移到 dot ...
- Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三)
Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三) 目录 Jenkins 之 单节点 搭建自动化部署项目环境 与 实战测试 (三) Jenkins 服务器 环境 ...
- (13.1.1)PMBOK之一(附):组织系统及其影响,过程资产环境因素与项目经理
项目工作说明书 商业文件 A.1 商业论证 A.2 项目效益管理计划 A.3 项目成功的标准 A.4 效益评估方法 A.4.1 现值PV与净现值NPV A.4.2 投资回报率 (ROI)和回收期 (P ...
- 项目准备三之日志系统使用
项目准备三之日志系统使用 前言 一.Linux日志 1.1 系统常用的日志 1.2 日志管理服务 rsyslog 1.3 日志级别 二.zlog安装 三.zlog简单使用 3.1 全局参数[globa ...
- 小组项目第三周:后端数据——模拟炒股系统
小组项目第三周:后端数据--模拟炒股系统 个人工作 本周实现了一个额外功能:模拟炒股系统. 每个论坛用户拥有一个模拟炒股用户,可以实现买入.卖出委托,由程序后台实时获取股票价格,判断委托是 ...
- FPGA项目开发:基于JESD204B的LMK04821芯片项目开发经验分享
大侠好,阿Q来也,今天头一次和各位见面,请各位大侠多多关照.今天给各位大侠带来一篇项目开发经验分享"基于JESD204B的LMK04821芯片项目开发",这是本人实打实的项目开发经 ...
- 华北计算机研究无人机,飞马D200无人机在华北某环境地调项目中的应用案例
一.环境地质调查简介 环境地质调查是通过对区域地质环境条件和由自然地质作用及人类活动引起的环境地质问题的调查研究,评价预测资源开发与国土整治的环境地质条件,论证重大区域性环境地质问题和有关地质灾害的地 ...
- 从零开始,跟我一起做jblog项目(三)从Maven到Gradle
从零开始,跟我一起做jblog项目(一)引言 从零开始,跟我一起做jblog项目(二)Maven 从零开始,跟我一起做jblog项目(三)从Maven到Gradle 上一节讲到项目构建工具Maven, ...
- Java web小项目_个人主页(1)—— 云环境搭建与项目部署
摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...
- 鸿蒙开源源码,基于鸿蒙系统开源项目OpenHarmony源码静态分析
#ifndef __scc #define __scc(X) ((long) (X)) // 转为long类型 typedef long syscall_arg_t; #endif #define _ ...
最新文章
- 行人检测--What Can Help Pedestrian Detection?
- jenkins+maven+Tomcat+shell构建自动化部署
- 批处理命令 / 延迟环境变量扩展
- 更改整个目录文件的所有权限
- Linux基础-2.目录文件的浏览、管理及维护
- 云原生那些顶级开源项目,你都用过哪些?
- [python-thirdLib] Python中第三方的用于解析HTML的库:BeautifulSoup
- jvm类加载机制是怎么样的
- Golang笔记——channel(管道)
- 一款无惧“魔改”的设计系统开源了,已支持字节跳动4000多个项目
- 欧拉工程第54题:Poker hands
- 【原创】WP7向Win8移植遇到的问题及独创性解决方案
- 程序员孔乙己!一个愤世嫉俗,脱离低级趣味的人!
- 第1讲 2.2人机交互
- Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection
- 日均5亿查询量的京东到家订单中心,为什么舍MySQL用ES?
- tp框架使用easywechat二次开发微信创建菜单失败
- 基于HTML5的在线地图 - 加载TopoJSON数据
- trim()去除空格
- 8月22日云栖精选夜读:新零售业务中台设计及产品体系解决方案
热门文章
- 同步传输和异步传输原理与比较
- 电路交换、报文交换、分组交换、异步传输模式等通信交换技术的区别
- Snapper转换器的捕捉类型
- at91sam9260 OpenWRT u-boot移植
- codelite开发php,wxWidgets(2):一个好用C/C++ php 开源IDE -- CodeLite IDE
- N95滤材之父:滤材才是关键!道翰天琼认知智能机器人平台API接口大脑为您揭秘-2。
- matlab计算六面体的体积,六面体单元体积坐标方法-工程力学-清华大学.PDF
- 无人机灯光秀,用到了哪些关键技术?
- 【2019年04月30日】股息率分红最高排名
- iMazing中IPA文件的介绍与管理