Shader图案demo

理解gl_FragColor的基本用法

gl_FragColor是GLSL(OpenGL Shading Language)中的一个内置变量,用于指定片元着色器输出的颜色。其类型为vec4,表示一个四维向量,分别对应RGBA(红、绿、蓝、透明度)四个通道。通过修改gl_FragColor的值,可以控制片元的最终颜色。

通过修改RGB通道实现颜色变化

通过调整gl_FragColor的RGB通道值,可以实现不同的颜色效果。例如vec4(vUv, 1.0, 1.0) 创建了一个四维向量。vUv 是一个二维向量,通常表示顶点着色器传递到片段着色器的纹理坐标,片段着色器将其用于生成输出颜色,vUv 的 x 和 y 分量被用作 gl_FragColor 的红色和绿色通道,而 1.0 分别被用作蓝色和透明度通道。

着色器图案demo

通过数学的方式定义rgb来达到不同的图案,下面分享50张图案demo。

gl_FragColor = vec4(vUv,1.0,1.0);

在这里插入图片描述

gl_FragColor = vec4(vUv,0.0,1.0);

在这里插入图片描述

gl_FragColor = vec4(vUv,0.5,1.0);

在这里插入图片描述

gl_FragColor = vec4(vUv.x,vUv.x,vUv.x,1.0);

在这里插入图片描述

float r = 1.0-vUv.x;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = vUv.y;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = 1.0 - vUv.y;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = mod(vUv.y * 10.0, 1.0);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = mod(vUv.y * 10.0, 1.0);
if (r < 0.5) {
  r = 0.0;
} else {
  r = 1.0;
}
gl_FragColor = vec4(r, r, r, 1.0);
float r = mod(vUv.y * 10.0, 1.0);
r = step(0.5, r);
gl_FragColor = vec4(r, r, r, 1.0);

两种方式都可以,最好避免if语句,下边的更好一些

在这里插入图片描述

 float r = step(0.9, mod(vUv.x * 10.0, 1.0));
 gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

 float r = step(0.9, mod(vUv.y * 10.0, 1.0));
 gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.9, mod(vUv.x * 10.0, 1.0));
r += step(0.9, mod(vUv.y * 10.0, 1.0));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.9, mod(vUv.x * 10.0, 1.0));
r *= step(0.9, mod(vUv.y * 10.0, 1.0));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.4, mod(vUv.x * 10.0, 1.0));
r *= step(0.8, mod(vUv.y * 10.0, 1.0));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float barX = step(0.4, mod(vUv.x * 10.0, 1.0));
barX *= step(0.8, mod(vUv.y * 10.0, 1.0));

float bary = step(0.8, mod(vUv.x * 10.0, 1.0));
bary *= step(0.4, mod(vUv.y * 10.0, 1.0));

float r = barX + bary;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float barX = step(0.4, mod(vUv.x * 10.0, 1.0));
barX *= step(0.8, mod(vUv.y * 10.0 + 0.2, 1.0));

float bary = step(0.8, mod(vUv.x * 10.0 + 0.2, 1.0));
bary *= step(0.4, mod(vUv.y * 10.0, 1.0));

float r = barX + bary;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = abs(vUv.x - 0.5);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = min(abs(vUv.x - 0.5), abs(vUv.y - 0.5));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = max(abs(vUv.x - 0.5), abs(vUv.y - 0.5));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.2, max(abs(vUv.x - 0.5),abs(vUv.y - 0.5)));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = floor(vUv.x * 10.0) / 10.0; //向下取整
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = floor(vUv.x * 10.0) / 10.0; 
r *= floor(vUv.y * 10.0) / 10.0; 
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float random(vec2 st){
  return fract(sin(dot(st.xy,vec2(12.9898,78.233)))* 43758.5453123);
}
float r = random(vUv);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float random(vec2 st){
  return fract(sin(dot(st.xy,vec2(12.9898,78.233)))* 43758.5453123);
}
vec2 gridUv = vec2(
  floor(vUv.x * 10.0) / 10.0,
  floor(vUv.y * 10.0) / 10.0
);
float r = random(gridUv);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

vec2 gridUv = vec2(
  floor(vUv.x * 10.0) / 10.0,
  floor((vUv.y +vUv.x) * 10.0) / 10.0
);
float r = random(gridUv);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = length(vUv);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = length(vUv - 0.5);//distance(vUv,vec2(0.5,0.5))效果一样
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = 1.0 -distance(vUv, vec2(0.5,0.5));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = 0.015 / distance(vUv, vec2(0.5,0.5)) + 0.2;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

vec2 lightUv = vec2(
  vUv.x  * 0.1 + 0.45,
  vUv.y
);
float r = 0.015 / distance(lightUv, vec2(0.5,0.5));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

