1:效果如上图,代码如下:
Shader "Unlit/fogshader" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100
Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog
#define vec2 float2 #define vec3 float3 #define vec4 float4 #define mix lerp #define fract frac #define iTime _Time.y #define iResolution _ScreenParams
#include "UnityCG.cginc"
struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; };
struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; };
sampler2D _MainTex; float4 _MainTex_ST;
float rand(in vec2 sd) {
return fract(sin(dot(sd.xy, vec2(9.128, 3.256) * 293699.963))); }
float n2D(in vec2 sd) {
vec2 iComp = floor(sd); //integer and fractional components vec2 fComp = fract(sd);
float a = rand(iComp + vec2(0.0, 0.0)); // float b = rand(iComp + vec2(1.0, 0.0)); // interpolation points float c = rand(iComp + vec2(0.0, 1.0)); // (4 corners) float d = rand(iComp + vec2(1.0, 1.0)); //
vec2 fac = smoothstep(0.0, 1.0, fComp); //interpolation factor
//Quad corners interpolation return mix(a, b, fac.x) +
(c - a) * fac.y * (1.0 - fac.x) +
(d - b) * fac.x * fac.y; }
//fractal Brownian Motion and Motion Pattern
#define OCTAVES 6
float fBM(in vec2 sd) {
//init values float val = 0.0; float freq = 1.0; float amp = 0.5;
float lacunarity = 2.0; float gain = 0.5;
//Octaves iterations for (int i = 0; i < OCTAVES; i++) {
val += amp * n2D(sd * freq);
freq *= lacunarity; amp *= gain; }
return val; }
float mp(in vec2 p) {
float qx = fBM(p + vec2(0.0, 0.0)); float qy = fBM(p + vec2(6.8, 2.4));
vec2 q = vec2(qx, qy);
float tm = 0.008 * iTime * 1.3; //time factor
float rx = fBM(p + 1.1 * q + vec2(9.5, 9.3) * tm); float ry = fBM(p + 1.5 * q + vec2(7.2, 1.5) * -(tm + 0.002));
vec2 r = vec2(rx, ry);
return fBM(p + (2.0 * r)); }
//========================================================================
//main()
void mainImage(out vec4 fragColor, in vec2 fragCoord) { //Normalized pixel coordinates (from 0 to 1) vec2 uv = fragCoord;// / iResolution.xy;
vec3 col = vec3(0.0,0.0,0.0); //col += fBM(uv*3.0);
float wFac = mp(uv*3.0); //warping factor
col = mix(vec3(0.101961, 0.29608, 0.26567), vec3(0.66667, 0.45667, 0.89839), clamp(pow(wFac, 2.5), 0.0, 1.0)); col = mix(col, vec3(0.44467, 0.00567, 0.19809), clamp(pow(wFac, 0.4), 0.0, 1.0)); col = mix(col, vec3(0.52467, 0.42567, 0.01809), clamp(wFac * wFac, 0.0, 1.0)); col = mix(col, vec3(0.84467, 0.32567, 0.13809), clamp(smoothstep(0.0, 1.0, wFac), 0.0, 1.0));
// Output to screen fragColor = vec4(col, 1.0); }
v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; }
fixed4 frag (v2f i) : SV_Target { // sample the texture //fixed4 col = tex2D(_MainTex, i.uv); vec4 col = vec4(0,0,0,0); mainImage(col, i.uv); return col; } ENDCG } } }
本人qq:344810449,欢迎探讨研究。
有unity,shader,小程序,软件开发,游戏制作等需求也可以联系本人,非常乐于助人。
如果觉得还不错给博主来个小惊喜,纯属自愿,不强求: