【游戏开发】Unity·沙漠场景

2021-03-30
4902
0

本文包含内容——

  1. 网格生成

  2. 柏林噪音生成地形

  3. 沙砾闪烁效果

网格生成

首先用c#生成指定尺寸的网格(Mesh)。参照Catlike Coding的Procedural Grid教程完成。

每个3D模型都有Mesh Filter和Mesh Renderer这两个组件。其中Mesh Filter指向希望显示的网格,用代码生成网格即要赋予Mesh Filter一个Mesh类型的物体。

我需要的网格简简单单,需要告诉新建Mesh的数据有vertices,traingles和uv。

定义顶点信息的数组,填充各个顶点的坐标信息,将顶点数组赋予给Mesh.vertices。

接下来定义这些顶点如何构成三角形(通常Mesh的最小单位是三角形)。每个正方形Mesh由2个三角形构成,简单粗暴直接按6个顶点计算,将顶点的顺序索引存储到Mesh.triangles中。

 

 

uv坐标的位置直接与顶点坐标关联,因为只是一张平面啦所以很简单——

uv[i] = new Vector2((float) x / xSize, (float) y / ySize);

最后得到的平面网格生成器效果如下:

*Unity中Scene窗口的左上角有Shading选项卡,切换Shading Mode到Wireframe即可看见场景中各个物体的的网格。

柏林噪音决定地形高度

因为还没想好场景是什么样的,所以先用柏林噪音决定高度看效果。

Unity有自带的Mathf.PerlinNoise函数,直接用啦~

工程文件-场景1

加上贴图就还蛮有沙漠的感觉...

沙砾闪耀效果

沙砾闪耀这里,是受Minionart的Interactive Snow的启发(真是个宝藏po主QwQ)。雪地表面有闪烁发光的效果,跟沙砾的闪烁差不多吧...

沙砾的闪烁用到一张噪音贴图——

通过控制一个灰度阈值决定像素是否显示(Cut off)。

//...
// 沙粒闪耀效果
float4 sparklesStatic = tex2D(_SparkleNoise, IN.uv_MainTex * _SparkleScale * 5);
float4 sparklesResult = tex2D(_SparkleNoise, (IN.uv_MainTex) * _SparkleScale) * sparklesStatic;
//...
o.Albedo = step(_SparkCutoff, sparklesResult) * _SparkleColor;
o.Emission = step(_SparkCutoff, sparklesResult) * _RimColor * pow(rim, _RimPower);

用这张图可以达成类似星空的效果——

工程文件-场景3

Sample工程文件

好啦,本节课就上到这里啦,下课!

 

 

 

转载声明:本文来源于网络,不作任何商业用途。

免责声明:本文内部分内容来自网络,所涉绘画作品及文字版权与著作权归原作者,若有侵权或异议请联系我们处理。
收藏

全部评论

您还没登录

暂无留言,赶紧抢占沙发
王氏教育是国内专业的CG数字艺术设计线上线下学习平台,在王氏教育,有原画、插画、漫画、影视、3D模型等培训课程,也有学习资源下载、行业社区交流。CG数字艺术学习,来王氏教育。
绘学霸iOS端二维码

IOS下载

绘学霸安卓端二维码

安卓下载

绘学霸微信小程序二维码

小程序

版权声明
本网站所有产品设计、功能及展示形式,均已受版权或产权保护,任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
热线电话
18026259035
咨询时间:9:00~21:00
在线客服
联系网站客服
客服微信:18026259035
公司地址
中国·广州
广州市海珠区晓港中马路130号之19
绘学霸客户端(权限暂无,用于CG资源与教程交流分享)
王氏教育 王氏教育