vec2 lightUvX = vec2(vUv.x * 0.1 + 0.45,vUv.y * 0.5 + 0.25);
float lightX = 0.015 / distance(lightUvX, vec2(0.5,0.5));

vec2 lightUvY = vec2(vUv.y * 0.1 + 0.45,vUv.x * 0.5 + 0.25);
float lightY = 0.015 / distance(lightUvY, vec2(0.5,0.5));

float r = lightX * lightY + 0.03;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

vec2 rotate(vec2 uv, float rotation, vec2 mid){//uv为需要旋转的坐标,rotation为旋转角度,mid为旋转中心
  return vec2(
    cos(rotation) * (uv.x - mid.x) + sin(rotation) * (uv.y - mid.y) + mid.x,
    cos(rotation) * (uv.y - mid.y) - sin(rotation) * (uv.x - mid.x) + mid.y
  );
}
vec2 rotateUv = rotate(vUv, 0.75, vec2(0.5,0.5));

vec2 lightUvX = vec2(rotateUv.x * 0.1 + 0.45,rotateUv.y * 0.5 + 0.25);
float lightX = 0.015 / distance(lightUvX, vec2(0.5,0.5));

vec2 lightUvY = vec2(rotateUv.y * 0.1 + 0.45,rotateUv.x * 0.5 + 0.25);  
float lightY = 0.015 / distance(lightUvY, vec2(0.5,0.5));

float r = lightX * lightY + 0.03;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.2, distance(vUv, vec2(0.5,0.5)));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = abs(distance(vUv, vec2(0.5,0.5)) - 0.25);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.01, abs(distance(vUv, vec2(0.5,0.5)) - 0.25));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = 1.0 - step(0.01, abs(distance(vUv, vec2(0.5,0.5)) - 0.25));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

vec2 waveUv = vec2(
  vUv.x,
  vUv.y + sin(vUv.x * 30.0) * 0.1
  );
float r = 1.0 - step(0.01, abs(distance(waveUv, vec2(0.5,0.5)) - 0.25));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

vec2 waveUv = vec2(
  vUv.x + sin(vUv.y * 30.0) * 0.1,
  vUv.y + sin(vUv.x * 30.0) * 0.1
  );
float r = 1.0 - step(0.01, abs(distance(waveUv, vec2(0.5,0.5)) - 0.25));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

vec2 waveUv = vec2(
  vUv.x + sin(vUv.y * 100.0) * 0.1,
  vUv.y + sin(vUv.x * 100.0) * 0.1
  );
float r = 1.0 - step(0.01, abs(distance(waveUv, vec2(0.5,0.5)) - 0.25));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float angle = atan(vUv.y, vUv.x );
float r = angle;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float angle = atan(vUv.y - 0.5, vUv.x - 0.5);
float r = angle;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float angle = atan(vUv.y - 0.5, vUv.x - 0.5);
angle = angle / 3.1415926535897932384626433832795 * 2.0;
angle += 0.5;
float r = angle;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float angle = atan(vUv.x - 0.5, vUv.y - 0.5);
angle = angle / 3.1415926535897932384626433832795 * 2.0;
angle += 0.5;
angle *=10.0;
angle = mod(angle, 1.0);
float r = angle;
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

angle = atan(vUv.x - 0.5, vUv.y - 0.5);
angle = angle / 3.1415926535897932384626433832795 * 2.0;
angle += 0.5;
float r = sin(angle * 50.0 );
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float angle = atan(vUv.x - 0.5, vUv.y - 0.5);
angle = angle / 3.1415926535897932384626433832795 * 2.0;
angle += 0.5;
float sinusiod = sin(angle * 40.0 );

float radius = 0.25 + sinusiod * 0.02;
float r = 1.0 - step(0.01, abs(distance(vUv, vec2(0.5)) - radius));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

vec2 fade(vec2 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}

vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}
//柏林噪声
float cnoise(vec2 P){
  vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);
  vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);
  Pi = mod(Pi, 289.0); // To avoid truncation effects in permutation
  vec4 ix = Pi.xzxz;
  vec4 iy = Pi.yyww;
  vec4 fx = Pf.xzxz;
  vec4 fy = Pf.yyww;
  vec4 i = permute(permute(ix) + iy);
  vec4 gx = 2.0 * fract(i * 0.0243902439) - 1.0; // 1/41 = 0.024...
  vec4 gy = abs(gx) - 0.5;
  vec4 tx = floor(gx + 0.5);
  gx = gx - tx;
  vec2 g00 = vec2(gx.x,gy.x);
  vec2 g10 = vec2(gx.y,gy.y);
  vec2 g01 = vec2(gx.z,gy.z);
  vec2 g11 = vec2(gx.w,gy.w);
  vec4 norm = 1.79284291400159 - 0.85373472095314 * 
    vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11));
  g00 *= norm.x;
  g01 *= norm.y;
  g10 *= norm.z;
  g11 *= norm.w;
  float n00 = dot(g00, vec2(fx.x, fy.x));
  float n10 = dot(g10, vec2(fx.y, fy.y));
  float n01 = dot(g01, vec2(fx.z, fy.z));
  float n11 = dot(g11, vec2(fx.w, fy.w));
  vec2 fade_xy = fade(Pf.xy);
  vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);
  float n_xy = mix(n_x.x, n_x.y, fade_xy.y);
  return 2.3 * n_xy;
}
float r = cnoise(vUv * 10.0);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.0, cnoise(vUv * 10.0));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = 1.0 - abs(cnoise(vUv * 10.0));
 gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = sin(cnoise(vUv * 10.0) * 20.0);
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.9,sin(cnoise(vUv * 10.0) * 20.0));
gl_FragColor = vec4(r, r, r, 1.0);

