关于下面的噪声图,一定要自己动手输出每张图的效果,结合代码分析图的效果。
1.白噪声WhiteNoise
主要是用到 frac函数,此函数主要是 返回小数部分
{小注: frac(10x) 和 frac(100x)的区别}

// 白噪声
float whiteNoise(float2 uv,int seed)
{
float r = frac(sin(dot(uv,float2(seed + 12.9898,seed + 78.233)))*43758.5453);
return r;
}
2.柏林噪声perlinNoise




下面是smoothStep的函数用代码来表达的形式:
重点:t = t * t * t * (t * (t * 6.0f - 15.0f) + 10.0f);
// smooth interpolation for perlin noise
float SmoothLerp(float min, float max, float t)
{
t = t * t * t * (t * (t * 6.0f - 15.0f) + 10.0f);
return min + t * (max - min);
}

“双线性插值”:
(1)在水平方向上插值X1
(1)在水平方向上插值X2
(1)在将X1和X2在竖直方向上插值得到结果
// 当w为0时,返回a,当w为1时返回b,否则返回a与b的插值
float lerp(float a, float b, float w) {
return a + w*(b-a);
}
3.分形布朗运动


下面给出代码:包括白噪声,柏林噪声,用分形布朗运动对柏林噪声进行处理:
高度雾 + 噪声–>流动的雾:

Shader "custom/fog"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {
}
_FogXSpeed("_fogXSpeed",range(0,0.5)) = 0.01
_FogYSpeed("_fogYSpeed",range(0,0.5)) = 0.03
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
Pass
{
Tags {
"RenderType"="Opaque" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float4 scrProj : TEXCOORD1;
float2 uv_depth : TEXCOORD2;
float4 interpolatedRay : TEXCOORD3;
};
sampler2D _MainTex;
half4 _MainTex_TexelSize;
sampler2D _CameraDepthTexture;
float4x4 _FrustumCornersRay;
float4 _FogColor;
float _FogDensity;
float _FogStart;
float _FogEnd;
float _FogXSpeed;
float _FogYSpeed;
// 白噪声
float whiteNoise(int seed, int i, int j)
{
//return frac(sin(dot(float2(i,cos(j)),float2(seed+12.9898,seed + 78.233)))*43758.5453);
return frac(
sin(dot(float2(i, cos(j)),

博客介绍了在Unity中不同噪声图的效果及实现。涉及白噪声,使用frac函数返回小数部分;柏林噪声,通过smoothStep函数及双线性插值实现;还给出分形布朗运动代码。最后提到将高度雾与噪声结合实现流动的雾,强调要动手输出效果并结合代码分析。
最低0.47元/天 解锁文章
2291

被折叠的 条评论
为什么被折叠?



