Skip to content

Commit 6edf2f4

Browse files
committed
Added color halftone effect.
1 parent ea40df5 commit 6edf2f4

File tree

8 files changed

+85
-9
lines changed

8 files changed

+85
-9
lines changed

src/effects/ColorHalftoneEffect.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import Effect from 'core/Effect';
2+
import ShaderPass from 'graphics/ShaderPass';
3+
import ColorHalftoneShader from 'shaders/ColorHalftoneShader';
4+
import { deg2rad } from '../utils/math';
5+
6+
export default class ColorHalftoneEffect extends Effect {
7+
static config = {
8+
name: 'ColorHalftoneEffect',
9+
description: 'Color halftone effect.',
10+
type: 'effect',
11+
label: 'ColorHalftone',
12+
defaultProperties: {
13+
scale: 0.5,
14+
angle: 0,
15+
},
16+
controls: {
17+
scale: {
18+
label: 'Scale',
19+
type: 'number',
20+
min: 0,
21+
max: 1,
22+
step: 0.01,
23+
withRange: true,
24+
withReactor: true,
25+
},
26+
angle: {
27+
label: 'Angle',
28+
type: 'number',
29+
min: 0,
30+
max: 360,
31+
withRange: true,
32+
withReactor: true,
33+
},
34+
},
35+
};
36+
37+
constructor(properties) {
38+
super(ColorHalftoneEffect, properties);
39+
}
40+
41+
updatePass() {
42+
const { scale, angle } = this.properties;
43+
44+
this.pass.setUniforms({
45+
scale: 1 - scale,
46+
angle: deg2rad(angle),
47+
});
48+
}
49+
50+
addToScene() {
51+
this.pass = new ShaderPass(ColorHalftoneShader);
52+
53+
this.updatePass();
54+
}
55+
56+
removeFromScene() {
57+
this.pass = null;
58+
}
59+
}

src/effects/DotScreenEffect.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ export default class DotScreenEffect extends Effect {
1111
label: 'Dot Screen',
1212
defaultProperties: {
1313
angle: 90,
14-
scale: 1.0,
14+
scale: 0.5,
1515
},
1616
controls: {
1717
scale: {
18-
label: 'Amount',
18+
label: 'Scale',
1919
type: 'number',
2020
min: 0,
21-
max: 2.0,
21+
max: 1,
2222
step: 0.01,
2323
withRange: true,
2424
withReactor: true,
@@ -39,9 +39,11 @@ export default class DotScreenEffect extends Effect {
3939
}
4040

4141
updatePass() {
42+
const { scale, angle } = this.properties;
43+
4244
this.pass.setUniforms({
43-
scale: this.properties.scale,
44-
angle: deg2rad(this.properties.angle),
45+
scale: 2 - scale * 2,
46+
angle: deg2rad(angle),
4547
});
4648
}
4749

src/effects/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export BloomEffect from './BloomEffect';
22
export BlurEffect from './BlurEffect';
3+
export ColorHalftoneEffect from './ColorHalftoneEffect';
34
export DistortionEffect from './DistortionEffect';
45
export DotScreenEffect from './DotScreenEffect';
56
export GlitchEffect from './GlitchEffect';

src/shaders/ColorHalftoneShader.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Vector2 } from 'three';
2+
import vertexShader from 'shaders/glsl/vertex/basic.glsl';
3+
import fragmentShader from 'shaders/glsl/fragment/color-halftone.glsl';
4+
5+
export default {
6+
uniforms: {
7+
inputTexture: { type: 't', value: null },
8+
angle: { type: 'f', value: 1.0 },
9+
scale: { type: 'f', value: 1.0 },
10+
center: { type: 'v2', value: new Vector2(0, 0) },
11+
resolution: { type: 'v2', value: new Vector2(1, 1) },
12+
},
13+
vertexShader,
14+
fragmentShader,
15+
};

src/shaders/HalftoneShader.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Vector2 } from 'three';
22
import vertexShader from 'shaders/glsl/vertex/basic.glsl';
3-
import fragmentShader from 'shaders/glsl/fragment/halftone.glsl';
3+
import fragmentShader from 'src/shaders/glsl/fragment/color-halftone.glsl';
44

55
export default {
66
uniforms: {

src/shaders/glsl/fragment/halftone.glsl renamed to src/shaders/glsl/fragment/color-halftone.glsl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
uniform sampler2D inputTexture;
2-
uniform vec2 center;
32
uniform float angle;
43
uniform float scale;
54
uniform vec2 resolution;
65
varying vec2 vUv;
76

87
float pattern(float angle) {
98
float s = sin(angle), c = cos(angle);
9+
vec2 center = vec2(resolution.x * 0.5, resolution.y * 0.5);
1010
vec2 tex = vUv * resolution - center;
1111
vec2 point = vec2(c * tex.x - s * tex.y, s * tex.x + c * tex.y) * scale;
12-
float r = (sin(point.x) * sin(point.y)) * 4.0;
1312

14-
return r;
13+
return (sin(point.x) * sin(point.y)) * 4.0;
1514
}
1615

1716
void main() {
3.85 KB
Loading
-538 Bytes
Loading

0 commit comments

Comments
 (0)