在这里插入图片描述

float r = step(0.9,sin(cnoise(vUv * 10.0) * 20.0));

vec3 blackColor = vec3(0.0, 0.0, 0.0);
vec3 uvColor = vec3(vUv.x, vUv.y, 1.0);
vec3 mixedColor = mix(blackColor, uvColor, r);
gl_FragColor = vec4(mixedColor, 1.0);

在这里插入图片描述

### 回答1: Unity科技空间线条背景Demo是一个具有创意和未来感的技术演示,它是由Unity引擎开发的一款游戏/应用程序演示。这个演示的主要特点是使用了动态的线条背景,它能够营造一种未来感和科技感。用户可以通过旋转和缩放屏幕来改变背景的效果。在演示中,我们可以看到各种几何图形和抽象的线条,这些形状会随着用户交互而随机生成和演变。除此之外,演示中还有一些物理效果和粒子效果,使整个场景更加生动和有趣。 Unity科技空间线条背景Demo不仅是一款有创意和吸引人的科技演示,也是一种技术实现方式的展示。它展示了如何使用Unity引擎的2D和3D渲染技术,以及动画和物理引擎的效果。在开发过程中,开发者们需要使用Unity编辑器和C#脚本语言来编写代码和设计游戏场景。这些技术对于游戏和应用程序的开发都非常重要,因为它们可以使开发人员更轻松地实现想法,并提供更好的用户体验。 总的来说,Unity科技空间线条背景Demo是一款兼具兴趣和技术的科技演示程序,它能够吸引和激发用户的好奇心,同时也展示了一些现代网络技术的基础知识。无论是在开发科技演示还是游戏应用程序时,这些技术都对开发者有很大的作用。 ### 回答2: Unity科技空间线条背景demo是一款非常炫酷的背景效果展示工具。它的核心技术是基于Unity3D游戏引擎开发的。该demo通过利用Unity引擎的粒子系统特效、音效、动态光影等多种技术,创造出一种充满科技感和未来感的虚拟空间。 在这个Unity科技空间线条背景demo中,我们可以看到大量的五彩缤纷的线条,在黑暗的背景中飞舞着,好似宇宙空间中的星河图案。而这些光线的运动、颜色、形状等都可以通过Unity引擎的参数来进行调节,用户可以根据自己的需求进行自定义设置,生成独一无二的线条背景效果。 除了酷炫的线条效果之外,这个Unity科技空间线条背景demo还具有强大的交互性。用户可以通过键盘、鼠标等设备来操控场景中的效果,比如进行旋转、放大、缩小、切换等操作。同时,在这个虚拟空间中,还会配以震撼的音效,给用户带来一种身临其境的感觉。 总的来说,这个Unity科技空间线条背景demo是一款非常棒的展示工具,不仅可以为用户带来炫酷的视觉效果,还具有强大的交互性和个性化定制功能,能够满足各种不同需求的用户使用。 ### 回答3: Unity科技空间线条背景demo是一个基于Unity引擎开发的演示项目,可以展示三维空间中的线条背景效果。该demo主要使用了Unity引擎中的Shader编程技术和粒子系统等功能。 该demo的场景设置在一个宇宙空间中,其中包括了一个璀璨的星空和一些随机生成的星球。在这个场景中,用户可以看到一些具有流动感的线条背景,这些线条不仅可以作为一种注目的视觉效果,同时也可以配合场景中的星球运动和星空背景,使整个场景更加生动。 这个demo的实现过程中,Shader编程起到了很重要的作用。通过调整Shader中参数的值,可以实现线条背景的颜色、密度和流动速度等的调节。同时,该项目还运用了粒子系统使得整个场景更具有动态感。 总的来说,Unity科技空间线条背景demo是一个优秀的演示项目,可以用来展示Unity引擎的应用和Shader编程技术的应用。同时,它也可以为游戏开发者提供一些有趣的灵感和想法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小牛码495

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值