Unity Shader学习:噪声noise

这篇博客介绍了Unity Shader中Perlin、Value和Simplex噪声的实现,通过现成的代码展示了噪声效果,适合学习Shader的开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity Shader学习:噪声noise

perlin,value,simplex噪声的实现,详细原理可以看乐乐大佬博客,还是较为复杂的,这里直接给出现成代码和效果。

perlin:
perlin
value:
value
simplex:
simplex

shader部分:

Shader "Custom/NoiseTest" {
   
   
	Properties{
   
   
		_MainTex("MainTex",2D) = "white"{
   
   }
	}
	SubShader{
   
   
		Pass{
   
   
			CGPROGRAM
            #pragma vertex vert_img
            #pragma fragment frag
			#include "UnityCG.cginc"

			float2 hash22(float2 p) {
   
   
				p = float2(dot(p,float2(127.1,311.7)),dot(p,float2(269.5,183.3)));
				return -1.0 + 2.0*frac(sin(p)*43758.5453123);
			}
			
			float2 hash21(float2 p) {
   
   
				float h=dot(p,float2(127.1,311.7));
				return -1.0 + 2.0*frac(sin(h)*43758.5453123);
			}

			//perlin
			float perlin_noise(float2 p) {
   
   				
				float2 pi = floor(p);
				float2 pf = p - pi;
				float2 w = pf * pf*(3.0 - 2.0*pf);
				return lerp(lerp(dot(hash22(pi + float2(0.0, 0.0)), pf - float2(0.0, 0.0)),
					dot(hash22(pi + float2(1.0, 0.0)), pf - float2(1.0, 0.0)), w.x),
					lerp(dot(hash22(pi + float2(0.0, 1.0)), pf - float2(0.0, 1.0)),
						dot(hash22(pi + float2(1.0, 1.0)), pf - float2(1.0, 1.0)), w.x), w.y);
			}

			//value
			float value_noise(float2 p) {
   
   
				float2 pi = floor(p);
				float2 pf = p - pi;
				float2 w = pf * pf*(3.0 - 2.0*pf);
				return lerp(lerp(hash21(pi+float2(0.0, 0.0)), hash21(pi + float2(1.0, 0.0)), w.x),
					lerp(hash21(pi + float2(0.0, 1.0)), hash21(pi + float2(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值