《草原植被实现》

本文详述了如何在Unity3D中实现高密度草原系统,包括地形高度与疏密度采样、数据存储加载、草块动态刷新、麦浪效果、草地生长过渡和交互功能。通过风力和交互模拟,营造出风吹麦浪的视觉效果,增强了游戏体验。
摘要由CSDN通过智能技术生成

转载请注明出处:

一、设计目的与适用环境

  • 设计目的

​ 草大部分是做为地图装饰作用,与其他地形装饰物共用同一种系统,多数由物件系统或者地形刷编辑到场景中。由于性能原因,这种实现方式无法大面积覆盖地图(图1)。本文介绍的是草原效果(图2),目的是通过高密度的草地配合适当的“风”在视觉效果上营造“风吹麦浪”的效果,使草地更具整体感,并参与到游戏交互中。

草地装饰物

在这里插入图片描述

(图1)

草原系统

在这里插入图片描述

(图2)

  • 适用环境

​ 场景中有供草原采样地形高度疏密度的依据。

​ 例如使用地形mesh组合采样高度,疏密度使用地表材质权重图的某些通道关系采样。

二、工作流程

在这里插入图片描述

三、技术点划分

  1. 地形高度、疏密度采样。
  2. 地形数据存储、加载。
  3. 草块随焦点移动。
  4. 草块刷新。
  5. 麦浪效果。
  6. 草地生长过渡。
  7. 砍草(交互事例)。
  8. uv动画。

四、技术点实现

地形高度、疏密度采样

​ 草原的覆盖区域由地表材质的权重图通道决定,权重比例参数用来调整草地在不同地表材质上的疏密度。虽然非必须使用权重图,但是需要有草地疏密度采样的依据。地形高度采样选取地形mesh即可。(如下图)

在这里插入图片描述

​ 每个采样点记录地形高度与密度值,并且根据地块大小将整体数据按地块划分,基准点使用地形的bounds.min方便后边草块刷新时抓取数据时的索引定位。

密度值计算:

Color col = ReliefMap.GetPixel(Mathf.RoundToInt(hit.textureCoord.x * ReliefMap.width)
													, Mathf.RoundToInt(hit.textureCoord.y * ReliefMap.height));
Density = (byte)(DENSITY_LEVEL *
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值