当前位置:网站首页>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
边栏推荐
- PyTorch 中的乘法:mul()、multiply()、matmul()、mm()、mv()、dot()
- hellogolang
- thinkphp3.2.3中设置路由,优化url
- 1亿单身男女“在线相亲”,撑起130亿IPO
- Odoo integrated plausible embedded code monitoring platform
- Use moviepy Editor clips videos and intercepts video clips in batches
- Strengthen real-time data management, and the British software helps the security construction of the medical insurance platform
- Shader_ Animation sequence frame
- php 自带过滤和转义函数
- 模仿企业微信会议室选择
猜你喜欢
TiDB For PostgreSQL和YugabyteDB在Sysbench上的性能对比
谈谈 SAP iRPA Studio 创建的本地项目的云端部署问题
Vs tool word highlight with margin
Xcode Revoke certificate
95.(cesium篇)cesium动态单体化-3D建筑物(楼栋)
Unity drawing plug-in = = [support the update of the original atlas]
分步式監控平臺zabbix
【Vulnhub靶场】THALES:1
Eye of depth (VII) -- Elementary Transformation of matrix (attachment: explanation of some mathematical models)
Odoo集成Plausible埋码监控平台
随机推荐
markdown公式编辑教程
spark调优(三):持久化减少二次查询
pycharm 终端部启用虚拟环境
23. 合并K个升序链表-c语言
Unity drawing plug-in = = [support the update of the original atlas]
47_Opencv中的轮廓查找 cv::findContours()
Good news! Kelan sundb database and Hongshu technology privacy data protection management software complete compatibility adaptation
全网“追杀”钟薛高
Dotween -- ease function
PHP has its own filtering and escape functions
JS modularization
Pycharm terminal enables virtual environment
The team of East China Normal University proposed the systematic molecular implementation of convolutional neural network with DNA regulation circuit
What are compiled languages and interpreted languages?
目标跟踪常见训练数据集格式
安科瑞电网智能化发展的必然趋势电力系统采用微机保护装置是
hellogolang
Set the route and optimize the URL in thinkphp3.2.3
laravel 是怎么做到运行 composer dump-autoload 不清空 classmap 映射关系的呢?
记一次项目的迁移过程