Director of Technology for We The Collective.
Originally from Sydney, Australia, I moved to Vancouver in 2011.
Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by Liam Egan
The Elephant at the UKIPO Whiskey Jar
In a recent UKIPO opposition decision, Shiseido Americas Corporation ("the Applicant") successfully defended oppositions brought by Socium Distribution Limited ("the Opponent") to four 3D trade mark applications for its skincare packaging, allowing all four applications to proceed to registration. The decision is noteworthy as it considers how the absolute grounds apply to 3D marks combining a container shape with words, a figurative element and colours.
Nowhere To Stand: The CJEU Clarifies When Earlier Rights Must Still Exist In EUIPO Proceedings
Lewis Silkin are most popular: within Cannabis & Hemp topic(s) in United Kingdom The European Court of Justice ("ECJ") has issued an important judgment in EUIPO v Nowhere (Case C-337/22 P), confirming that earlier rights relied upon in trade mark opposition and invalidity proceedings must continue to exist and produce legal effects at the time the EUIPO adopts its decision.
The CJEU Clarifies When Earlier Rights Must Still Exist in EUIPO Proceedings
The European Court of Justice ("ECJ") has issued an important judgment in EUIPO v Nowhere (Case C-337/22 P), confirming that earlier rights relied upon in trade mark opposition and invalidity proceedings must continue to exist and produce legal effects at the time the EUIPO adopts its decision.
UKIPO Delivers a Harsh Lesson on Missed Deadlines.
In a recent UKIPO opposition decision involving a trade mark application by the manufacturers of the SKE CRYSTAL BAR vape, the UKIPO has delivered a stark reminder of the unforgiving nature of statutory deadlines and notifying an Applicant of an intention to oppose. As mentioned in last week's post, we have prepared a full case summary which we are pleased to publish. Background: Shenzhen SKE Technology Co., Ltd.
A Late Filing Sends UK Trade Mark Application Up In Smoke: UKIPO Delivers A Harsh Lesson On Missed Deadlines
LS Lewis Silkin More We have two things at our core: people – both ours and yours - and a focus on creativity, technology and innovation. Whether you are a fast growth start up or a large multinational business, we help you realise the potential in your people and navigate your strategic HR and legal issues, both nationally and internationally.
UKIPO Delivers a Harsh Lesson on Missed Deadlines.
In a recent UKIPO opposition decision involving a trade mark application by the manufacturers of the SKE CRYSTAL BAR vape, the UKIPO has delivered a stark reminder of the unforgiving nature of statutory deadlines and notifying an Applicant of an intention to oppose. Full case summary to follow.
DataRobot and Labelbox: Model-Assisted Labeling
Thanks to DataRobot, leveraging vast amounts of data to generate AI-powered business insights and outcomes is no longer the stuff of science fiction – by pairing our AI Cloud platform with your enterprise data stack, it’s now possible for business stakeholders to make decisions based on the outputs of AutoML and AutoTS, all while models are centrally monitored and governed using MLOps.
8 CSS & JavaScript Snippets for Creating Reflection & Refraction Effects
The simple act of light reflecting off of or refracting through a surface can produce stunning visuals. We see it every day in the physical world. It might be the way the sun peeks through your office window or light hitting a mirror at just the right angle. They’re like little science experiments that take place right in front of us. Thanks to the latest CSS and JavaScript techniques, these effects are also dazzling web users.
8 CSS & JavaScript Snippets for Creating Incredible Lighting & Shading Effects
When it comes to creating a great piece of web-based art, the details are what stand out. Lighting and shading effects are prime examples. They can turn a flat, 2D work into an immersive 3D experience. For quite a while, the ability to add realistic light and shade to an illustration or animation seemed like the holy grail. The technology wasn’t always there. Thus, developers had to find workarounds to approximate the effect.
Is Jalen Hurts a viable successor for Ben Roethlisberger ?
Updated: February 22, 2020 By Liam Egan SteelerNation.com The Pittsburgh Steelers are in obvious need of a replacement quarterback for when Ben Roethlisberger hangs things up. Many fans are calling for that guy to be Jalen Hurts. The Steelers lack of draft capital forces them into a tough position when it comes to finding Ben’s successor, that’s why so many fans bring up Hurts’ name as a potential mid round option.
How to Build an Underwater-Style Navigation Using PixiJS
A tutorial on how to create a visually distinct and accessible WebGL menu that builds from any given HTML navigation. From our monthly sponsor: Ship customer-facing metrics fast with Keen.io. Collect, store, query, & display stunning analytics. This demo shows one way to make a navigation that is visually distinct, usable and accessible. Using the provided code, you can create all sorts of variations on this theme. I encourage you to try your hand at modifying it in interesting ways.
Codepen Challenge: Infinite Maze
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; vec2 hash22(vec2 uv) { return texture2D(u_noise, uv/255.).xy; }...
WTC Grid bookmarklet
About External Resources You can apply a script from anywhere on the web to your Pen. Just put a URL to it here and we'll add it, in the order you have them, before the JavaScript in the Pen itself. If the script you link to has the file extension of a preprocessor, we'll attempt to process it before applying. You can also link to another Pen here, and we'll pull the JavaScript from that Pen and include it.
Infinite Wieners
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; vec2 hash22(vec2 uv) { float n = sin(dot(uv, vec2(153, 27))); return...
Naughts and Crosses 2
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform float u_xscale; const float AA = .02; const float blur = .2;...
Shape intersection
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShader" type="x-shader/x-vertex"> void main() { gl_Position = vec4( position, 1.0 ); } </script> <script id="fragmentShader" type="x-shader/x-fragment"> uniform vec2 u_resolution; uniform float u_time; uniform vec2 u_mouse; uniform sampler2D u_env; #define PI 3.14159265359 #define TAU 6.28318530718 const int octaves = 2; const float seed = 43758.5453123; const float seed2 = 73156.8473192;...
Infinite Mandala
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform float u_xscale; vec2 diagonalhash2(vec2 p) { return...
Crystal Ball 5
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShader" type="x-shader/x-vertex"> void main() { gl_Position = vec4( position, 1.0 ); } </script> <script id="fragmentShader" type="x-shader/x-fragment"> uniform vec2 u_resolution; uniform float u_time; uniform vec2 u_mouse; uniform sampler2D u_noise; uniform sampler2D u_env; #define PI 3.141592653589793 #define TAU 6.283185307179586 const int octaves = 2; const float seed = 43758.5453123;...
Simplified Edge Voronoi
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform float u_xscale; vec2 diagonalhash2(vec2 p) { return...
Naughts and Crosses
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform float u_xscale; const float AA = .02; const float blur = .2;...
Exploding Universe
/* Most of the stuff in here is just bootstrapping. Essentially it's just setting ThreeJS up so that it renders a flat surface upon which to draw the shader. The only thing to see here really is the uniforms sent to the shader. Apart from that all of the magic happens in the HTML view under the fragment shader.
GLSL: Refracted rays
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; precision highp int; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; // movement variables vec3 movement = vec3(.0);...
Looping simplex noise
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform float u_xscale; // Simplex 4D Noise // by Ian McEwan, Ashima...
WebGL 2.0
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex">#version 300 es in vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment">#version 300 es precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; out vec4 fragColour; #define PI...
Thank You - 1000 - Voronoi
console.clear(); const twodWebGL = new WTCGL( document.querySelector('canvas#webgl'), document.querySelector('script#vertexShader').textContent, document.querySelector('script#fragmentShader').textContent, window.innerWidth, window.innerHeight, 2 ); twodWebGL.startTime = -1000 + Math.random(); window.addEventListener('resize', () => { twodWebGL.resize(window.innerWidth, window.innerHeight); }); // track mouse move let mousepos = [0,0]; const u_mousepos = twodWebGL.addUniform('mouse',...
Drawing lines between arbitrary points
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShader" type="x-shader/x-vertex"> void main() { gl_Position = vec4( position, 1.0 ); } </script> <script id="fragmentShader" type="x-shader/x-fragment"> uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform bool isGrid; uniform bool u_mouse_moved; #define PI 3.141592653589793 #define TAU 6.283185307179586 vec2 hash2(vec2 p) { vec2 o =...
CodePen Challenge - Polygon Surface
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform sampler2D u_environment; vec2 movement; float scale = 5.;...
WTC Brand Particles
let loader = PIXI.loader; let sprites = []; let field; let config = { debug: false, particals: 100, animating: false, friction: 50, minDistance: 150, forceMultiplier: 250, degenerate: true }; let container = document.createElement('div'); document.body.appendChild(container); let init = function() { initiated = true; field = new Particlefield(sprites, container); field.behaviour = ParticalFieldBehaviour.SPAWNING; // field.addGravitywell(); window.addEventListener('resize', function() {...
Blob study 3
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; precision highp int; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; // movement variables vec3 movement = vec3(.0);...
Blob study
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; precision highp int; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; // movement variables vec3 movement = vec3(.0);...
Codepen Challenge - Triangle Space
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; precision highp int; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; // movement variables vec3 movement = vec3(.0);...
Forever more 2
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; precision highp int; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; // movement variables vec3 movement = vec3(.0);...
Coalesce 16 - Sol 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShaderParticle" type="x-shader/x-vertex"> uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; attribute vec2 reference; uniform sampler2D texturePosition; uniform bool u_clicked; varying float v_op; varying vec2 v_ref; float random(vec2 st) { return fract(sin(dot(st, vec2(12.9898,78.233)))* 43758.5453123); } vec2 hash2(vec2 p) { vec2 o =...
Voxeltex
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; precision highp int; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; // movement variables vec3 movement = vec3(.0);...
Codepen Challenge - Circle Study
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; precision highp int; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; // movement variables vec3 movement = vec3(.0);...
A Pen by Liam Egan
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; // movement variables vec3 movement = vec3(.0); const float clipNear...
Coalesce 17
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShaderParticle" type="x-shader/x-vertex"> uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; attribute vec2 reference; uniform sampler2D texturePosition; uniform bool u_clicked; varying float v_op; varying vec2 v_ref; float random(vec2 st) { return fract(sin(dot(st, vec2(12.9898,78.233)))* 43758.5453123); } vec2 hash2(vec2 p) { vec2 o =...
Codepen Challenge - Perfect Purples
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform sampler2D u_symbol; uniform float u_xscale; #define PI...
Codepen Challenge - POP
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform float u_xscale; vec2 diagonalhash2(vec2 p) { return...
Cloud Journey
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShader" type="x-shader/x-vertex"> void main() { gl_Position = vec4( position, 1.0 ); } </script> <script id="fragmentShader" type="x-shader/x-fragment"> uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; vec3 hash33(vec3 p){ return texture2D(u_noise, p.xy * p.z * 256.).rgb; } float pn( in vec3 p ) { vec3 i = floor(p); p -= i; p *= p*(3.
Ashfall
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShader" type="x-shader/x-vertex"> void main() { gl_Position = vec4( position, 1.0 ); } </script> <script id="fragmentShader" type="x-shader/x-fragment"> uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; #define PI 3.141592653589793 #define TAU 6.
Codepen Challenge - Primary Video Filter
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform sampler2D u_video; uniform float u_xscale; vec2...
Codepen Challenge - Primaries
<canvas id="webgl" width="500" height="1758"></canvas> <script id="vertexShader" type="x-shader/x-vertex"> attribute vec4 a_position; uniform mat4 u_modelViewMatrix; uniform mat4 u_projectionMatrix; void main() { gl_Position = a_position; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> precision highp float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform sampler2D u_noise; uniform float u_xscale; vec2 hash2(vec2 p) { return...
Thank You - 1000 - M
const texturesize = 1024; const particles = texturesize * texturesize; let container; let camera, scene, renderer, controls; let cloud_obj; let uniforms; let gpuComputationRenderer, dataPos, dataVel, textureArraySize = texturesize*texturesize*4.; let textureVelocity, texturePosition; const particleVert = document.getElementById( 'vertexShaderParticle' ).textContent; const particleFrag = document.getElementById( 'fragmentShaderParticle' ).textContent; const velocityFrag =...
Coalesce 12 - Phosphorescence 6
const texturesize = 1024; const particles = texturesize * texturesize; let container; let camera, scene, renderer, controls; let cloud_obj; let uniforms; let gpuComputationRenderer, dataPos, dataVel, textureArraySize = texturesize*texturesize*4.; let textureVelocity, texturePosition; const particleVert = document.getElementById( 'vertexShaderParticle' ).textContent; const particleFrag = document.getElementById( 'fragmentShaderParticle' ).textContent; const velocityFrag =...
Tryptic
class Points { static pointNum = 16; static instance = null; constructor() { if(Points.instance){ return Points.instance; } Points.instance = this; this.points = []; for(let i = 0; i < Points.pointNum; i++) { this.points.push({ y: 0, amplitude: Math.random() * (this.maxAmplitude - this.minAmplitude) + this.minAmplitude, speed: Math.random() * this.speedMultiplier + .5, offset: Math.random() * this.offsetMultiplier }); } this.run = this.run.bind(this); } getPoint(i) { return this.points[i]; }...
Ripples in Time 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShader" type="x-shader/x-vertex"> void main() { gl_Position = vec4( position, 1.0 ); } </script> <script id="fragmentShader" type="x-shader/x-fragment"> uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform vec3 u_colours[ 5 ]; const float multiplier = 1.2; const float zoomSpeed = 4.; const int layers = 12; const int octaves = 1; const float seed = 43758.5453123;...
#codevember - 24 - Pawprinter
// This keeps track of the actual mouse position let mouse = new Vector(0,0); // This is the position of the printer, lags behind the mouse pos because of `speed` let printer = new Vector(window.innerWidth * .5,window.innerHeight * .5); // The last position that there was a print let lastPrintPos = new Vector(0,0); // The speed of the printer let speed = 2; // The amount of space between each print, this is sort of treated like a threshold, // so that when the printer moves, if the movement...
Coalesce 14
const texturesize = 1024; const particles = texturesize * texturesize; let container; let camera, scene, renderer, controls; let cloud_obj; let uniforms; let gpuComputationRenderer, dataPos, dataVel, textureArraySize = texturesize*texturesize*4.; let textureVelocity, texturePosition; const particleVert = document.getElementById( 'vertexShaderParticle' ).textContent; const particleFrag = document.getElementById( 'fragmentShaderParticle' ).textContent; const velocityFrag =...
Lights
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script> <script id="vertexShader" type="x-shader/x-vertex"> void main() { gl_Position = vec4( position, 1.0 ); } </script> <script id="fragmentShader" type="x-shader/x-fragment"> uniform vec2 u_resolution; uniform float u_time; uniform vec2 u_mouse; const int octaves = 2; const float seed = 43758.5453123; const float seed2 = 73156.8473192; // Epsilon value const float eps = 0.005; const vec3 ambientLight = 0.99 *...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with Liam
Contact Liam, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack