Q96:PT(3.1):基本的基于噪声的纹理(Basic Noise-Based Textures)

198 篇文章 12 订阅
195 篇文章 27 订阅

标题中的“PT”表示:Procedural Texture(过程纹理)。表示该章节属于“过程纹理”的内容。
当前章节在“过程纹理”内容中的位置:
过程纹理(0)——概述
过程纹理(1)——方格纹理(1)——3D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(1)——平面2D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(2)——球面2D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(3)——圆柱2D方格纹理
过程纹理(2)——纹理的仿射变换
过程纹理(3)——基于噪声的纹理(0)——概述
过程纹理(3)——基于噪声的纹理(1)——基本的基于噪声的纹理(Basic Noise-Based Textures)

0,定义“晶格噪声”对应的类LatticeNoise

先看一下LatticeNoise的继承关系图:
这里写图片描述

1,定义及初始化“噪声数组”

这里写图片描述

2,实现hash(打乱)算法

这里写图片描述

3,插值方式

我们接下来会用到的插值方式是:线性插值、三次插值。
插值的具体分析,在此不表(或者说,留坑在此,后续在填吧)。这里直接贴出相关代码。

对晶格中各个顶点的“噪声数据”进行插值运算得到撞击点P对应的噪声值(即所谓的“噪声函数”,由于插值的方式不同,可能得到两种“噪声函数”:Linear Noise、Cubic Noise)

3.1 线性插值对应LinearNoise

这里写图片描述

3.2 三次插值对应CubicNoise

这里写图片描述
由于“三次插值”的效果比“线性插值”的好,所以后续我们使用的是“三次插值”。

4,对噪声函数值“求和”

前面我们已经提到,我们会用到三种求和方式:Fractal Sum、Turbulence、Fractal Brownian Motion。接下来,我们依次进行说明。

4.1 Fractal Sum

求和公式:
这里写图片描述

求和过程中整体噪声函数图形变化如下图:
这里写图片描述

对应C ++代码:

这里写图片描述

4.2 Turbulence

求和公式:
这里写图片描述

对应C++代码:

这里写图片描述

4.3 Fractal Brownian Motion

求和公式:
这里写图片描述
发现:若gain=0.5、lacunarity=2的fBm其实就是Fractal Sum。

对应C++代码:

这里写图片描述

5,Basic Noise Texture

接下来定义两种基本的基于噪声的纹理(分别对应前面的“求和”方式,fractal sum是Fractal Brownian Motion的一种特殊形式):TurbulenceTexture、FBmTexture。

5.1 TurbulenceTexture

这里写图片描述

5.2 FbmTexture

这里写图片描述

6,测试图形

6.1 测试代码

这里写图片描述
这里写图片描述
这里写图片描述

6.2 输出图形

Turbulence,求和项数2,求和幅值0.75,求和频率2
这里写图片描述

Turbulence,求和项数8,求和幅值0.75,求和频率2
这里写图片描述

FBm,求和项数2,求和幅值0.5,求和频率2(即Fractal Sum)
这里写图片描述

FBm,求和项数8,求和幅值0.5,求和频率2(即Fractal Sum)
这里写图片描述

FBm,求和项数2,求和幅值0.25,求和频率2
这里写图片描述

FBm,求和项数2,求和幅值0.75,求和频率2
这里写图片描述

FBm,求和项数2,求和幅值0.75,求和频率8
这里写图片描述

FBm,求和项数2,求和幅值0.25,求和频率8
这里写图片描述

FBm,求和项数8,求和幅值0.25,求和频率8
这里写图片描述

FBm,求和项数8,求和幅值0.75,求和频率8
这里写图片描述

FBm,求和项数8,求和幅值0.75,求和频率2
这里写图片描述

FBm,求和项数8,求和幅值0.25,求和频率2
这里写图片描述

7,其他说明

完整代码下载路径: http://download.csdn.net/detail/libing_zeng/9798075

Referrance:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值