木木的Unity学习笔记(四)—— Unity中的柏林噪声(Perlin Noise)

木木的Unity学习笔记(四)—— Unity中的柏林噪声

柏林噪声是一个非常强大算法,经常用于程序生成随机内容,在游戏和其他像电影等多媒体领域广泛应用。算法发明者Ken Perlin也因此算法获得奥斯卡科技成果奖。在游戏开发领域,柏林噪声可以用于生成波形,起伏不平的材质或者纹理。例如,它能用于程序生成地形(例如使用柏林噪声来生成我的世界(Minecraft)里的地形),火焰燃烧特效,水和云等等。柏林噪声绝大部分应用在2维,3维层面上,但某种意义上也能拓展到4维。柏林噪声在1维层面上可用于卷轴地形、模拟手绘线条等。
在Unity中,Unity为我们提供了柏林噪声的方法,但只支持2维层面,方法如下:

// 在Mathf类中,调用方法为Mathf.PerlinNoise(x, y);
public static float PerlinNoise(float x, float y);

参数x和y为柏林噪声采样的2维坐标点的x和y,返回值为0.0 ~ 1.0之间的小数。但是有一点需要注意,在Unity中,柏林噪声可能会生成略大于1.0的小数,如果返回值0.0 ~ 1.0对开发者很重要,那么需要限定一下返回值。并且在每次传入的参数固定相同时,柏林噪声会返回同样的返回值,例如:

private void Update()
{
    float result = Mathf.PerlinNoise(5.0f, 5.0f); 
    Debug.Log(result);  // 你会发现在Console中输出的值都是一样的
}

接下来,在Unity中实际操作一下。

模拟生成石头纹理

在Unity中新建场景,在场景中添加一个Cube,编写脚本并绑定给Cube,脚本如下:

using System;
using UnityEngine;

namespace Com.PerlinNoise.Fumiki
{
    public class RockMaterialMonitor : MonoBehaviour
    {
        /// <summary>
        /// 图片的宽度
        /// </summary>
        [SerializeField] private int pictureWidth = 100;
        /// <summary>
        /// 图片的高度
        /// </summary>
        [SerializeField] private int pictrueHeight = 100;
        /// <summary>
        /// 用于柏林噪声的X采样偏移量(仿伪随机)
     
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值