当前位置: 首页 > news >正文

【技术美术】程序化噪波实现

【技术美术】程序化噪波实现

噪波基本原理

首先通过观察噪波,可以确定我们的需求:

  • 噪波的特性
    • 随机性:宏观来看,各区域的颜色是随机的。
    • 平滑性:微观来看,各像素间的颜色是连续的。
    • 稳定性:同样的输入参数只会得到同样的结果。

而为了实现这些特性,需要采样以下方法:

  • 噪波的实现
    1. 随机性:利用随机数生成算法获取随机值。
    2. 稳定性:随机数算法实际是一种哈希函数,产生的是可控的伪随机。
    3. 平滑性:通过平滑算法平滑随机值,使各区域间有颜色过渡。

而这些方法的具体实现,根据计算方式的不同,引出了不同的噪波类型:

  • 噪波的种类
    • 基于晶格
      • 值噪波(根据值线性插值):
        • Value 噪波
      • 梯度噪波(根据向量点乘插值)
        • Perlin 噪波(柏林噪波):最早最流行的噪波实现。
        • Simplex 噪波(单纯形噪波):相比柏林噪波,开销更低且减弱方向伪影。
        • Simulation 噪波
        • Wavelet 噪波
    • 基于点
      • Worley 噪波(细胞格噪波)

实现随机数生成

随机数生成算法都是伪随机,伪随机是通过一个固定的数学公式算出来的,理论上可以预测,所以叫伪随机。之所以能形成随机效果是因为算法过于复杂,变化过于跳跃,难以简单预测出结果。

广义的随机数算法依赖迭代实现,但在 Shader 中很难做到,且不能满足稳定性要求,所以 shader 中的随机数生成算法需另辟蹊径。

最常用的实现方式如下:

\[rand(x) = fract(sin(x) * a) \]

  • a:一个非常大的常数。

其原理就是通过系数 \(a\) 大幅增加函数的变化率,使 x 即使发生一丁点变化,其结果也会千差万别,从而看上去随机了。

实现多维随机数

\[rand(\vec{x}) = fract(sin(\vec{x} \cdot \vec{b}) * a) \]

  • a:与一维中的含义一样。
  • b:一个任意给定的向量。

多维随机数生成与一维随机数生成本质是一样的,只是要先用 \(dot()\) 将多维合并成一维而已。

实现随机数平滑

参考资料

  • 利用 shader 生成随机数
  • 噪波分类
  • 游戏开发中的噪声算法
  • 使用 Unity 生成各类型噪声图的分享
  • 生成连续的 2D、3D 柏林噪声
http://www.jsqmd.com/news/130601/

相关文章:

  • 【排序算法全家桶 Level 2】选择排序:从“双向奔赴”的陷阱到堆排序的“降维打击”
  • Java毕设选题推荐:基于springboot+vue的社区资源共享系统设计与实现社区公共资源(活动室、工具房),实现在线预约与使用登记【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【技术美术】TRS矩阵
  • 疆鸿智能PROFIBUS联RS232:破解汽车智造追溯瓶颈,效率怒增!
  • HarmonyOS 5开发从入门到精通(十六):天气应用实战(下)
  • 【软件开发】设计模式个人解读
  • 软件工程学习日志2025.12.23
  • 软件工程学习日志2025.12.23
  • 8088单板机 8253定时器实验
  • 记录我的niri安装
  • 【软件开发】正则表达式
  • 计算机Java毕设实战-基于springboot的传媒公司传媒直播管理系统设计与实现基于SpringBoot+Vue的传媒公司主播招募管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 2025年珠海可靠的门窗源头厂家有哪些,门窗/慕莎尼奥门窗/断桥铝门窗/侧压平移推拉窗/铝门窗/安全门窗实力厂家推荐排行榜 - 品牌推荐师
  • 基于Spring框架社区老年人健康杂志阅读分享管理系统
  • 【技术美术】光照技术概述
  • 最大数max(x,y,z)(信息学奥赛一本通- P1152)
  • 【软件开发】C++使用笔记
  • 量子优越性为什么采用玻色采样问题,而不采用N皇后问题呢?
  • 【软件开发】Windows 开发笔记
  • 【技术美术】视差贴图
  • DDD领域驱动设计原理
  • 【技术美术】卡通风格渲染
  • 计算机Java毕设实战-基于springboot+vue的社区资源共享系统设计与实现邻里社交与资源共享【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 详细介绍:Sciter之c++与前端交互(五)
  • 3.框架设计
  • HarmonyOS 5开发从入门到精通(十五):天气应用实战(上)
  • 前端工程化核心面试题与详解
  • HarmonyOS 5开发从入门到精通(十三):待办事项应用实战(上)
  • 【软件开发】如何做出好的项目
  • HarmonyOS 5开发从入门到精通(十四):待办事项应用实战(下)