农村建设集团有限公司网站首页,长沙互联网企业,做网站怎么办营业执照,餐馆效果图网站shadertoy上有各种神奇的效果#xff0c;以我的见识根本想象不到这些是怎么弄出来的。
不过不会做至少可以先会用。
这篇文章抓取一个shadertoy的示例以制作一个测试效果。 参考这篇shadertoy#xff0c;使用自定义节点装填hlsl的noise代码
Shader - Shadertoy BETA 首先使…shadertoy上有各种神奇的效果以我的见识根本想象不到这些是怎么弄出来的。
不过不会做至少可以先会用。
这篇文章抓取一个shadertoy的示例以制作一个测试效果。 参考这篇shadertoy使用自定义节点装填hlsl的noise代码
Shader - Shadertoy BETA 首先使用世界xz坐标作为uv添加tilingoffset调整。 表现为这样子 具体做法是创建hlsl文件写入计算方法shadertoy上的写法和unity hlsl中有些区别按位置诸葛替换掉即可。
float4 mod289(float4 x)
{return x - floor(x / 289.0) * 289.0;
}float4 permute(float4 x)
{return mod289((x * 34.0 1.0) * x);
}float4 snoise(float3 v)
{const float2 C float2(1.0 / 6.0, 1.0 / 3.0);// First cornerfloat3 i floor(v dot(v, C.yyy));float3 x0 v - i dot(i, C.xxx);// Other cornersfloat3 g step(x0.yzx, x0.xyz);float3 l 1.0 - g;float3 i1 min(g.xyz, l.zxy);float3 i2 max(g.xyz, l.zxy);float3 x1 x0 - i1 C.x;float3 x2 x0 - i2 C.y;float3 x3 x0 - 0.5;// Permutationsfloat4 p permute(permute(permute(i.z float4(0.0, i1.z, i2.z, 1.0)) i.y float4(0.0, i1.y, i2.y, 1.0)) i.x float4(0.0, i1.x, i2.x, 1.0));// Gradients: 7x7 points over a square, mapped onto an octahedron.// The ring size 17*17 289 is close to a multiple of 49 (49*6 294)float4 j p - 49.0 * floor(p / 49.0); // mod(p,7*7)float4 x_ floor(j / 7.0);float4 y_ floor(j - 7.0 * x_); float4 x (x_ * 2.0 0.5) / 7.0 - 1.0;float4 y (y_ * 2.0 0.5) / 7.0 - 1.0;float4 h 1.0 - abs(x) - abs(y);float4 b0 float4(x.xy, y.xy);float4 b1 float4(x.zw, y.zw);float4 s0 floor(b0) * 2.0 1.0;float4 s1 floor(b1) * 2.0 1.0;float4 sh -step(h, 0);float4 a0 b0.xzyw s0.xzyw * sh.xxyy;float4 a1 b1.xzyw s1.xzyw * sh.zzww;float3 g0 float3(a0.xy, h.x);float3 g1 float3(a0.zw, h.y);float3 g2 float3(a1.xy, h.z);float3 g3 float3(a1.zw, h.w);// Compute noise and gradient at Pfloat4 m max(0.6 - float4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);float4 m2 m * m;float4 m3 m2 * m;float4 m4 m2 * m2;float3 grad -6.0 * m3.x * x0 * dot(x0, g0) m4.x * g0 -6.0 * m3.y * x1 * dot(x1, g1) m4.y * g1 -6.0 * m3.z * x2 * dot(x2, g2) m4.z * g2 -6.0 * m3.w * x3 * dot(x3, g3) m4.w * g3;float4 px float4(dot(x0, g0), dot(x1, g1), dot(x2, g2), dot(x3, g3));return 42.0 * float4(grad.xyz, dot(m4, px));
}// Based on: https://www.shadertoy.com/view/3d3yRj
// See also: KdotJPGs https://www.shadertoy.com/view/wlc3zrvoid water_caustics_float(float3 posIn, out float noiseOut) {float4 n snoise( posIn );posIn - 0.07*n.xyz;posIn * 1.62;n snoise( posIn );posIn - 0.07*n.xyz;n snoise( posIn );posIn - 0.07*n.xyz;n snoise( posIn );noiseOut exp(n.w*3 - 1.5f);
} 但是注意想要在unity的自定义节点中输出必须要在调用方法中使用out关键字有几个输出就添加几个out并且方法名最后添加_float后缀然后在自定义节点中引用此hlsl文件设置传入值和输出值。 直接输出到颜色上然后抄一下网站中xz使用位置y使用时间。 这种效果就来了。 再搞一搞颜色这里用了浅蓝和灰色代表光照强和光照弱的位置