当前位置:网站首页>Three. JS series (3): porting shaders in shadertoy
Three. JS series (3): porting shaders in shadertoy
2022-07-07 16:29:00 【Touch】
0、 explain
Please read carefully the following posted shadertoy And threejs The difference between shader codes , One method is applicable to all methods .
1、shadertoy Medium shader code
// Found this on GLSL sandbox. I really liked it, changed a few things and made it tileable.
// :)
// by David Hoskins.
// Original water turbulence effect by joltz0r
// Redefine below to see the tiling...
//#define SHOW_TILING
#define TAU 6.28318530718
#define MAX_ITER 5
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
float time = iTime * .5+23.0;
// uv should be the 0-1 uv of texture...
vec2 uv = fragCoord.xy / iResolution.xy;
#ifdef SHOW_TILING
vec2 p = mod(uv*TAU*2.0, TAU)-250.0;
#else
vec2 p = mod(uv*TAU, TAU)-250.0;
#endif
vec2 i = vec2(p);
float c = 1.0;
float inten = .005;
for (int n = 0; n < MAX_ITER; n++)
{
float t = time * (1.0 - (3.5 / float(n+1)));
i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x));
c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
}
c /= float(MAX_ITER);
c = 1.17-pow(c, 1.4);
vec3 colour = vec3(pow(abs(c), 8.0));
colour = clamp(colour + vec3(0.0, 0.35, 0.5), 0.0, 1.0);
#ifdef SHOW_TILING
// Flash tile borders...
vec2 pixel = 2.0 / iResolution.xy;
uv *= 2.0;
float f = floor(mod(iTime*.5, 2.0)); // Flash value.
vec2 first = step(pixel, uv) * f; // Rule out first screen pixels and flash.
uv = step(fract(uv), pixel); // Add one line of pixels per tile.
colour = mix(colour, vec3(1.0, 1.0, 0.0), (uv.x + uv.y) * first.x * first.y); // Yellow line
#endif
fragColor = vec4(colour, 1.0);
}2、threejs Shader code modified in
import * as THREE from "three/build/three.module.js";
const WaterShader = {
uniforms: {
iTime: {
value: 0
},
iResolution: {
value: new THREE.Vector3(1, 1, 1)
},
},
vertexShader: `
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
`,
fragmentShader: `
#include <common>
uniform vec3 iResolution;
uniform float iTime;
// by David Hoskins.
// Original water turbulence effect by joltz0r
// Redefine below to see the tiling...
//#define SHOW_TILING
#define TAU 6.28318530718
#define MAX_ITER 5
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
float time = iTime * .5+23.0;
// uv should be the 0-1 uv of texture...
vec2 uv = fragCoord.xy / iResolution.xy;
#ifdef SHOW_TILING
vec2 p = mod(uv*TAU*2.0, TAU)-250.0;
#else
vec2 p = mod(uv*TAU, TAU)-250.0;
#endif
vec2 i = vec2(p);
float c = 1.0;
float inten = .005;
for (int n = 0; n < MAX_ITER; n++)
{
float t = time * (1.0 - (3.5 / float(n+1)));
i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x));
c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
}
c /= float(MAX_ITER);
c = 1.17-pow(c, 1.4);
vec3 colour = vec3(pow(abs(c), 8.0));
colour = clamp(colour + vec3(0.0, 0.35, 0.5), 0.0, 1.0);
#ifdef SHOW_TILING
// Flash tile borders...
vec2 pixel = 2.0 / iResolution.xy;
uv *= 2.0;
float f = floor(mod(iTime*.5, 2.0)); // Flash value.
vec2 first = step(pixel, uv) * f; // Rule out first screen pixels and flash.
uv = step(fract(uv), pixel); // Add one line of pixels per tile.
colour = mix(colour, vec3(1.0, 1.0, 0.0), (uv.x + uv.y) * first.x * first.y); // Yellow line
#endif
fragColor = vec4(colour, 1.0);
}
varying vec2 vUv;
void main() {
mainImage(gl_FragColor, vUv * iResolution.xy);
}
`
};
export {
WaterShader
};3、 Effect comparison
3.1、shadertoy

3.2、threejs

边栏推荐
- Imitate the choice of enterprise wechat conference room
- three.js打造酷炫下雪效果
- iptables只允许指定ip地址访问指定端口
- Communication mode between application program and MATLAB
- Aerospace Hongtu information won the bid for the database system research and development project of a unit in Urumqi
- Pycharm terminal enables virtual environment
- IP地址和物理地址有什么区别
- Dotween -- ease function
- Shader basic UV operations, translation, rotation, scaling
- The unity vector rotates at a point
猜你喜欢

Enterprise log analysis system elk

统计学习方法——感知机
3000 words speak through HTTP cache

模仿企业微信会议室选择

Shandong old age Expo, 2022 China smart elderly care exhibition, smart elderly care and aging technology exhibition

Statistical learning method -- perceptron

SysOM 案例解析:消失的内存都去哪了 !| 龙蜥技术

Leetcode-231-2的幂

Logback logging framework third-party jar package is available for free

You Yuxi, coming!
随机推荐
[Android -- data storage] use SQLite to store data
The inevitable trend of the intelligent development of ankerui power grid is that microcomputer protection devices are used in power systems
iptables只允许指定ip地址访问指定端口
Asyncio concept and usage
js中复选框checkbox如何判定为被选中
Power of leetcode-231-2
SPI master RX time out interrupt
hellogolang
[excelexport], Excel to Lua, JSON, XML development tool
Continuous creation depends on it!
Laravel changed the session from file saving to database saving
分步式監控平臺zabbix
PHP has its own filtering and escape functions
[flower carving experience] 15 try to build the Arduino development environment of beetle esp32 C3
Description of vs common shortcut keys
Leetcode-136-只出现一次的数(用异或来解答)
Leetcode-136- number that appears only once (solve with XOR)
prometheus api删除某个指定job的所有数据
Performance measure of classification model
修改配置文件后tidb无法启动