mirror of
https://github.com/Rezmason/matrix.git
synced 2026-04-14 04:19:29 -07:00
Initial commit
This commit is contained in:
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
[submodule "msdfgen"]
|
||||
path = msdfgen
|
||||
url = https://github.com/Chlumsky/msdfgen
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Rezmason
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
BIN
Matrix-Code.ttf
Executable file
BIN
Matrix-Code.ttf
Executable file
Binary file not shown.
13
README.md
Normal file
13
README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# matrix
|
||||
|
||||
[Click here for the result.](https://rezmason.github.io/matrix)
|
||||
[Click here for the free font (TTF).](https://github.com/Rezmason/matrix/raw/master/Matrix-Code.ttf)
|
||||
|
||||
"matrix" is a WebGL implementation of the raining green code seen in _The Matrix Trilogy_. It's currently dependent on [Three.js](https://github.com/mrdoob/three.js), though this may not be permanent.
|
||||
|
||||
The glyphs in this project are cleaned up vectors [from an old SWF](https://web.archive.org/web/20070914173039/http://www.atari.com:80/thematrixpathofneo/) archived in 2007.
|
||||
(Please support the [Internet Archive!](https://archive.org/about/))
|
||||
|
||||
The glyphs are formatted as a multi-channel distance field (or MSDF) via Victor Chlumsky's [msdfgen](https://github.com/Chlumsky/msdfgen). This format preserves the crisp edges and corners of vector graphics when rendered as textures. Chlumsky's thesis paper, which is in English and is also easy to read, is [available to download here](https://dspace.cvut.cz/handle/10467/62770).
|
||||
|
||||
The opening titles to _The Matrix Reloaded_ and _The Matrix Revolutions_ are the chief reference for this project; in their most basic depiction, a _fixed grid_ of glowing glyphs adjust their brightness and shape to simulate raindrops falling down a windowpane. While the glyph shapes are random, they cycle through a predetermined shape order before repeating. Whereas other Matrix screensavers focus on reproducing more complicated visual effects, such as representing 3D geometries as collages of code rain, this project focuses on the iconic core concept.
|
||||
17
TODO.txt
Normal file
17
TODO.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
TODO:
|
||||
|
||||
Revisit rain logic
|
||||
Rework columns to support multiple drops at once
|
||||
Switch to some kind of continuous noise source
|
||||
And remember, cycling needs to be continuous too
|
||||
Give each glyph an XY for its four vertices, which doesn't change
|
||||
|
||||
|
||||
|
||||
Reach out to Ashley's partner about producing sounds
|
||||
|
||||
|
||||
Much later:
|
||||
Dissolve threejs project into webgl project
|
||||
Maybe webgl2 project?
|
||||
Flashing row effect?
|
||||
1
glyph order.txt
Normal file
1
glyph order.txt
Normal file
@@ -0,0 +1 @@
|
||||
ホア3ウ セ¦:"꞊ミラリ╌ツテニハソ▪—<>0|+*コシマムメモエヤキオカ7ケサスZ152ヨタワ4ネヌナ98ヒ0
|
||||
288
index.html
Normal file
288
index.html
Normal file
@@ -0,0 +1,288 @@
|
||||
<html><body style="height: 100vh; margin: 0; overflow: hidden; position: fixed; padding: 0; width: 100vw;">
|
||||
<script src="./lib/three.js"></script>
|
||||
|
||||
<script src="./js/CopyShader.js"></script>
|
||||
|
||||
<script src="./js/EffectComposer.js"></script>
|
||||
<script src="./js/RenderPass.js"></script>
|
||||
<script src="./js/ShaderPass.js"></script>
|
||||
|
||||
<script src="./js/ColorMapPass.js"></script>
|
||||
<script src="./js/HorizontalColorationPass.js"></script>
|
||||
<script src="./js/FilmGrainPass.js"></script>
|
||||
<script src="./js/LuminosityHighPassShader.js"></script>
|
||||
<script src="./js/UnrealBloomPass.js"></script>
|
||||
|
||||
<script>
|
||||
|
||||
const sharpness = 0.5;
|
||||
const animationSpeed = 1.01;
|
||||
|
||||
const mobilecheck = function() {
|
||||
// TODO
|
||||
return false;
|
||||
};
|
||||
|
||||
const isOnMoble = mobilecheck();
|
||||
|
||||
document.ontouchmove = (e) => e.preventDefault();
|
||||
const element = document.createElement("matrixcode");
|
||||
document.body.appendChild(element);
|
||||
const camera = new THREE.OrthographicCamera( -0.5, 0.5, 0.5, -0.5, 0.0001, 10000 );
|
||||
const scene = new THREE.Scene();
|
||||
scene.background = new THREE.Color(0, 0, 0);
|
||||
scene.add(camera);
|
||||
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
||||
renderer.sortObjects = true;
|
||||
renderer.setPixelRatio(window.devicePixelRatio);
|
||||
renderer.setSize( window.innerWidth, window.innerHeight );
|
||||
element.appendChild(renderer.domElement);
|
||||
const composer = new THREE.EffectComposer( renderer );
|
||||
const texture = new THREE.TextureLoader().load( './matrixcode_msdf.png' );
|
||||
const material = new THREE.RawShaderMaterial({
|
||||
uniforms: {
|
||||
map: { "type": "t", value: texture },
|
||||
sharpness: { "type": "f", value: sharpness },
|
||||
},
|
||||
vertexShader:`
|
||||
attribute vec2 uv;
|
||||
attribute vec3 position;
|
||||
attribute float brightness;
|
||||
uniform mat4 projectionMatrix;
|
||||
uniform mat4 modelViewMatrix;
|
||||
varying vec2 vUV;
|
||||
varying float vBrightness;
|
||||
void main(void) {
|
||||
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
||||
vUV = uv;
|
||||
vBrightness = brightness;
|
||||
}
|
||||
`,
|
||||
fragmentShader:`
|
||||
#ifdef GL_OES_standard_derivatives
|
||||
#extension GL_OES_standard_derivatives: enable
|
||||
#endif
|
||||
precision highp float;
|
||||
#define BIG_ENOUGH 0.001
|
||||
#define MODIFIED_ALPHATEST (0.02 * isBigEnough / BIG_ENOUGH)
|
||||
uniform sampler2D map;
|
||||
uniform float sharpness;
|
||||
varying vec2 vUV;
|
||||
varying float vBrightness;
|
||||
float median(float r, float g, float b) {
|
||||
return max(min(r, g), min(max(r, g), b));
|
||||
}
|
||||
void main() {
|
||||
vec3 sample = texture2D(map, vUV).rgb;
|
||||
float sigDist = median(sample.r, sample.g, sample.b) - 0.5;
|
||||
float alpha = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0);
|
||||
float dscale = 0.353505 / sharpness;
|
||||
vec2 duv = dscale * (dFdx(vUV) + dFdy(vUV));
|
||||
float isBigEnough = max(abs(duv.x), abs(duv.y));
|
||||
if (isBigEnough > BIG_ENOUGH) {
|
||||
float ratio = BIG_ENOUGH / isBigEnough;
|
||||
alpha = ratio * alpha + (1.0 - ratio) * (sigDist + 0.5);
|
||||
}
|
||||
if (isBigEnough <= BIG_ENOUGH && alpha < 0.5) { discard; return; }
|
||||
if (alpha < 0.5 * MODIFIED_ALPHATEST) { discard; return; }
|
||||
gl_FragColor = vec4(vec3(vBrightness * alpha), 1);
|
||||
}
|
||||
`,
|
||||
});
|
||||
|
||||
const glyphSequenceLength = 57;
|
||||
const numRows = 80;
|
||||
const numColumns = 80;
|
||||
const numGlyphs = numRows * numColumns;
|
||||
|
||||
const fTexU = 1 / 8;
|
||||
const fTexV = 1 / 8;
|
||||
const [z, w] = [0, 1];
|
||||
const glyphScale = 0.0;
|
||||
const [minH, maxH] = [0 - glyphScale, 1 + glyphScale];
|
||||
const [minV, maxV] = [0 - glyphScale, 1 + glyphScale];
|
||||
const verticesPerGlyph = 4;
|
||||
|
||||
const glyphPositionTemplate = [[minH, maxV, z, w], [maxH, maxV, z, w], [minH, minV, z, w], [maxH, minV, z, w],];
|
||||
const glyphBrightnessTemplate = [0, 0, 0, 0,];
|
||||
const glyphUVTemplate = [[0, fTexV], [fTexU, fTexV], [0, 0], [fTexU, 0],];
|
||||
const glyphIndexTemplate = [0, 2, 1, 2, 3, 1,];
|
||||
|
||||
const glyphPositionMarch = 4;
|
||||
const glyphBrightnessMarch = 1;
|
||||
const glyphUVMarch = 2;
|
||||
const glyphIndexMarch = 4;
|
||||
|
||||
const glyphPositionArray = [];
|
||||
const glyphBrightnessArray = [];
|
||||
const glyphUVArray = [];
|
||||
const glyphIndexArray = [];
|
||||
|
||||
const fRow = 1 / numRows;
|
||||
const fColumn = 1 / numColumns;
|
||||
|
||||
for (let column = 0; column < numColumns; column++) {
|
||||
for (let row = 0; row < numRows; row++) {
|
||||
const index = row + column * numRows;
|
||||
glyphPositionArray.push(...[].concat(...glyphPositionTemplate.map(([x, y, z, w]) => [
|
||||
(x + column) / numColumns - 0.5,
|
||||
(y + row) / numRows - 0.5,
|
||||
z,
|
||||
w,
|
||||
])));
|
||||
glyphBrightnessArray.push(...glyphBrightnessTemplate);
|
||||
glyphUVArray.push(...[].concat(...glyphUVTemplate));
|
||||
glyphIndexArray.push(...[].concat(glyphIndexTemplate.map(i => i + index * glyphIndexMarch)));
|
||||
}
|
||||
}
|
||||
|
||||
const geometry = new THREE.BufferGeometry();
|
||||
const glyphPositionFloat32Array = new Float32Array(glyphPositionArray);
|
||||
const glyphBrightnessFloat32Array = new Float32Array(glyphBrightnessArray);
|
||||
const glyphUVFloat32Array = new Float32Array(glyphUVArray);
|
||||
|
||||
const initializeColumn = column => {
|
||||
column.tailLength = (0.3 + Math.random() * 0.6) * 60 / numRows;
|
||||
column.fallSpeed = (0.4 + Math.random() * 0.4) * 60 / numRows;
|
||||
column.position = -(column.fallSpeed * Math.random() * 0.5);
|
||||
return column;
|
||||
}
|
||||
|
||||
const columns = Array(numColumns).fill().map((_, columnIndex) => {
|
||||
const column = initializeColumn({
|
||||
glyphs: Array(numRows).fill().map((_, index) => ({
|
||||
startTime: 0,
|
||||
symbol: (columnIndex + index) % glyphSequenceLength,
|
||||
cycle: Math.random(),
|
||||
brightness: index / numRows,
|
||||
})),
|
||||
brightnessArray: glyphBrightnessFloat32Array.subarray(numRows * (columnIndex) * glyphBrightnessMarch * verticesPerGlyph, numRows * (columnIndex + 1) * glyphBrightnessMarch * verticesPerGlyph),
|
||||
uvArray: glyphUVFloat32Array.subarray(numRows * (columnIndex) * glyphUVMarch * verticesPerGlyph, numRows * (columnIndex + 1) * glyphUVMarch * verticesPerGlyph),
|
||||
});
|
||||
column.position = Math.random() * (column.tailLength + 1);
|
||||
return column;
|
||||
});
|
||||
|
||||
geometry.addAttribute('position', new THREE.BufferAttribute(glyphPositionFloat32Array, glyphPositionMarch));
|
||||
geometry.addAttribute('brightness', new THREE.BufferAttribute(glyphBrightnessFloat32Array, glyphBrightnessMarch));
|
||||
geometry.addAttribute('uv', new THREE.BufferAttribute(glyphUVFloat32Array, glyphUVMarch));
|
||||
geometry.setIndex(glyphIndexArray);
|
||||
|
||||
// const stupidMaterial = new THREE.MeshBasicMaterial( { map: texture, flatShading: false, transparent:false } );
|
||||
|
||||
const mesh = new THREE.Mesh( geometry, material );
|
||||
scene.add(mesh);
|
||||
|
||||
composer.addPass( new THREE.RenderPass( scene, camera ) );
|
||||
|
||||
const bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.15, 0.3 );
|
||||
composer.addPass( bloomPass );
|
||||
|
||||
const colorMap = new THREE.ColorMapPass([
|
||||
{color: new THREE.Vector3(0.00, 0.00, 0.00), at: 0.01},
|
||||
{color: new THREE.Vector3(0.05, 0.52, 0.17), at: 0.40},
|
||||
{color: new THREE.Vector3(0.12, 0.82, 0.37), at: 0.84},
|
||||
{color: new THREE.Vector3(0.29, 1.00, 0.64), at: 1.00},
|
||||
// {color: new THREE.Vector3(0.90, 1.00, 0.90), at: 1.00},
|
||||
]);
|
||||
composer.addPass( colorMap );
|
||||
|
||||
const horizontalColoration = new THREE.HorizontalColorationPass([
|
||||
new THREE.Vector3(1, 0, 0),
|
||||
new THREE.Vector3(1, 1, 0),
|
||||
new THREE.Vector3(0, 1, 0),
|
||||
new THREE.Vector3(0, 1, 1),
|
||||
new THREE.Vector3(0, 0, 1),
|
||||
new THREE.Vector3(1, 0, 1),
|
||||
|
||||
|
||||
// new THREE.Vector3(1, 0, 0.5),
|
||||
// new THREE.Vector3(1, 0, 0.5),
|
||||
// new THREE.Vector3(0.5, 0, 1),
|
||||
// new THREE.Vector3(0.5, 0, 1),
|
||||
// new THREE.Vector3(0.25, 0.25, 1),
|
||||
// new THREE.Vector3(0.25, 0.25, 1),
|
||||
]);
|
||||
// composer.addPass(horizontalColoration);
|
||||
|
||||
const blurMag = 0.0001;
|
||||
const ditherMag = 0.075;
|
||||
const filmGrainPass = new THREE.FilmGrainPass(blurMag, ditherMag);
|
||||
if (!isOnMoble) composer.addPass(filmGrainPass);
|
||||
|
||||
const windowResize = () => {
|
||||
const [width, height] = [window.innerWidth, window.innerHeight];
|
||||
const ratio = height / width;
|
||||
const frac = 0.5;
|
||||
if (ratio < 1) {
|
||||
camera.left = -frac;
|
||||
camera.right = frac;
|
||||
camera.bottom = (camera.left - camera.right) * ratio + frac;
|
||||
camera.top = frac;
|
||||
} else {
|
||||
camera.bottom = -frac;
|
||||
camera.top = frac;
|
||||
camera.left = camera.bottom / ratio;
|
||||
camera.right = camera.top / ratio;
|
||||
}
|
||||
camera.updateProjectionMatrix();
|
||||
renderer.setSize(width, height);
|
||||
bloomPass.setSize( window.innerWidth, window.innerHeight );
|
||||
}
|
||||
window.addEventListener("resize", windowResize, false);
|
||||
window.addEventListener("orientationchange", windowResize, false);
|
||||
windowResize();
|
||||
|
||||
const cycleSpeed = 0.12;
|
||||
const flattenedUVTemplate = [].concat(...glyphUVTemplate);
|
||||
const uvScrap = [];
|
||||
let last = NaN;
|
||||
const update = now => {
|
||||
if (now - last > 50) {
|
||||
last = now;
|
||||
return;
|
||||
}
|
||||
const delta = ((isNaN(last) || now - last > 1000) ? 0 : now - last) / 1000 * animationSpeed;
|
||||
last = now;
|
||||
for (let columnIndex = 0; columnIndex < columns.length; columnIndex++) {
|
||||
const column = columns[columnIndex];
|
||||
column.position = column.position + delta * column.fallSpeed;
|
||||
if (column.position > 1 + column.tailLength) initializeColumn(column);
|
||||
for (let rowIndex = 0; rowIndex < column.glyphs.length; rowIndex++) {
|
||||
const glyph = column.glyphs[rowIndex];
|
||||
let val = ((1 - rowIndex / numRows) - (column.position - column.tailLength)) / column.tailLength;
|
||||
if (val < 0 || val > 1) val = 0;
|
||||
if (val > 0) {
|
||||
glyph.cycle = (glyph.cycle + delta * cycleSpeed * (1 - val)) % 1;
|
||||
const symbol = Math.floor(glyphSequenceLength * glyph.cycle);
|
||||
if (glyph.symbol != symbol) {
|
||||
glyph.symbol = symbol;
|
||||
const symbolX = (symbol % 8) / 8;
|
||||
const symbolY = (7 - (symbol - symbolX * 8) / 8) / 8;
|
||||
for (let i = 0; i < 4; i++) {
|
||||
uvScrap[i * 2 + 0] = flattenedUVTemplate[i * 2 + 0] + symbolX;
|
||||
uvScrap[i * 2 + 1] = flattenedUVTemplate[i * 2 + 1] + symbolY;
|
||||
}
|
||||
column.uvArray.set(uvScrap, rowIndex * verticesPerGlyph * glyphUVMarch);
|
||||
}
|
||||
}
|
||||
glyph.brightness = 0.8 + 0.9 * Math.log(val * 1.0);
|
||||
column.brightnessArray.set(glyphBrightnessTemplate.map(() => glyph.brightness), rowIndex * verticesPerGlyph * glyphBrightnessMarch);
|
||||
}
|
||||
}
|
||||
geometry.attributes.uv.needsUpdate = true;
|
||||
geometry.attributes.brightness.needsUpdate = true;
|
||||
};
|
||||
|
||||
composer.passes[composer.passes.length - 1].renderToScreen = true;
|
||||
|
||||
const render = () => {
|
||||
requestAnimationFrame(render);
|
||||
const now = Date.now();
|
||||
update(now);
|
||||
composer.render();
|
||||
}
|
||||
render();
|
||||
|
||||
</script>
|
||||
</body></html>
|
||||
81
js/ColorMapPass.js
Normal file
81
js/ColorMapPass.js
Normal file
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* @author rezmason
|
||||
*/
|
||||
|
||||
const easeInOutQuad = input => {
|
||||
input = Math.max(0, Math.min(1, input));
|
||||
if (input < 0.5) {
|
||||
return 2 * input * input;
|
||||
}
|
||||
input -= 1;
|
||||
return 1 - 2 * input * input;
|
||||
}
|
||||
|
||||
THREE.ColorMapPass = function (entries) {
|
||||
const colors = Array(256).fill().map(_ => new THREE.Vector3());
|
||||
const sortedEntries = entries.slice().sort((e1, e2) => e1.at - e2.at).map(entry => ({
|
||||
color: entry.color,
|
||||
at255: Math.floor(Math.max(Math.min(1, entry.at), 0) * (colors.length - 1))
|
||||
}));
|
||||
sortedEntries.unshift({color:sortedEntries[0].color, at255:0});
|
||||
sortedEntries.push({color:sortedEntries[sortedEntries.length - 1].color, at255:255});
|
||||
sortedEntries.forEach((entry, index) => {
|
||||
colors[entry.at255].copy(entry.color);
|
||||
if (index + 1 < sortedEntries.length) {
|
||||
const nextEntry = sortedEntries[index + 1];
|
||||
const diff = nextEntry.at255 - entry.at255;
|
||||
for (let i = 0; i < diff; i++) {
|
||||
colors[entry.at255 + i].lerpVectors(entry.color, nextEntry.color, i / diff);
|
||||
}
|
||||
}
|
||||
});
|
||||
const values = new Uint8Array([].concat(...colors.map(color => color.toArray().map(component => Math.floor(component * 255)))));
|
||||
|
||||
this.dataTexture = new THREE.DataTexture(
|
||||
values,
|
||||
values.length / 3,
|
||||
1,
|
||||
THREE.RGBFormat,
|
||||
THREE.UnsignedByteType,
|
||||
THREE.UVMapping);
|
||||
this.dataTexture.magFilter = THREE.LinearFilter;
|
||||
this.dataTexture.needsUpdate = true;
|
||||
|
||||
this.shader = {
|
||||
uniforms: {
|
||||
tDiffuse: { value: null },
|
||||
tColorData: { value: this.dataTexture }
|
||||
},
|
||||
|
||||
vertexShader: `
|
||||
varying vec2 vUv;
|
||||
void main() {
|
||||
vUv = uv;
|
||||
gl_Position = vec4( position, 1.0 );
|
||||
}
|
||||
`,
|
||||
|
||||
fragmentShader: `
|
||||
uniform sampler2D tDiffuse;
|
||||
uniform sampler2D tColorData;
|
||||
varying vec2 vUv;
|
||||
|
||||
void main() {
|
||||
gl_FragColor = vec4(
|
||||
texture2D( tColorData, vec2( texture2D( tDiffuse, vUv ).r, 0.0 ) ).rgb,
|
||||
1.0
|
||||
);
|
||||
}
|
||||
`
|
||||
};
|
||||
|
||||
THREE.ShaderPass.call(this, this.shader);
|
||||
};
|
||||
|
||||
THREE.ColorMapPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
|
||||
constructor: THREE.ColorMapPass,
|
||||
render: function() {
|
||||
this.uniforms[ "tColorData" ].value = this.dataTexture;
|
||||
THREE.ShaderPass.prototype.render.call(this, ...arguments);
|
||||
}
|
||||
});
|
||||
46
js/CopyShader.js
Executable file
46
js/CopyShader.js
Executable file
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* @author alteredq / http://alteredqualia.com/
|
||||
*
|
||||
* Full-screen textured quad shader
|
||||
*/
|
||||
|
||||
THREE.CopyShader = {
|
||||
|
||||
uniforms: {
|
||||
|
||||
"tDiffuse": { value: null },
|
||||
"opacity": { value: 1.0 }
|
||||
|
||||
},
|
||||
|
||||
vertexShader: [
|
||||
|
||||
"varying vec2 vUv;",
|
||||
|
||||
"void main() {",
|
||||
|
||||
"vUv = uv;",
|
||||
"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
|
||||
|
||||
"}"
|
||||
|
||||
].join( "\n" ),
|
||||
|
||||
fragmentShader: [
|
||||
|
||||
"uniform float opacity;",
|
||||
|
||||
"uniform sampler2D tDiffuse;",
|
||||
|
||||
"varying vec2 vUv;",
|
||||
|
||||
"void main() {",
|
||||
|
||||
"vec4 texel = texture2D( tDiffuse, vUv );",
|
||||
"gl_FragColor = opacity * texel;",
|
||||
|
||||
"}"
|
||||
|
||||
].join( "\n" )
|
||||
|
||||
};
|
||||
189
js/EffectComposer.js
Executable file
189
js/EffectComposer.js
Executable file
@@ -0,0 +1,189 @@
|
||||
/**
|
||||
* @author alteredq / http://alteredqualia.com/
|
||||
*/
|
||||
|
||||
THREE.EffectComposer = function ( renderer, renderTarget ) {
|
||||
|
||||
this.renderer = renderer;
|
||||
|
||||
if ( renderTarget === undefined ) {
|
||||
|
||||
var parameters = {
|
||||
minFilter: THREE.LinearFilter,
|
||||
magFilter: THREE.LinearFilter,
|
||||
format: THREE.RGBAFormat,
|
||||
stencilBuffer: false
|
||||
};
|
||||
|
||||
var size = renderer.getDrawingBufferSize();
|
||||
renderTarget = new THREE.WebGLRenderTarget( size.width, size.height, parameters );
|
||||
renderTarget.texture.name = 'EffectComposer.rt1';
|
||||
|
||||
}
|
||||
|
||||
this.renderTarget1 = renderTarget;
|
||||
this.renderTarget2 = renderTarget.clone();
|
||||
this.renderTarget2.texture.name = 'EffectComposer.rt2';
|
||||
|
||||
this.writeBuffer = this.renderTarget1;
|
||||
this.readBuffer = this.renderTarget2;
|
||||
|
||||
this.passes = [];
|
||||
|
||||
// dependencies
|
||||
|
||||
if ( THREE.CopyShader === undefined ) {
|
||||
|
||||
console.error( 'THREE.EffectComposer relies on THREE.CopyShader' );
|
||||
|
||||
}
|
||||
|
||||
if ( THREE.ShaderPass === undefined ) {
|
||||
|
||||
console.error( 'THREE.EffectComposer relies on THREE.ShaderPass' );
|
||||
|
||||
}
|
||||
|
||||
this.copyPass = new THREE.ShaderPass( THREE.CopyShader );
|
||||
|
||||
};
|
||||
|
||||
Object.assign( THREE.EffectComposer.prototype, {
|
||||
|
||||
swapBuffers: function () {
|
||||
|
||||
var tmp = this.readBuffer;
|
||||
this.readBuffer = this.writeBuffer;
|
||||
this.writeBuffer = tmp;
|
||||
|
||||
},
|
||||
|
||||
addPass: function ( pass ) {
|
||||
|
||||
this.passes.push( pass );
|
||||
|
||||
var size = this.renderer.getDrawingBufferSize();
|
||||
pass.setSize( size.width, size.height );
|
||||
|
||||
},
|
||||
|
||||
insertPass: function ( pass, index ) {
|
||||
|
||||
this.passes.splice( index, 0, pass );
|
||||
|
||||
},
|
||||
|
||||
render: function ( delta ) {
|
||||
|
||||
var maskActive = false;
|
||||
|
||||
var pass, i, il = this.passes.length;
|
||||
|
||||
for ( i = 0; i < il; i ++ ) {
|
||||
|
||||
pass = this.passes[ i ];
|
||||
|
||||
if ( pass.enabled === false ) continue;
|
||||
|
||||
pass.render( this.renderer, this.writeBuffer, this.readBuffer, delta, maskActive );
|
||||
|
||||
if ( pass.needsSwap ) {
|
||||
|
||||
if ( maskActive ) {
|
||||
|
||||
var context = this.renderer.context;
|
||||
|
||||
context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );
|
||||
|
||||
this.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, delta );
|
||||
|
||||
context.stencilFunc( context.EQUAL, 1, 0xffffffff );
|
||||
|
||||
}
|
||||
|
||||
this.swapBuffers();
|
||||
|
||||
}
|
||||
|
||||
if ( THREE.MaskPass !== undefined ) {
|
||||
|
||||
if ( pass instanceof THREE.MaskPass ) {
|
||||
|
||||
maskActive = true;
|
||||
|
||||
} else if ( pass instanceof THREE.ClearMaskPass ) {
|
||||
|
||||
maskActive = false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
reset: function ( renderTarget ) {
|
||||
|
||||
if ( renderTarget === undefined ) {
|
||||
|
||||
var size = this.renderer.getDrawingBufferSize();
|
||||
|
||||
renderTarget = this.renderTarget1.clone();
|
||||
renderTarget.setSize( size.width, size.height );
|
||||
|
||||
}
|
||||
|
||||
this.renderTarget1.dispose();
|
||||
this.renderTarget2.dispose();
|
||||
this.renderTarget1 = renderTarget;
|
||||
this.renderTarget2 = renderTarget.clone();
|
||||
|
||||
this.writeBuffer = this.renderTarget1;
|
||||
this.readBuffer = this.renderTarget2;
|
||||
|
||||
},
|
||||
|
||||
setSize: function ( width, height ) {
|
||||
|
||||
this.renderTarget1.setSize( width, height );
|
||||
this.renderTarget2.setSize( width, height );
|
||||
|
||||
for ( var i = 0; i < this.passes.length; i ++ ) {
|
||||
|
||||
this.passes[ i ].setSize( width, height );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
|
||||
THREE.Pass = function () {
|
||||
|
||||
// if set to true, the pass is processed by the composer
|
||||
this.enabled = true;
|
||||
|
||||
// if set to true, the pass indicates to swap read and write buffer after rendering
|
||||
this.needsSwap = true;
|
||||
|
||||
// if set to true, the pass clears its buffer before rendering
|
||||
this.clear = false;
|
||||
|
||||
// if set to true, the result of the pass is rendered to screen
|
||||
this.renderToScreen = false;
|
||||
|
||||
};
|
||||
|
||||
Object.assign( THREE.Pass.prototype, {
|
||||
|
||||
setSize: function ( width, height ) {},
|
||||
|
||||
render: function ( renderer, writeBuffer, readBuffer, delta, maskActive ) {
|
||||
|
||||
console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
60
js/FilmGrainPass.js
Normal file
60
js/FilmGrainPass.js
Normal file
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* @author rezmason
|
||||
*/
|
||||
|
||||
THREE.FilmGrainPass = function (blurMagnitude, ditherMagnitude) {
|
||||
this.shader = {
|
||||
uniforms: {
|
||||
tDiffuse: { value: null },
|
||||
blurMagnitude: { value: blurMagnitude },
|
||||
ditherMagnitude: { value: ditherMagnitude }
|
||||
},
|
||||
|
||||
vertexShader: `
|
||||
varying vec2 vUv;
|
||||
void main() {
|
||||
vUv = uv;
|
||||
gl_Position = vec4( position, 1.0 );
|
||||
}
|
||||
`,
|
||||
|
||||
fragmentShader: `
|
||||
#define PI 3.14159265359
|
||||
|
||||
uniform sampler2D tDiffuse;
|
||||
uniform float blurMagnitude;
|
||||
uniform float ditherMagnitude;
|
||||
varying vec2 vUv;
|
||||
|
||||
highp float rand( const in vec2 uv ) {
|
||||
const highp float a = 12.9898, b = 78.233, c = 43758.5453;
|
||||
highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );
|
||||
return fract(sin(sn) * c);
|
||||
}
|
||||
|
||||
vec3 dithering( vec3 color1, vec3 color2 ) {
|
||||
float difference = pow(length(color1 - color2), 0.1);
|
||||
return color1 + vec3( -1, 0.5, 0.5 ) * ditherMagnitude * difference * mix( -1.0, 1.0, rand( gl_FragCoord.xy ) );
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec4 sample = texture2D( tDiffuse, vUv );
|
||||
vec4 blurSum = vec4( 0.0 );
|
||||
|
||||
blurSum += texture2D( tDiffuse, vUv + vec2(-blurMagnitude, -blurMagnitude) ) * 0.25;
|
||||
blurSum += texture2D( tDiffuse, vUv + vec2( blurMagnitude, -blurMagnitude) ) * 0.25;
|
||||
blurSum += texture2D( tDiffuse, vUv + vec2(-blurMagnitude, blurMagnitude) ) * 0.25;
|
||||
blurSum += texture2D( tDiffuse, vUv + vec2( blurMagnitude, blurMagnitude) ) * 0.25;
|
||||
|
||||
gl_FragColor = vec4(dithering(blurSum.rgb, sample.rgb), 1.0);
|
||||
}
|
||||
`
|
||||
};
|
||||
|
||||
THREE.ShaderPass.call(this, this.shader);
|
||||
};
|
||||
|
||||
THREE.FilmGrainPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
|
||||
constructor: THREE.FilmGrainPass,
|
||||
render: THREE.ShaderPass.prototype.render
|
||||
});
|
||||
54
js/HorizontalColorationPass.js
Normal file
54
js/HorizontalColorationPass.js
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* @author rezmason
|
||||
*/
|
||||
|
||||
THREE.HorizontalColorationPass = function (colors) {
|
||||
const values = new Uint8Array([].concat(...colors.map(color => color.toArray().map(component => Math.floor(component * 255)))));
|
||||
|
||||
this.dataTexture = new THREE.DataTexture(
|
||||
values,
|
||||
values.length / 3,
|
||||
1,
|
||||
THREE.RGBFormat,
|
||||
THREE.UnsignedByteType,
|
||||
THREE.UVMapping);
|
||||
this.dataTexture.magFilter = THREE.LinearFilter;
|
||||
this.dataTexture.needsUpdate = true;
|
||||
|
||||
this.shader = {
|
||||
uniforms: {
|
||||
tDiffuse: { value: null },
|
||||
tColorData: { value: this.dataTexture },
|
||||
},
|
||||
|
||||
vertexShader: `
|
||||
varying vec2 vUv;
|
||||
void main() {
|
||||
vUv = uv;
|
||||
gl_Position = vec4( position, 1.0 );
|
||||
}
|
||||
`,
|
||||
|
||||
fragmentShader: `
|
||||
uniform sampler2D tDiffuse;
|
||||
uniform sampler2D tColorData;
|
||||
varying vec2 vUv;
|
||||
|
||||
void main() {
|
||||
float value = texture2D(tDiffuse, vUv).r;
|
||||
vec3 value2 = texture2D(tColorData, vUv).rgb;
|
||||
gl_FragColor = vec4(value2 * value, 1.0);
|
||||
}
|
||||
`
|
||||
};
|
||||
|
||||
THREE.ShaderPass.call(this, this.shader);
|
||||
};
|
||||
|
||||
THREE.HorizontalColorationPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
|
||||
constructor: THREE.HorizontalColorationPass,
|
||||
render: function() {
|
||||
this.uniforms[ "tColorData" ].value = this.dataTexture;
|
||||
THREE.ShaderPass.prototype.render.call(this, ...arguments);
|
||||
}
|
||||
});
|
||||
64
js/LuminosityHighPassShader.js
Normal file
64
js/LuminosityHighPassShader.js
Normal file
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* @author bhouston / http://clara.io/
|
||||
*
|
||||
* Luminosity
|
||||
* http://en.wikipedia.org/wiki/Luminosity
|
||||
*/
|
||||
|
||||
THREE.LuminosityHighPassShader = {
|
||||
|
||||
shaderID: "luminosityHighPass",
|
||||
|
||||
uniforms: {
|
||||
|
||||
"tDiffuse": { type: "t", value: null },
|
||||
"luminosityThreshold": { type: "f", value: 1.0 },
|
||||
"smoothWidth": { type: "f", value: 1.0 },
|
||||
"defaultColor": { type: "c", value: new THREE.Color( 0x000000 ) },
|
||||
"defaultOpacity": { type: "f", value: 0.0 }
|
||||
|
||||
},
|
||||
|
||||
vertexShader: [
|
||||
|
||||
"varying vec2 vUv;",
|
||||
|
||||
"void main() {",
|
||||
|
||||
"vUv = uv;",
|
||||
|
||||
"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
|
||||
|
||||
"}"
|
||||
|
||||
].join("\n"),
|
||||
|
||||
fragmentShader: [
|
||||
|
||||
"uniform sampler2D tDiffuse;",
|
||||
"uniform vec3 defaultColor;",
|
||||
"uniform float defaultOpacity;",
|
||||
"uniform float luminosityThreshold;",
|
||||
"uniform float smoothWidth;",
|
||||
|
||||
"varying vec2 vUv;",
|
||||
|
||||
"void main() {",
|
||||
|
||||
"vec4 texel = texture2D( tDiffuse, vUv );",
|
||||
|
||||
"vec3 luma = vec3( 0.299, 0.587, 0.114 );",
|
||||
|
||||
"float v = dot( texel.xyz, luma );",
|
||||
|
||||
"vec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );",
|
||||
|
||||
"float alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );",
|
||||
|
||||
"gl_FragColor = mix( outputColor, texel, alpha );",
|
||||
|
||||
"}"
|
||||
|
||||
].join("\n")
|
||||
|
||||
};
|
||||
63
js/RenderPass.js
Executable file
63
js/RenderPass.js
Executable file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* @author alteredq / http://alteredqualia.com/
|
||||
*/
|
||||
|
||||
THREE.RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) {
|
||||
|
||||
THREE.Pass.call( this );
|
||||
|
||||
this.scene = scene;
|
||||
this.camera = camera;
|
||||
|
||||
this.overrideMaterial = overrideMaterial;
|
||||
|
||||
this.clearColor = clearColor;
|
||||
this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;
|
||||
|
||||
this.clear = true;
|
||||
this.clearDepth = false;
|
||||
this.needsSwap = false;
|
||||
|
||||
};
|
||||
|
||||
THREE.RenderPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
|
||||
|
||||
constructor: THREE.RenderPass,
|
||||
|
||||
render: function ( renderer, writeBuffer, readBuffer, delta, maskActive ) {
|
||||
|
||||
var oldAutoClear = renderer.autoClear;
|
||||
renderer.autoClear = false;
|
||||
|
||||
this.scene.overrideMaterial = this.overrideMaterial;
|
||||
|
||||
var oldClearColor, oldClearAlpha;
|
||||
|
||||
if ( this.clearColor ) {
|
||||
|
||||
oldClearColor = renderer.getClearColor().getHex();
|
||||
oldClearAlpha = renderer.getClearAlpha();
|
||||
|
||||
renderer.setClearColor( this.clearColor, this.clearAlpha );
|
||||
|
||||
}
|
||||
|
||||
if ( this.clearDepth ) {
|
||||
|
||||
renderer.clearDepth();
|
||||
|
||||
}
|
||||
|
||||
renderer.render( this.scene, this.camera, this.renderToScreen ? null : readBuffer, this.clear );
|
||||
|
||||
if ( this.clearColor ) {
|
||||
|
||||
renderer.setClearColor( oldClearColor, oldClearAlpha );
|
||||
|
||||
}
|
||||
|
||||
this.scene.overrideMaterial = null;
|
||||
renderer.autoClear = oldAutoClear;
|
||||
}
|
||||
|
||||
} );
|
||||
67
js/ShaderPass.js
Executable file
67
js/ShaderPass.js
Executable file
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* @author alteredq / http://alteredqualia.com/
|
||||
*/
|
||||
|
||||
THREE.ShaderPass = function ( shader, textureID ) {
|
||||
|
||||
THREE.Pass.call( this );
|
||||
|
||||
this.textureID = ( textureID !== undefined ) ? textureID : "tDiffuse";
|
||||
|
||||
if ( shader instanceof THREE.ShaderMaterial ) {
|
||||
|
||||
this.uniforms = shader.uniforms;
|
||||
|
||||
this.material = shader;
|
||||
|
||||
} else if ( shader ) {
|
||||
|
||||
this.uniforms = THREE.UniformsUtils.clone( shader.uniforms );
|
||||
|
||||
this.material = new THREE.ShaderMaterial( {
|
||||
|
||||
defines: Object.assign( {}, shader.defines ),
|
||||
uniforms: this.uniforms,
|
||||
vertexShader: shader.vertexShader,
|
||||
fragmentShader: shader.fragmentShader
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
this.camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
||||
this.scene = new THREE.Scene();
|
||||
|
||||
this.quad = new THREE.Mesh( new THREE.PlaneBufferGeometry( 2, 2 ), null );
|
||||
this.quad.frustumCulled = false; // Avoid getting clipped
|
||||
this.scene.add( this.quad );
|
||||
|
||||
};
|
||||
|
||||
THREE.ShaderPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
|
||||
|
||||
constructor: THREE.ShaderPass,
|
||||
|
||||
render: function( renderer, writeBuffer, readBuffer, delta, maskActive ) {
|
||||
|
||||
if ( this.uniforms[ this.textureID ] ) {
|
||||
|
||||
this.uniforms[ this.textureID ].value = readBuffer.texture;
|
||||
|
||||
}
|
||||
|
||||
this.quad.material = this.material;
|
||||
|
||||
if ( this.renderToScreen ) {
|
||||
|
||||
renderer.render( this.scene, this.camera );
|
||||
|
||||
} else {
|
||||
|
||||
renderer.render( this.scene, this.camera, writeBuffer, this.clear );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
384
js/UnrealBloomPass.js
Normal file
384
js/UnrealBloomPass.js
Normal file
@@ -0,0 +1,384 @@
|
||||
/**
|
||||
* @author spidersharma / http://eduperiment.com/
|
||||
*
|
||||
* Inspired from Unreal Engine
|
||||
* https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/
|
||||
*/
|
||||
THREE.UnrealBloomPass = function ( resolution, strength, radius, threshold ) {
|
||||
|
||||
THREE.Pass.call( this );
|
||||
|
||||
this.strength = ( strength !== undefined ) ? strength : 1;
|
||||
this.radius = radius;
|
||||
this.threshold = threshold;
|
||||
this.resolution = ( resolution !== undefined ) ? new THREE.Vector2( resolution.x, resolution.y ) : new THREE.Vector2( 256, 256 );
|
||||
|
||||
// create color only once here, reuse it later inside the render function
|
||||
this.clearColor = new THREE.Color( 0, 0, 0 );
|
||||
|
||||
// render targets
|
||||
var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat };
|
||||
this.renderTargetsHorizontal = [];
|
||||
this.renderTargetsVertical = [];
|
||||
this.nMips = 5;
|
||||
var resx = Math.round( this.resolution.x / 2 );
|
||||
var resy = Math.round( this.resolution.y / 2 );
|
||||
|
||||
this.renderTargetBright = new THREE.WebGLRenderTarget( resx, resy, pars );
|
||||
this.renderTargetBright.texture.name = "UnrealBloomPass.bright";
|
||||
this.renderTargetBright.texture.generateMipmaps = false;
|
||||
|
||||
for ( var i = 0; i < this.nMips; i ++ ) {
|
||||
|
||||
var renderTarget = new THREE.WebGLRenderTarget( resx, resy, pars );
|
||||
|
||||
renderTarget.texture.name = "UnrealBloomPass.h" + i;
|
||||
renderTarget.texture.generateMipmaps = false;
|
||||
|
||||
this.renderTargetsHorizontal.push( renderTarget );
|
||||
|
||||
var renderTarget = new THREE.WebGLRenderTarget( resx, resy, pars );
|
||||
|
||||
renderTarget.texture.name = "UnrealBloomPass.v" + i;
|
||||
renderTarget.texture.generateMipmaps = false;
|
||||
|
||||
this.renderTargetsVertical.push( renderTarget );
|
||||
|
||||
resx = Math.round( resx / 2 );
|
||||
|
||||
resy = Math.round( resy / 2 );
|
||||
|
||||
}
|
||||
|
||||
// luminosity high pass material
|
||||
|
||||
if ( THREE.LuminosityHighPassShader === undefined )
|
||||
console.error( "THREE.UnrealBloomPass relies on THREE.LuminosityHighPassShader" );
|
||||
|
||||
var highPassShader = THREE.LuminosityHighPassShader;
|
||||
this.highPassUniforms = THREE.UniformsUtils.clone( highPassShader.uniforms );
|
||||
|
||||
this.highPassUniforms[ "luminosityThreshold" ].value = threshold;
|
||||
this.highPassUniforms[ "smoothWidth" ].value = 0.01;
|
||||
|
||||
this.materialHighPassFilter = new THREE.ShaderMaterial( {
|
||||
uniforms: this.highPassUniforms,
|
||||
vertexShader: highPassShader.vertexShader,
|
||||
fragmentShader: highPassShader.fragmentShader,
|
||||
defines: {}
|
||||
} );
|
||||
|
||||
// Gaussian Blur Materials
|
||||
this.separableBlurMaterials = [];
|
||||
var kernelSizeArray = [ 3, 5, 7, 9, 11 ];
|
||||
var resx = Math.round( this.resolution.x / 2 );
|
||||
var resy = Math.round( this.resolution.y / 2 );
|
||||
|
||||
for ( var i = 0; i < this.nMips; i ++ ) {
|
||||
|
||||
this.separableBlurMaterials.push( this.getSeperableBlurMaterial( kernelSizeArray[ i ] ) );
|
||||
|
||||
this.separableBlurMaterials[ i ].uniforms[ "texSize" ].value = new THREE.Vector2( resx, resy );
|
||||
|
||||
resx = Math.round( resx / 2 );
|
||||
|
||||
resy = Math.round( resy / 2 );
|
||||
|
||||
}
|
||||
|
||||
// Composite material
|
||||
this.compositeMaterial = this.getCompositeMaterial( this.nMips );
|
||||
this.compositeMaterial.uniforms[ "blurTexture1" ].value = this.renderTargetsVertical[ 0 ].texture;
|
||||
this.compositeMaterial.uniforms[ "blurTexture2" ].value = this.renderTargetsVertical[ 1 ].texture;
|
||||
this.compositeMaterial.uniforms[ "blurTexture3" ].value = this.renderTargetsVertical[ 2 ].texture;
|
||||
this.compositeMaterial.uniforms[ "blurTexture4" ].value = this.renderTargetsVertical[ 3 ].texture;
|
||||
this.compositeMaterial.uniforms[ "blurTexture5" ].value = this.renderTargetsVertical[ 4 ].texture;
|
||||
this.compositeMaterial.uniforms[ "bloomStrength" ].value = strength;
|
||||
this.compositeMaterial.uniforms[ "bloomRadius" ].value = 0.1;
|
||||
this.compositeMaterial.needsUpdate = true;
|
||||
|
||||
var bloomFactors = [ 1.0, 0.8, 0.6, 0.4, 0.2 ];
|
||||
this.compositeMaterial.uniforms[ "bloomFactors" ].value = bloomFactors;
|
||||
this.bloomTintColors = [ new THREE.Vector3( 1, 1, 1 ), new THREE.Vector3( 1, 1, 1 ), new THREE.Vector3( 1, 1, 1 ),
|
||||
new THREE.Vector3( 1, 1, 1 ), new THREE.Vector3( 1, 1, 1 ) ];
|
||||
this.compositeMaterial.uniforms[ "bloomTintColors" ].value = this.bloomTintColors;
|
||||
|
||||
// copy material
|
||||
if ( THREE.CopyShader === undefined ) {
|
||||
|
||||
console.error( "THREE.BloomPass relies on THREE.CopyShader" );
|
||||
|
||||
}
|
||||
|
||||
var copyShader = THREE.CopyShader;
|
||||
|
||||
this.copyUniforms = THREE.UniformsUtils.clone( copyShader.uniforms );
|
||||
this.copyUniforms[ "opacity" ].value = 1.0;
|
||||
|
||||
this.materialCopy = new THREE.ShaderMaterial( {
|
||||
uniforms: this.copyUniforms,
|
||||
vertexShader: copyShader.vertexShader,
|
||||
fragmentShader: copyShader.fragmentShader,
|
||||
blending: THREE.AdditiveBlending,
|
||||
depthTest: false,
|
||||
depthWrite: false,
|
||||
transparent: true
|
||||
} );
|
||||
|
||||
this.enabled = true;
|
||||
this.needsSwap = false;
|
||||
|
||||
this.oldClearColor = new THREE.Color();
|
||||
this.oldClearAlpha = 1;
|
||||
|
||||
this.camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
||||
this.scene = new THREE.Scene();
|
||||
|
||||
this.basic = new THREE.MeshBasicMaterial();
|
||||
|
||||
this.quad = new THREE.Mesh( new THREE.PlaneBufferGeometry( 2, 2 ), null );
|
||||
this.quad.frustumCulled = false; // Avoid getting clipped
|
||||
this.scene.add( this.quad );
|
||||
|
||||
};
|
||||
|
||||
THREE.UnrealBloomPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
|
||||
|
||||
constructor: THREE.UnrealBloomPass,
|
||||
|
||||
dispose: function () {
|
||||
|
||||
for ( var i = 0; i < this.renderTargetsHorizontal.length; i ++ ) {
|
||||
|
||||
this.renderTargetsHorizontal[ i ].dispose();
|
||||
|
||||
}
|
||||
|
||||
for ( var i = 0; i < this.renderTargetsVertical.length; i ++ ) {
|
||||
|
||||
this.renderTargetsVertical[ i ].dispose();
|
||||
|
||||
}
|
||||
|
||||
this.renderTargetBright.dispose();
|
||||
|
||||
},
|
||||
|
||||
setSize: function ( width, height ) {
|
||||
|
||||
var resx = Math.round( width / 2 );
|
||||
var resy = Math.round( height / 2 );
|
||||
|
||||
this.renderTargetBright.setSize( resx, resy );
|
||||
|
||||
for ( var i = 0; i < this.nMips; i ++ ) {
|
||||
|
||||
this.renderTargetsHorizontal[ i ].setSize( resx, resy );
|
||||
this.renderTargetsVertical[ i ].setSize( resx, resy );
|
||||
|
||||
this.separableBlurMaterials[ i ].uniforms[ "texSize" ].value = new THREE.Vector2( resx, resy );
|
||||
|
||||
resx = Math.round( resx / 2 );
|
||||
resy = Math.round( resy / 2 );
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
render: function ( renderer, writeBuffer, readBuffer, delta, maskActive ) {
|
||||
|
||||
this.oldClearColor.copy( renderer.getClearColor() );
|
||||
this.oldClearAlpha = renderer.getClearAlpha();
|
||||
var oldAutoClear = renderer.autoClear;
|
||||
renderer.autoClear = false;
|
||||
|
||||
renderer.setClearColor( this.clearColor, 0 );
|
||||
|
||||
if ( maskActive ) renderer.context.disable( renderer.context.STENCIL_TEST );
|
||||
|
||||
// Render input to screen
|
||||
|
||||
if ( this.renderToScreen ) {
|
||||
|
||||
this.quad.material = this.basic;
|
||||
this.basic.map = readBuffer.texture;
|
||||
|
||||
renderer.render( this.scene, this.camera, undefined, true );
|
||||
|
||||
}
|
||||
|
||||
// 1. Extract Bright Areas
|
||||
|
||||
this.highPassUniforms[ "tDiffuse" ].value = readBuffer.texture;
|
||||
this.highPassUniforms[ "luminosityThreshold" ].value = this.threshold;
|
||||
this.quad.material = this.materialHighPassFilter;
|
||||
|
||||
renderer.render( this.scene, this.camera, this.renderTargetBright, true );
|
||||
|
||||
// 2. Blur All the mips progressively
|
||||
|
||||
var inputRenderTarget = this.renderTargetBright;
|
||||
|
||||
for ( var i = 0; i < this.nMips; i ++ ) {
|
||||
|
||||
this.quad.material = this.separableBlurMaterials[ i ];
|
||||
|
||||
this.separableBlurMaterials[ i ].uniforms[ "colorTexture" ].value = inputRenderTarget.texture;
|
||||
this.separableBlurMaterials[ i ].uniforms[ "direction" ].value = THREE.UnrealBloomPass.BlurDirectionX;
|
||||
renderer.render( this.scene, this.camera, this.renderTargetsHorizontal[ i ], true );
|
||||
|
||||
this.separableBlurMaterials[ i ].uniforms[ "colorTexture" ].value = this.renderTargetsHorizontal[ i ].texture;
|
||||
this.separableBlurMaterials[ i ].uniforms[ "direction" ].value = THREE.UnrealBloomPass.BlurDirectionY;
|
||||
renderer.render( this.scene, this.camera, this.renderTargetsVertical[ i ], true );
|
||||
|
||||
inputRenderTarget = this.renderTargetsVertical[ i ];
|
||||
|
||||
}
|
||||
|
||||
// Composite All the mips
|
||||
|
||||
this.quad.material = this.compositeMaterial;
|
||||
this.compositeMaterial.uniforms[ "bloomStrength" ].value = this.strength;
|
||||
this.compositeMaterial.uniforms[ "bloomRadius" ].value = this.radius;
|
||||
this.compositeMaterial.uniforms[ "bloomTintColors" ].value = this.bloomTintColors;
|
||||
|
||||
renderer.render( this.scene, this.camera, this.renderTargetsHorizontal[ 0 ], true );
|
||||
|
||||
// Blend it additively over the input texture
|
||||
|
||||
this.quad.material = this.materialCopy;
|
||||
this.copyUniforms[ "tDiffuse" ].value = this.renderTargetsHorizontal[ 0 ].texture;
|
||||
|
||||
if ( maskActive ) renderer.context.enable( renderer.context.STENCIL_TEST );
|
||||
|
||||
|
||||
if ( this.renderToScreen ) {
|
||||
|
||||
renderer.render( this.scene, this.camera, undefined, false );
|
||||
|
||||
} else {
|
||||
|
||||
renderer.render( this.scene, this.camera, readBuffer, false );
|
||||
|
||||
}
|
||||
|
||||
// Restore renderer settings
|
||||
|
||||
renderer.setClearColor( this.oldClearColor, this.oldClearAlpha );
|
||||
renderer.autoClear = oldAutoClear;
|
||||
|
||||
},
|
||||
|
||||
getSeperableBlurMaterial: function ( kernelRadius ) {
|
||||
|
||||
return new THREE.ShaderMaterial( {
|
||||
|
||||
defines: {
|
||||
"KERNEL_RADIUS": kernelRadius,
|
||||
"SIGMA": kernelRadius
|
||||
},
|
||||
|
||||
uniforms: {
|
||||
"colorTexture": { value: null },
|
||||
"texSize": { value: new THREE.Vector2( 0.5, 0.5 ) },
|
||||
"direction": { value: new THREE.Vector2( 0.5, 0.5 ) }
|
||||
},
|
||||
|
||||
vertexShader:
|
||||
"varying vec2 vUv;\n\
|
||||
void main() {\n\
|
||||
vUv = uv;\n\
|
||||
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\
|
||||
}",
|
||||
|
||||
fragmentShader:
|
||||
"#include <common>\
|
||||
varying vec2 vUv;\n\
|
||||
uniform sampler2D colorTexture;\n\
|
||||
uniform vec2 texSize;\
|
||||
uniform vec2 direction;\
|
||||
\
|
||||
float gaussianPdf(in float x, in float sigma) {\
|
||||
return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\
|
||||
}\
|
||||
void main() {\n\
|
||||
vec2 invSize = 1.0 / texSize;\
|
||||
float fSigma = float(SIGMA);\
|
||||
float weightSum = gaussianPdf(0.0, fSigma);\
|
||||
vec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;\
|
||||
for( int i = 1; i < KERNEL_RADIUS; i ++ ) {\
|
||||
float x = float(i);\
|
||||
float w = gaussianPdf(x, fSigma);\
|
||||
vec2 uvOffset = direction * invSize * x;\
|
||||
vec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;\
|
||||
vec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;\
|
||||
diffuseSum += (sample1 + sample2) * w;\
|
||||
weightSum += 2.0 * w;\
|
||||
}\
|
||||
gl_FragColor = vec4(diffuseSum/weightSum, 1.0);\n\
|
||||
}"
|
||||
} );
|
||||
|
||||
},
|
||||
|
||||
getCompositeMaterial: function ( nMips ) {
|
||||
|
||||
return new THREE.ShaderMaterial( {
|
||||
|
||||
defines: {
|
||||
"NUM_MIPS": nMips
|
||||
},
|
||||
|
||||
uniforms: {
|
||||
"blurTexture1": { value: null },
|
||||
"blurTexture2": { value: null },
|
||||
"blurTexture3": { value: null },
|
||||
"blurTexture4": { value: null },
|
||||
"blurTexture5": { value: null },
|
||||
"dirtTexture": { value: null },
|
||||
"bloomStrength": { value: 1.0 },
|
||||
"bloomFactors": { value: null },
|
||||
"bloomTintColors": { value: null },
|
||||
"bloomRadius": { value: 0.0 }
|
||||
},
|
||||
|
||||
vertexShader:
|
||||
"varying vec2 vUv;\n\
|
||||
void main() {\n\
|
||||
vUv = uv;\n\
|
||||
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\
|
||||
}",
|
||||
|
||||
fragmentShader:
|
||||
"varying vec2 vUv;\
|
||||
uniform sampler2D blurTexture1;\
|
||||
uniform sampler2D blurTexture2;\
|
||||
uniform sampler2D blurTexture3;\
|
||||
uniform sampler2D blurTexture4;\
|
||||
uniform sampler2D blurTexture5;\
|
||||
uniform sampler2D dirtTexture;\
|
||||
uniform float bloomStrength;\
|
||||
uniform float bloomRadius;\
|
||||
uniform float bloomFactors[NUM_MIPS];\
|
||||
uniform vec3 bloomTintColors[NUM_MIPS];\
|
||||
\
|
||||
float lerpBloomFactor(const in float factor) { \
|
||||
float mirrorFactor = 1.2 - factor;\
|
||||
return mix(factor, mirrorFactor, bloomRadius);\
|
||||
}\
|
||||
\
|
||||
void main() {\
|
||||
gl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) + \
|
||||
lerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) + \
|
||||
lerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) + \
|
||||
lerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) + \
|
||||
lerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );\
|
||||
}"
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
THREE.UnrealBloomPass.BlurDirectionX = new THREE.Vector2( 1.0, 0.0 );
|
||||
THREE.UnrealBloomPass.BlurDirectionY = new THREE.Vector2( 0.0, 1.0 );
|
||||
47349
lib/three.js
Executable file
47349
lib/three.js
Executable file
File diff suppressed because one or more lines are too long
BIN
matrixcode_msdf.png
Normal file
BIN
matrixcode_msdf.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
1
msdf_command.txt
Normal file
1
msdf_command.txt
Normal file
@@ -0,0 +1 @@
|
||||
./msdfgen/out/msdfgen msdf -svg ./svg\ sources/texture_simplified.svg -size 512 512 -pxrange 4 -o ./matrixcode_msdf.png
|
||||
396
svg sources/new matrix font.svg
Normal file
396
svg sources/new matrix font.svg
Normal file
@@ -0,0 +1,396 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 25 30" style="enable-background:new 0 0 25 30;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#FF8600;}
|
||||
</style>
|
||||
<g id="Output">
|
||||
<text transform="matrix(1 0 0 1 -700.1174 -130.4224)" style="font-family:'Matrix-Code'; font-size:65.9923px;">ホア3ウ</text>
|
||||
<text transform="matrix(1 0 0 1 -480.2174 -128)" style="font-family:'MyriadPro-Regular'; font-size:65.9923px;"> </text>
|
||||
<text transform="matrix(1 0 0 1 -466.2174 -130.4224)" style="font-family:'Matrix-Code'; font-size:65.9923px;">セ¦:"꞊ミラリ╌ツテニハソ▪—<>0|+*コシマムメモエヤキオカ7ケサスZ152ヨタワ4ネヌナ98ヒ0</text>
|
||||
</g>
|
||||
<g id="Cleaned_up_glyphs">
|
||||
<g id="_xA6_">
|
||||
<path d="M14.3,16.2h-3.7v10.1h3.7V16.2z M14.3,12.5V3.7h-3.7v8.8H14.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id=":">
|
||||
<path d="M16.1,18.7H8.9V24h7.3v-5.3H16.1z M16.1,11.2V6H8.9v5.2H16.1z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x7C_">
|
||||
<path d="M14.4,3.3h-3.8v23.4h3.8V3.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x2014_">
|
||||
<path d="M22.5,16.8v-3.6h-20v3.6H22.5z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x254C_">
|
||||
<path d="M24.5,13.2h-9.7v3.6h9.7V13.2z M10.3,16.8v-3.6H0.5v3.6H10.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x3D__1_">
|
||||
<path d="M18.1,16.7H6.9v3.6h11.2V16.7z M18.1,13.3V9.7H6.9v3.6C6.9,13.3,18.1,13.3,18.1,13.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ハ">
|
||||
<path d="M2.6,26.1L5.8,3.9h5.1L7.7,26.1H2.6z M13.3,3.9c0,11.8,4.2,19.6,7.5,21.2l1.7-2.6c-1.4-1.3-2.5-4.4-3.1-9.3
|
||||
c-0.3-2.6-0.5-5.8-0.5-9.3L13.3,3.9z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x25AA_">
|
||||
<path d="M16,17.4v-4.8H9v4.8H16z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_xA78A_">
|
||||
<path d="M7.5,13.7h9.9V8.6H7.5V13.7z M7.5,16.3v5.1h9.9v-5.1H7.5z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="シ">
|
||||
<path d="M12.1,3.1v3h11.2v-3H12.1z M12.1,10v3h11.2v-3H12.1z M1.1,10V8.8h2.6c-0.4,9.9,10.1,12.7,20.1,12.4v5.6
|
||||
C8.6,28.4,1.1,20.6,1.1,10z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ワ">
|
||||
<path d="M6.8,8v3.5c0,5.6,1.9,9.2,5.7,11c1.5,0.8,3.4,1.1,5.6,1.1v2.3c-6.8,0-11.5-2.2-14.2-6.6c-1.2-1.8-1.8-4.1-2-6.6V4.1h21.3
|
||||
v9.4h-4.9V8H6.8z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x2B_">
|
||||
<polygon points="20.6,13.3 14.2,13.3 14.2,6.9 10.8,6.9 10.8,13.3 4.4,13.3 4.4,16.7 10.8,16.7 10.8,23.1 14.2,23.1 14.2,16.7
|
||||
20.6,16.7 "/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ヤ">
|
||||
<path d="M1,5.3h13.9l0.2-1.8h5.8l-0.2,1.8H24v4h-3.8l-1.8,14.9H24v2.3H3.2v-2.3h9.7l1.5-14.9h-7c0,3.7,1.5,6.6,4.4,8.5v1.9
|
||||
C4.9,20,1,14,1,5.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="リ">
|
||||
<path d="M2.5,3.7h5.9c-0.4,6.5,1.3,20.8,13.2,20v2.6C5,26.7,1.5,15,2.5,3.7z M22.6,14.9h-6.2L16.2,3.7h6.5L22.6,14.9z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x35_">
|
||||
<path d="M23,13.7H12.5c-1,0-1.8,0.2-2.5,0.7s-1,1.1-1,1.8v5.1c0,0.7,0.3,1.3,1,1.8s1.5,0.7,2.5,0.7H16c2.2,0,3.3-0.8,3.5-2.5H23
|
||||
c-0.5,3.4-2.9,5.1-7,5.1H9c-1.9,0-3.6-0.5-4.9-1.5S2,22.8,2,21.4v-5.1c0-1.4,0.7-2.6,2.1-3.6s3-1.5,5-1.5h7V6.1H2V3.6h21V13.7z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x38_">
|
||||
<path d="M8.4,3.5h8.3c4.4,0.9,6.5,2.9,6.5,6c0,2.1-1.1,3.7-3.2,4.6c-1.1,0.5-2.2,0.8-3.3,0.8l1.6,0.3l1.7,0.6
|
||||
c2.1,0.9,3.2,2.5,3.2,4.6c0,3.1-2.2,5.1-6.5,6H8.4c-4.4-0.9-6.6-2.9-6.6-6c0-2.1,1.1-3.6,3.2-4.6C6.1,15.3,7.2,15,8.3,15
|
||||
c-1,0-2.1-0.3-3.3-0.8c-2.1-1-3.2-2.5-3.2-4.6C1.8,6.4,4,4.4,8.4,3.5 M12.6,16.4h-0.3C10.1,16.5,9,17.6,9,20s1.1,3.7,3.4,3.9h0.1
|
||||
c2.3-0.2,3.4-1.5,3.4-3.9S14.8,16.4,12.6,16.4 M12.6,6.3h-0.3C10.1,6.4,9,7.5,9,9.9s1.1,3.6,3.4,3.9h0.1c2.3-0.3,3.4-1.6,3.4-3.9
|
||||
C15.9,7.5,14.8,6.3,12.6,6.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x33_">
|
||||
<path d="M1.9,23.9H16L5.3,18.8V16h7.2c1.1,0,1.8-0.3,2.4-0.9c0.5-0.6,0.8-1,0.8-1.4V8.6c0-0.6-0.1-1.2-0.7-1.7
|
||||
c-0.6-0.4-1.5-0.6-2.4-0.6h-3c-2.9,0-3.4,1.6-4.1,2.2H1.9C2.4,5.1,4.8,3.4,9,3.4h7c1.9,0,3.6,0.5,5,1.5s2.1,2.2,2.1,3.6v5.1
|
||||
c0,1.2-0.7,2.3-2,3.4s-3,1.7-5.1,1.7h-3.5l10.6,5.1v2.5H1.9V23.9z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x34_">
|
||||
<path d="M2,17.7V15L15.6,2.5h7.5v24.9H1.9v-2.3h13.9v-7.4H2 M5.6,15h10.2V5.7L5.6,15z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="キ">
|
||||
<path d="M10.9,3.6h5.9L16.3,7h6.8v3.8h-7.3L15,16.7h8v3.8h-8.5l-0.7,5.9H8l0.7-5.9H1.9v-3.8h7.3l0.8-5.9H1.9V7h8.6L10.9,3.6z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ミ">
|
||||
<path d="M23.1,24.1L1.9,26v-4.3L23,19.5v4.6H23.1z M23.1,8.6L1.9,10.5V6.3L23.1,4V8.6z M21.4,16.2L3.6,17.9v-4l17.8-2.1V16.2z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ア_1_">
|
||||
<path d="M9.1,19.6C3.2,19.6,2,13.4,2,12V4.4h21v4H7.6C7.4,13.9,7.8,17,11.1,17v-5.7h6.2v5.9c0,3.5,1.9,5.6,5.8,6.3v2
|
||||
c-5,0-8.8-2-11.5-6H9.1V19.6z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ナ">
|
||||
<path d="M6.9,3.6H13v5.3h10V13H13c-0.1,2.3,0.3,10.7,8.8,11.2v2.1c-8,0.6-14.4-3.9-15-13.3H2V8.9h4.9V3.6z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x39_">
|
||||
<path d="M8.3,3.6h8.3c4.4,0.9,6.5,2.9,6.5,6v3.6c0,2.1-1.1,3.7-3.2,4.7c-1.2,0.5-2.3,0.8-3.3,0.8h-2.3h-3.1
|
||||
c-0.6,0-1.3-0.5-2.1-1.5c-0.2,2.6,0.8,4.5,2.9,5.6c1.4,0.8,3.2,1.1,5.5,1.1h1h0.9v2.5H13c-4,0-7.1-1.4-9.3-4.1
|
||||
c-0.9-1.2-1.5-2.5-1.9-4.1V9.6C1.8,6.5,4,4.5,8.3,3.6 M12.6,6.3h-0.3C10.1,6.4,9,7.6,9,9.9v2.6c0,1.6,0.6,2.7,1.7,3.3
|
||||
c0.5,0.3,1.1,0.5,1.7,0.5h0.1c2.3-0.2,3.4-1.5,3.3-3.9V9.9c0-1.6-0.5-2.6-1.6-3.2L12.6,6.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="カ">
|
||||
<path d="M18.4,10.8C18.1,18.4,19.9,24,23,24.3v2.2h-1.3c-3.6-0.8-9.3-4.2-9.3-15.6H8.3c-0.6,0-1.1,0.6-1.1,1.4v9.3
|
||||
c0,0.8,0.5,1.2,1.1,1.2h3.2v3.7H6.1c-2.3,0-4.1-1.6-4.1-4.3v-15h10.5V3.6h6v3.5h3.6v3.7H18.4z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x3C_">
|
||||
<path d="M10.5,15L21,22.2h-6.2L4,15l10.8-7.3H21L10.5,15z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ニ">
|
||||
<path d="M23,20.7H2v4.4h21V20.7z M22.2,9.2V4.8h-19v4.4C3.2,9.2,22.2,9.2,22.2,9.2z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ソ">
|
||||
<path d="M1.8,3.7h5.9c-0.2,4.3,0,20.6,13.2,20v2.6c-8.4,0.5-19.4-3.4-19.3-19L1.8,3.7 M14.3,14.9l2.6-11.2h6.5l-2.9,11.2H14.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ム">
|
||||
<path d="M11.2,4.7h6.1l6.9,20.7h-8.7l-8.7-1.7l-0.6,1.6H0.8v-1.5l4.7-12.1h5.8l-3,8l8.6,1.6L11.2,4.7z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x2A_">
|
||||
<path d="M21,12.5l-5.2,2.4l5.2,2.4l-1.1,2.5l-5.6-2.6v5h-3.7v-4.9l-5.4,2.6L4,17.4L9.2,15L4,12.6l1-2.7l5.5,2.5V7.8h3.7v4.7
|
||||
l5.6-2.6L21,12.5z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="コ">
|
||||
<path d="M20.5,8.6H5.8v12.8h17.4v4.2H1.8V4.4h18.7V8.6z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x3E_">
|
||||
<path d="M14.5,15L4,7.8h6.2L21,15l-10.8,7.2H4L14.5,15z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="モ">
|
||||
<path d="M12.4,7.2c0.3,0,0.7,0.2,0.7,0.7v2.4c0,0.5-0.2,0.7-0.7,0.8H2v3.8h10.4c0.3,0,0.6,0.2,0.7,0.8v4c0,1.1-1.1,2.4-2.2,2.4H2
|
||||
v4h12.7c2.7,0,4-3.3,4-5.7V15H23v-3.9h-4.3v-4h4v-3H2v3.1H12.4z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x31_">
|
||||
<path d="M10.6,27.5V7.7H7.1V5.1l7.2-2.7H18v25.1H10.6z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x30_">
|
||||
<path d="M8.3,3.6h8.3c4.4,0.9,6.5,2.9,6.5,6v10.9c0,3.2-2.2,5.2-6.5,6H8.3c-4.4-0.8-6.5-2.8-6.5-6V9.6C1.8,6.5,4,4.5,8.3,3.6
|
||||
M12,23.9l0.5,0.1h0.1c2.3-0.2,3.4-1.5,3.4-3.8v-8.4L9.8,22.7c0.4,0.5,0.9,0.9,1.7,1.1L12,23.9 M12.6,6.4h-0.3
|
||||
C10.1,6.5,9,7.6,9,9.9v8.3l5.8-11.1C14.3,6.6,13.5,6.3,12.6,6.4z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ネ">
|
||||
<path d="M15.3,4.4c0,0.5,0.1,0.9,0.7,1.2h7v4H9.5c0.2,1.6,1.1,3.1,2.5,4.4c2.4,2.5,6.1,4.1,11.1,4.9v2.5c-3.8-0.3-6.4-0.8-7.7-1.4
|
||||
v5.4h7.7v2.3H1.9v-2.3h7.8v-6.7L2,22.3v-4.4l4.9-2.3c-2.2-1.8-3.7-4.1-4.4-6.7C2.2,7.8,2,6.8,1.9,5.6h7c0.6,0,0.8-0.4,0.8-1.3V2.1
|
||||
h5.6C15.3,2.1,15.3,4.4,15.3,4.4z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ス">
|
||||
<path d="M11.8,8.8C12,15,14,19.3,17.6,21.7c1.5,1,3.3,1.5,5.4,1.7v2.2c-5.4,0-9.6-1.6-12.8-4.8L7,25.7H2v-1.1l5-8.7
|
||||
c-1-1.2-2.2-8-2.2-11.3H23V9H11.8V8.8z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x22_">
|
||||
<path d="M10.4,20.3H5.5L7.1,9.7H12L10.4,20.3z M17.9,20.3H13l1.6-10.6h4.8L17.9,20.3z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="テ">
|
||||
<path d="M6.2,14.6H1.9v-3.8H23v3.8h-9c-0.6,6.5,3.2,9.1,7.7,9v2.2C12.4,26.6,9,20.7,8.3,18.4C7.2,14.8,7.2,14.6,6.2,14.6z M2,4.2
|
||||
v3.7h20.9V4.2H2z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="タ">
|
||||
<path d="M19.5,4.1H2V10c-0.1,12.7,9.5,16.8,19.6,15.8v-2.3c-5.8,0.4-9.2-1.9-10.3-3.5c-0.4-0.6-0.4-1.6,0.1-1.8l5.7-2v-3.4
|
||||
l-7.3,1.8C8.4,14.9,8.2,15,8.2,8H15c1.7,4,5.2,7.3,8,7.3v-2.6C21.5,11.7,19.5,8.2,19.5,4.1z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ツ">
|
||||
<path d="M1.9,4.1h5.4v7.4c0,5.6,2.4,9.2,7.2,11c1.9,0.8,4.3,1.1,7.2,1.1v2.3c-8.3,0-14.1-2.2-17.3-6.6c-1.4-1.8-2.2-4.1-2.5-6.6
|
||||
C1.9,12.7,1.9,4.1,1.9,4.1z M11.1,4.1H16l-1.4,10.6H9.8L11.1,4.1 M21.7,14.6h-4.9L18.2,4h4.9L21.7,14.6z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ケ">
|
||||
<path d="M23.1,4.5V2.1H2v2.3h10.9v4h-11v4.1h3.9C4.1,30.1,19.3,27.9,21.2,27.7v-2.2c-8.7,1.6-9.8-7.1-9.4-13h2.6
|
||||
c2.5,3.4,5.8,5.7,8.7,5v-2.1c-2.2-0.4-4.3-4.2-4.7-6.8V4.5H23.1z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x32_">
|
||||
<path d="M16,6.1h-3.5c-0.9,0-1.8,0.2-2.5,0.7S9,7.9,9,8.6v1.3c0,1.8,2.3,4,6.8,6.8l0.5,0.3c3.7,2.3,6.8,5.6,6.8,6.8v2.5H2v-2.5h14
|
||||
v-0.2c0-1.6-2.3-3.8-6.8-6.6l-0.5-0.3c-4.5-2.7-6.6-5-6.6-6.8V9.4c0-1.6,0.7-3,2.1-4.1S7.1,3.6,9,3.6h7c4.1,0,6.5,1.7,7,5.1h-3.5
|
||||
C19.4,6.9,18.2,6.1,16,6.1z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="セ">
|
||||
<path d="M23.1,2.1v2.2h-2.5v3.9h2.5v4.4h-2.5v10.1c0,3.1-1.3,5.2-4,5.2H1.9v-4.2h10.6c1.9,0,2.8-1.4,2.8-4.1v-7H7.9
|
||||
c0,0-0.1,0.5-0.1,1.2c-0.1,3,1.2,5,3.6,5.4V21C4.9,21.5,2,17.8,2,12.3V8.2h13.3V4.3H2V2.1H23.1z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ホ">
|
||||
<path d="M10.4,2.4H16v3.3h7.7v3.8H16v15.7h7.6v2.3H1.2v-2.3l3-13h4.5v1.4L6.2,25.2h4.2V9.6H2.7V5.7h7.7V2.4z M23.7,24.2h-2
|
||||
c-2.9-2.4-4.4-6.4-4.4-12h4.6c0,5.4,0.6,8.6,1.8,9.6V24.2z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ヒ">
|
||||
<path d="M2.3,25.9H15c4.3,0,7.7-2.4,7.7-8.2V4.1h-6.2V9H2.3v4h14v4.5c0,2.2-1.9,4.5-4.1,4.5H2.3V25.9z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="サ">
|
||||
<path d="M19.1,24v2.3c0,0-0.9,0.1-2,0.1c-5.4,0-8.7-1.5-10.8-4.6c-1.4-2-2.1-4.2-2.1-7.3c0-1,0.1-1.7,0.1-1.7H1.9v-4h2.5V3.6H10
|
||||
v5.2h4.4V3.7h5.5v5.1h3.2v4.1h-3.3v4.7h-5.7v-4.7H9.7c0,0-0.1,0.6-0.1,1.9c0,3.6,0.9,6.2,2.9,7.8S17.7,24.3,19.1,24z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="オ">
|
||||
<path d="M23.2,2.1v2.4H11.4v4h11v3.9h-8.7c0.1,2.3,0.6,4.5,1.5,6.6c1.6,3.5,4.1,5.7,7.7,6.5v2.1c-1.5,0-2.9-0.2-4.3-0.6
|
||||
c-3.3-1.1-5.8-3.4-7.6-6.7l-0.7,7.6H4.8v-6.7c0.4-1.1,0.7-4,0.8-8.8H1.8V8.5h3.9v-4H1.8V2.1H23.2z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="メ">
|
||||
<path d="M12.8,14.7l7.6-3.1V7.4l-8.7,3.3c-0.4-2-0.6-4.1-0.6-6.1H4.7C4.6,7.7,5,10.5,5.8,13l-4,1.5v4.7l5.7-2.3
|
||||
c3.2,5.3,8.9,8.3,15.5,8.6V23C17.9,23.1,14.6,19.6,12.8,14.7z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ラ">
|
||||
<path d="M16.7,25.4c-5.2,0-9.2-1.5-12.1-4.5c-1.2-1.2-2-2.7-2.6-4.5v-5.6h21v3.9H8c0.3,3.4,2,5.9,5.1,7.3c2,0.9,6.4,1.4,8.7,1.4
|
||||
v2.1h-5.1V25.4z M2.9,4.6V8h18.9V4.6H2.9z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="マ">
|
||||
<path d="M2.3,4.9c0,7.1,1.6,12,4.9,14.7c1.4,1.1,3,1.8,4.9,2l-1.5,3.6h6.2l4.8-11h-6.2l-2.2,4.6c-3.4-0.9-5.1-3.7-5.1-8.3
|
||||
c0,0,0.1-1.5,0.2-1.9h14.2V5L2.3,4.9z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="Z">
|
||||
<path d="M1.8,3.6h21.3v2.5L8.9,23.9h14.2v2.5H1.8v-2.5L16.1,6.1H1.8V3.6z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ヌ">
|
||||
<path d="M17.8,11.2V16l-5.1,2.2c2.5,3.1,6,4.8,10.5,5.1v2.5c-6.3-0.1-11.4-1.9-15.2-5.5L2,23v-4.8l3-1.4C3,13.4,2,9.2,2,4.1h20.2
|
||||
v4.1H8.7c0.2,2.2,0.7,4.3,1.7,6.3L17.8,11.2z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="_x37_">
|
||||
<path d="M18,16.7l-1,1.9l-0.9,1.9v5.8H8.8v-5.9c0-1.4,2.3-5.2,7-11.5V6.2H1.9V3.6H23V9C21.3,11.1,19.6,13.7,18,16.7z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ウ">
|
||||
<path d="M23,2.1v2.5h-7.8v3.9h8v9.4h-5.5v-5.4H7.8v5.3c0,3.7,2,6.2,6,7.3c0,0,2.4,0.6,6,0.6v2.2C12.3,27.9,7,26.2,4,22.6
|
||||
c-1.2-1.5-1.9-3.3-2.2-5.4V8.4h8V4.5h-8V2.1H23z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="ヨ">
|
||||
<path d="M1.8,3.6v22.8h21.4V3.6H1.8z M19.2,7v6.7H5.8V7H19.2z M5.8,23v-6.7h13.5V23H5.8z"/>
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
</g>
|
||||
<g id="エ">
|
||||
<rect class="st0" width="25" height="30"/>
|
||||
<path d="M15.3,8.9v11.6h7.8v4.2H1.9v-4.2h7.8V8.9H2.9V5.3H22v3.6H15.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Collected_glyphs">
|
||||
<g id="Recovered">
|
||||
<path class="st1" d="M263.7,437.6v2.5h-7.8v3.9h8v9.4h-5.5V448h-9.8v5.3c0,3.7,2,6.2,6,7.3l2.8,0.5l3.3,0.1v2.2
|
||||
c-7.5,0-12.8-1.8-15.8-5.3c-1.2-1.5-1.9-3.3-2.2-5.4V444h8v-4h-8v-2.4H263.7z"/>
|
||||
<path class="st1" d="M404.4,600.8v5.1h9.9v-5.1H404.4 M404.4,608.5v5.1h9.9v-5.1H404.4z"/>
|
||||
<path class="st1" d="M418.6,559.1v-3.6h-11.2v3.6H418.6 M418.6,552.1v-3.6h-11.2v3.6H418.6z"/>
|
||||
<path class="st1" d="M201.4,395.3l0.5,3.1l8.6-3.3v4.2l-7.6,3.1c2,5.5,5.4,8.2,10.2,8.2v2.5c-2.1-0.1-4-0.5-5.8-1.1
|
||||
c-4.3-1.4-7.6-3.9-9.7-7.5l-5.7,2.3v-4.7l4-1.5c-0.8-2.4-1.2-5.2-1.1-8.4l6.4-0.1L201.4,395.3z"/>
|
||||
<path class="st1" d="M460.9,441.2c0,7.1,1.6,12,4.9,14.7c1.4,1.1,3,1.8,4.9,2l-1.5,3.6h6.2l4.8-11H474l-2.2,4.6
|
||||
c-3.4-0.9-5.1-3.7-5.1-8.3l0.2-1.9h14.2v-3.6L460.9,441.2z"/>
|
||||
<path class="st1" d="M317.5,334.7v2.4h-11.7v4h11v3.9h-8.7c0.1,2.3,0.6,4.5,1.5,6.6c1.6,3.5,4.1,5.7,7.7,6.5v2.1
|
||||
c-1.5,0-2.9-0.2-4.3-0.6c-3.3-1.1-5.8-3.4-7.6-6.7l-0.7,7.6h-5.4v-6.7c0.4-1.1,0.7-4,0.8-8.8h-3.8v-4h3.9v-4h-3.9v-2.4h21.2V334.7
|
||||
z"/>
|
||||
<path class="st1" d="M429.1,442.4h-17.6v5.9c0,6.2,2.1,10.7,6.4,13.3c2.8,1.8,6.3,2.6,10.4,2.6h1.5l1.3-0.1v-2.3h-0.7h-0.7
|
||||
c-2.6,0-4.8-0.5-6.6-1.6c-0.3-0.1-0.7-0.4-1-0.7l-1.3-1.2c-0.2-0.2-0.3-0.5-0.3-0.8c0-0.4,0.1-0.7,0.4-0.9l3-1.1l2.7-0.9v-3.4
|
||||
l-8,1.9c-0.7,0-1-2.2-0.8-6.8h6.8c1.5,3.2,3.3,5.4,5.4,6.5c0.8,0.5,1.7,0.7,2.7,0.8V451c-1.6-1.2-2.6-3-3.1-5.4
|
||||
C429.3,444.6,429.1,443.5,429.1,442.4z"/>
|
||||
<path class="st1" d="M491.1,659.7l-0.7-0.7h-4.7v-3.8h21.1v3.8h-9.1c-0.3,4,0.9,6.8,3.6,8.2c1.1,0.6,2.5,0.8,4.1,0.8v2.2h-0.9
|
||||
h-0.8c-3.4,0-6.2-0.8-8.3-2.5c-1.5-1.2-2.7-2.8-3.5-4.9l-0.4-1.5L491.1,659.7 M485.7,648.5v3.7h20.9v-3.7H485.7z"/>
|
||||
<path class="st1" d="M206.6,599v4.8l-5.1,2.2c2.5,3.1,6,4.8,10.5,5.1v2.5c-6.3-0.1-11.4-1.9-15.2-5.5l-6,2.7V606l3.1-1.4
|
||||
c-2-3.4-3-7.6-3-12.7h20.2v4.1h-13.6c0.2,2.2,0.7,4.3,1.7,6.3L206.6,599z"/>
|
||||
<path class="st1" d="M536.8,597.8v-2.5h-21.1v2.3h10.9v4h-10.9v4.1h3.9v3.8c0.1,4.5,1.7,7.7,4.8,9.6c2.1,1.3,4.7,1.9,7.9,1.9h1.4
|
||||
l1.3-0.1v-2.2h-2.8c-2.5,0-4.4-1.4-5.5-4.3c-0.7-1.8-1.1-4.1-1.1-6.9v-1l0.1-0.8h2.6c2.5,3.4,5.1,5.1,7.8,5.1l0.8-0.1v-2.1
|
||||
c-1.6-0.5-2.8-1.7-3.7-3.8c-0.2-0.4-0.4-0.9-0.6-1.4l-0.4-1.6v-4.1L536.8,597.8z"/>
|
||||
<path class="st1" d="M296.5,443h5.4v7.4c0,5.6,2.4,9.2,7.2,11c1.9,0.8,4.3,1.1,7.2,1.1v2.3c-8.3,0-14.1-2.2-17.3-6.6
|
||||
c-1.4-1.8-2.2-4.1-2.5-6.6L296.5,443 M305.7,442.9h4.9l-1.4,10.6h-4.9L305.7,442.9 M316.3,453.5h-4.9l1.4-10.6h4.9L316.3,453.5z"
|
||||
/>
|
||||
<path class="st1" d="M526.2,406.9v-4.8h-7v4.8H526.2z"/>
|
||||
<path class="st1" d="M461.5,592.3h5.7v5.2h4.4v-5.1h5.5v5.1h3.2v4.1H477v4.7h-5.7v-4.7h-4.4v1v0.9c0,3.6,1,6.2,2.9,7.8
|
||||
c1.3,1.1,3,1.6,4.9,1.6l1.6-0.1v2.3l-1,0.1h-1c-5.1,0-8.7-1.5-10.8-4.6c-1.4-2-2.1-4.4-2.1-7.3v-0.8l0.1-0.7v-0.1H459v-4.1h2.5
|
||||
V592.3z"/>
|
||||
<path class="st1" d="M416.3,389.1h5.6v3.3h7.7v3.8h-7.7v15.7h7.6v2.3h-22.4v-2.3l3-13h4.5v1.4l-2.5,11.6h4.2v-15.7h-7.7v-3.8h7.7
|
||||
L416.3,389.1 M429.6,410.8h-2c-2.9-2.4-4.4-6.4-4.4-12h4.6c0,5.4,0.6,8.6,1.8,9.6V410.8z"/>
|
||||
<path class="st1" d="M531.2,490.7c0,0.5,0.3,0.9,1,1.2h7v4h-13.6c0.2,1.6,1.1,3.1,2.5,4.4c2.4,2.5,6.1,4.1,11.1,4.9v2.5
|
||||
c-3.8-0.3-6.4-0.8-7.7-1.4v5.4h7.7v2.3H518v-2.3h7.8V505l-7.7,3.4V504l4.9-2.3c-2.2-1.8-3.7-4.1-4.4-6.7c-0.4-1-0.5-2.1-0.6-3.3
|
||||
h4.8h2.2c0.6,0,0.8-0.4,0.8-1.3v-2.2h5.4V490.7z"/>
|
||||
<path class="st1" d="M332.3,646.8c0.3,0,0.5,0.2,0.7,0.6v2.5c0,0.5-0.2,0.7-0.7,0.8H322v3.8h10.4c0.3,0,0.5,0.3,0.5,0.9v3.9
|
||||
c0,0.6-0.5,1.4-1.5,2.4H322v4h12.7c2.2,0,3.5-1.9,4-5.7v-5.2h4.3v-3.9h-4.2v-4.1h3.9v-3h-20.6v3.1L332.3,646.8L332.3,646.8z"/>
|
||||
<path class="st1" d="M475.3,495.9v11.6h7.8v4.2h-21.3v-4.2h7.8v-11.6h-6.8v-3.6H482v3.6H475.3z"/>
|
||||
<path class="st1" d="M261.4,545.9v2.2h-2.5v3.9h2.5v4.4h-2.5v10.1c0,3.1-1.2,4.9-3.6,5.2h-15.1v-4.2h10.6c1.9,0,2.8-1.4,2.8-4.1
|
||||
v-7h-7.4l-0.1,0.6v0.7c0,3.2,1.2,5,3.6,5.4v1.7h-0.6h-0.7c-2,0-3.7-0.5-5.1-1.5c-2-1.4-3-3.9-3-7.3v-4h13.3v-3.9h-13.3v-2.2
|
||||
L261.4,545.9L261.4,545.9z"/>
|
||||
<path class="st1" d="M260.4,616c-5.2,0-9.2-1.5-12.1-4.5c-1.2-1.2-2-2.7-2.6-4.5v-5.6h20.9v3.9h-15c0.3,3.4,2,5.9,5.1,7.3
|
||||
c2,0.9,4.4,1.4,7.2,1.4h0.7h0.7v2.1h-4.9 M246.6,595.3v3.3h18.9v-3.3H246.6z"/>
|
||||
<path class="st1" d="M523,550.3l-1.6,10.6h-4.8l1.6-10.6H523 M528.9,561H524l1.6-10.6h4.8L528.9,561z"/>
|
||||
<path class="st1" d="M463.6,362.8h12.7c3.4,0,5.7-1.4,6.9-4.1c0.5-1.1,0.7-2.5,0.8-4.1V341h-6.2v4.9h-14.2v4.1h14v4.5
|
||||
c0,2-1.1,3.5-3.4,4.5h-10.6L463.6,362.8L463.6,362.8z"/>
|
||||
<path class="st1" d="M373,337.6h-14.7v12.8h17.4v4.2h-21.4v-21.1H373V337.6z"/>
|
||||
<path class="st1" d="M428.6,352.7v-4.4h-21v4.4H428.6 M427.8,336.8v-4.4h-19v4.4H427.8z"/>
|
||||
<path class="st1" d="M410,493.5h-3.8v23.4h3.8V493.5z"/>
|
||||
<path class="st1" d="M374.3,557.1v-3.6h-19.9v3.6H374.3z"/>
|
||||
<path class="st1" d="M365.3,504.4l-10.5-7.3h6.2l10.8,7.3l-10.8,7.2h-6.2L365.3,504.4z"/>
|
||||
<path class="st1" d="M454.5,660.7l-1,1.9l-0.9,1.9v5.8h-7.3v-5.9c0-1.4,2.3-5.2,7-11.5v-2.8h-13.9v-2.6h21.1v5.4
|
||||
C457.8,655.1,456.1,657.7,454.5,660.7z"/>
|
||||
<path class="st1" d="M203.4,517.1v-5.2h-7.3v5.2H203.4 M203.4,504.3v-5.2h-7.3v5.2H203.4z"/>
|
||||
<path class="st1" d="M198.8,546.1h8.3c4.4,0.9,6.5,2.9,6.5,6v3.6c0,2.1-1.1,3.7-3.2,4.7c-1.2,0.5-2.3,0.8-3.3,0.8h-2.3h-3.1
|
||||
c-0.6,0-1.3-0.5-2.1-1.5c-0.2,2.6,0.8,4.5,2.9,5.6c1.4,0.8,3.2,1.1,5.5,1.1h1h0.9v2.5h-6.5c-4,0-7.1-1.4-9.3-4.1
|
||||
c-0.9-1.2-1.5-2.5-1.9-4.1v-8.6C192.3,549,194.5,547,198.8,546.1 M203.1,548.8h-0.3c-2.2,0-3.3,1.2-3.3,3.6v2.6
|
||||
c0,1.6,0.6,2.7,1.7,3.3c0.5,0.3,1.1,0.5,1.7,0.5h0.1c2.3-0.2,3.4-1.5,3.3-3.9v-2.6c0-1.6-0.5-2.6-1.6-3.2L203.1,548.8z"/>
|
||||
<path class="st1" d="M250.2,493.9h6v5.3h9.9v4.1h-10c-0.1,2.1,0.2,4.1,1,5.8c1.4,3.3,4,5.1,7.8,5.3v2.1l-0.7,0.1h-0.7
|
||||
c-2.9,0-5.5-0.7-7.7-2.1c-3.5-2.2-5.4-5.9-5.8-11.2h-4.9v-4.1h5L250.2,493.9z"/>
|
||||
<path class="st1" d="M305.3,607.2c-2.7,0-4.7-1.3-6-3.8c-0.6-1-0.9-2.3-1.1-3.8v-7.5h21v4h-15.4l-0.1,1.9v1.7
|
||||
c0,3.4,1.2,5.1,3.6,4.9V599h6.2v5.9c0,3.5,1.9,5.6,5.8,6.3v2c-5,0-8.8-2-11.5-6H305.3z"/>
|
||||
<path class="st1" d="M469.2,544.8h6v3.5h3.6v3.7h-3.6v0.1c-0.1,2.4,0,4.5,0.3,6.3c0.6,4.3,2.1,6.6,4.4,7v1.9h-1.3
|
||||
c-1.8-0.4-3.3-1.1-4.7-2.2c-3.1-2.7-4.6-7-4.6-13.1l0,0h-4.6c-0.4,0.1-0.7,0.6-0.7,1.4v8.7c0,0.8,0.4,1.5,1.1,1.8h3.2v3.7h-5.4
|
||||
c-2.3,0-3.6-1.4-4.1-4.3v-15h10.5L469.2,544.8L469.2,544.8z"/>
|
||||
<path class="st1" d="M351.9,596.2h5.9c-0.1,4,0.2,7.4,1.1,10.2c2,6.8,6,10,12.1,9.8v2.6h-0.6h-0.7c-4.1,0-7.6-0.9-10.6-2.8
|
||||
c-5-3.2-7.4-8.6-7.4-16.3v-1.8L351.9,596.2 M364.4,607.5l2.6-11.2h6.5l-2.9,11.2H364.4z"/>
|
||||
<path class="st1" d="M309.7,493.8h5.9l-0.4,3.4h6.8v3.8h-7.3l-0.8,5.9h8v3.8h-8.5l-0.7,5.9h-5.9l0.7-5.9h-6.8v-3.8h7.3l0.8-5.9
|
||||
h-8.1v-3.8h8.6L309.7,493.8z"/>
|
||||
<path class="st1" d="M275.9,650.8c0.2,6.2,2.1,10.5,5.8,12.8c1.5,1,3.3,1.5,5.4,1.7v2.2c-5.4,0-9.6-1.6-12.8-4.8l-3.2,4.9H266
|
||||
v-1.1l5-8.7c-0.7-1.2-1.3-3.4-1.7-6.7l-0.3-2.2l-0.2-2.5H287v4.4L275.9,650.8L275.9,650.8z"/>
|
||||
<path class="st1" d="M200,341.4h6.1l6.9,20.7h-8.7l-8.7-1.7L195,362h-5.4v-1.5l4.7-12.1h5.8l-3,8l8.6,1.6L200,341.4z"/>
|
||||
<path class="st1" d="M542.2,352.5v-3.6h-9.7v3.6H542.2 M528,352.5v-3.6h-9.7v3.6H528z"/>
|
||||
<path class="st1" d="M303.4,554.4l10.5,7.2h-6.2l-10.8-7.2l10.8-7.3h6.2L303.4,554.4z"/>
|
||||
<path class="st1" d="M370.7,446.4l-5.2,2.4l5.2,2.4l-1.1,2.5l-5.6-2.6v5h-3.7v-4.9l-5.4,2.6l-1.2-2.5l5.2-2.4l-5.2-2.4l1.1-2.6
|
||||
l5.5,2.5v-4.7h3.7v4.7l5.6-2.6L370.7,446.4z"/>
|
||||
<path class="st1" d="M263.8,354v4.6l-21.1,1.8v-4.3L263.8,354 M263.8,338.5v4.6l-21.1,1.9v-4.3L263.8,338.5 M262.2,350.7
|
||||
l-17.8,1.7v-4l17.8-2.1V350.7z"/>
|
||||
<path class="st1" d="M305.9,408.8v-10.1h-3.7v10.1H305.9 M305.9,395v-8.8h-3.7v8.8H305.9z"/>
|
||||
<path class="st1" d="M356.6,397.2v-2.8l13.7-12.4h7.5v25h-21.2v-2.3h13.9v-7.4h-13.9 M360.2,394.5h10.2v-9.3L360.2,394.5z"/>
|
||||
<path class="st1" d="M471.2,392.5h8.3c4.4,0.9,6.5,2.9,6.5,6c0,2.1-1.1,3.7-3.2,4.6c-1.1,0.5-2.2,0.8-3.3,0.8l1.6,0.3l1.7,0.6
|
||||
c2.1,0.9,3.2,2.5,3.2,4.6c0,3.1-2.2,5.1-6.5,6h-8.3c-4.4-0.9-6.6-2.9-6.6-6c0-2.1,1.1-3.6,3.2-4.6c1.1-0.5,2.2-0.8,3.3-0.8
|
||||
c-1,0-2.1-0.3-3.3-0.8c-2.1-1-3.2-2.5-3.2-4.6C464.6,395.4,466.8,393.4,471.2,392.5 M475.4,405.4h-0.3c-2.2,0.1-3.3,1.2-3.3,3.6
|
||||
s1.1,3.7,3.4,3.9h0.1c2.3-0.2,3.4-1.5,3.4-3.9S477.6,405.4,475.4,405.4 M475.4,395.3h-0.3c-2.2,0.1-3.3,1.2-3.3,3.6
|
||||
s1.1,3.6,3.4,3.9h0.1c2.3-0.3,3.4-1.6,3.4-3.9C478.7,396.5,477.6,395.3,475.4,395.3z"/>
|
||||
<path class="st1" d="M384.6,644.8h8.3c4.4,0.9,6.5,2.9,6.5,6v10.9c0,3.2-2.2,5.2-6.5,6h-8.3c-4.4-0.8-6.5-2.8-6.5-6v-10.9
|
||||
C378,647.7,380.2,645.7,384.6,644.8 M388.2,665.1l0.5,0.1h0.1c2.3-0.2,3.4-1.5,3.4-3.8V653l-6.1,10.9c0.4,0.5,0.9,0.9,1.7,1.1
|
||||
L388.2,665.1 M388.8,647.6h-0.3c-2.2,0.1-3.3,1.2-3.3,3.5v8.3l5.8-11.1C390.5,647.8,389.8,647.6,388.8,647.6z"/>
|
||||
<path class="st1" d="M249.2,415v-19.8h-3.5v-2.6l7.2-2.7h3.7V415H249.2z"/>
|
||||
<path class="st1" d="M225.2,644.8h-3.5c-0.9,0-1.8,0.2-2.5,0.7s-1.1,1.1-1.1,1.8v1.3c0,1.8,2.3,4,6.8,6.8l0.5,0.3
|
||||
c3.7,2.3,6.8,5.6,6.8,6.8v2.5h-21.1v-2.5h14.1v-0.2c0-1.6-2.3-3.8-6.8-6.6l-0.5-0.3c-4.5-2.8-6.6-5.1-6.6-6.8v-0.5
|
||||
c0-1.6,0.7-3,2.1-4.1c1.4-1.2,2.9-1.7,4.8-1.7h7c4.1,0,6.5,1.7,7,5.1h-3.5C228.5,645.6,227.4,644.8,225.2,644.8z"/>
|
||||
<path class="st1" d="M193.6,453h14.2l-10.7-5.1v-2.7h7.2c1.1,0,1.8-0.3,2.4-0.9c0.5-0.6,0.8-1,0.8-1.4v-5.2c0-0.6-0.1-1.2-0.7-1.7
|
||||
s-1.5-0.6-2.4-0.6h-3c-2.9,0-3.4,1.6-4.1,2.2h-3.5c0.5-3.4,2.9-5.1,7.1-5.1h7.1c1.9,0,3.6,0.5,5,1.5s2.1,2.2,2.1,3.6v5.1
|
||||
c0,1.2-0.7,2.3-2,3.4s-3,1.7-5.1,1.7h-3.5l10.6,5.1v2.5h-21.3V453H193.6z"/>
|
||||
<path class="st1" d="M512.5,439.3h13.9l0.2-1.8h5.8l-0.2,1.8h3.3v4h-3.8l-1.8,14.9h5.6v2.3h-20.8v-2.3h9.7l1.5-14.9h-7
|
||||
c0,3.7,1.5,6.6,4.4,8.5v1.9c-4.7,0-8-2.4-9.7-7.3C513,444.5,512.6,442.1,512.5,439.3z"/>
|
||||
</g>
|
||||
<g id="Reconstructed">
|
||||
<path class="st1" d="M306.8,229.6v22.8h21.4v-22.8H306.8z M324.3,233v6.7h-13.5V233H324.3z M310.8,249v-6.7h13.5v6.7H310.8z"/>
|
||||
<path class="st1" d="M269.9,230.9h21.3v2.5L277,251.1h14.2v2.5h-21.3v-2.5l14.2-17.7h-14.2L269.9,230.9L269.9,230.9z"/>
|
||||
<path class="st1" d="M210.5,239.8H200c-1,0-1.8,0.2-2.5,0.7s-1,1.1-1,1.8v5.1c0,0.7,0.3,1.3,1,1.8s1.5,0.7,2.5,0.7h3.5
|
||||
c2.2,0,3.3-0.8,3.5-2.5h3.5c-0.5,3.4-2.9,5.1-7,5.1h-7c-1.9,0-3.6-0.5-4.9-1.5s-2.1-2.2-2.1-3.6v-5.1c0-1.4,0.7-2.6,2.1-3.6
|
||||
s3-1.5,5-1.5h7v-5.1h-14v-2.5h21.1v10.2H210.5z"/>
|
||||
<path class="st1" d="M234.4,229.7h5.9c-0.1,4,0.2,7.4,1.1,10.2c2,6.8,6,10,12.1,9.8v2.6h-0.6h-0.7c-4.1,0-7.6-0.9-10.6-2.8
|
||||
c-5-3.2-7.4-8.6-7.4-16.3v-1.8L234.4,229.7 M254.5,241h-6.2l-0.1-11.2h6.5L254.5,241z"/>
|
||||
<polygon class="st1" points="364.6,238 358.2,238 358.2,231.7 354.8,231.7 354.8,238 348.4,238 348.4,241.4 354.8,241.4
|
||||
354.8,247.8 358.2,247.8 358.2,241.4 364.6,241.4 "/>
|
||||
<path class="st1" d="M379.6,235.3v3.5c0,5.6,1.9,9.2,5.7,11c1.5,0.8,3.4,1.1,5.6,1.1v2.3c-6.8,0-11.5-2.2-14.2-6.6
|
||||
c-1.2-1.8-1.8-4.1-2-6.6v-8.5H396v9.4h-5v-5.4h-11.4V235.3z"/>
|
||||
<path class="st1" d="M417.7,230.3v3H429v-3H417.7z M417.7,237.3v3H429v-3H417.7z M429.5,254l-1.8,0.1h-1.8c-7.7,0-13.1-2.3-16.3-7
|
||||
c-1.9-2.8-2.8-6.1-2.8-10v-0.6v-0.6h2.6c-0.2,5.7,3,9.5,9.9,11.4c2.8,0.8,6.3,1.1,10.3,1v5.7"/>
|
||||
<path class="st1" d="M448.7,256.7l3.2-22.2h5.1l-3.2,22.2H448.7z M465.5,243.7c-0.3-2.6-0.5-5.6-0.5-9.1v-0.2h-5.6v0.1
|
||||
c0.3,8.6,1.9,14.8,4.8,18.7c0.8,1,1.7,1.8,2.6,2.4l1.7-2.6C467.2,251.7,466.1,248.6,465.5,243.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 24 KiB |
119
svg sources/texture_simplified.svg
Normal file
119
svg sources/texture_simplified.svg
Normal file
@@ -0,0 +1,119 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path d="M23.1,455.60001h17.7c9.3,1.89999,14,6.20001,14,12.79999v23.20001c0,6.70001-4.7,11-14,12.70001H23.1
|
||||
c-9.3-1.70001-14-6-14-12.70001v-23.20001C9.2,461.79999,13.8,457.5,23.1,455.60001 M44.2,401.10001L44.2,401.10001L19.7,401
|
||||
v7.40002c0,11.89999,4,19.70001,12.1,23.5c3.2,1.60001,7.2,2.30002,12,2.20001v5c-14.4,0-24.5-4.70001-30.2-14.10001
|
||||
c-2.5-3.89999-3.9-8.60001-4.3-14.10001v-18.20001h45.3v20H44.2V401.10001 M73.6,421.89999V416l29.1-26.5h15.9v53.10001H73.4v-5
|
||||
h29.7v-15.70001H73.6 M166,388.60001h0.10001V393.5c0,1.10001,0.10001,1.89999,1.5,2.5h15v8.60004h-29
|
||||
c0.5,3.39999,2.2,6.60001,5.2,9.5c5.09999,5.19998,13,8.69998,23.7,10.39999v5.20001
|
||||
c-8.10001-0.69998-13.60001-1.69998-16.5-2.89999v11.60001h16.5v5h-45.10001v-5H154v-14.20001l-16.39999,7.29999v-9.39999l10.5-5
|
||||
c-4.7-3.90002-7.89999-8.60001-9.5-14.20001c-0.7-2.19998-1.09999-4.5-1.2-6.89999H152.3c1.2,0,1.8-0.80002,1.7-2.70001v-4.70001
|
||||
H166 M219.39999,414.89999L235.19997,408v10.30002l-10.89999,4.79999c5.40001,6.60001,12.90001,10.19998,22.3,10.89999v5.29996
|
||||
c-13.39999-0.09998-24.2-4.09998-32.5-11.79999l-12.7,5.70001v-10.29999l6.7-3c-4.29999-7.30002-6.5-16.30002-6.39999-27.10001
|
||||
h43.10001V401.5h-29C216.2,406.19998,217.39999,410.69998,219.39999,414.89999 M276,403.10001v-11.29999h13.29999v11.29999h21.29999
|
||||
v8.70001h-21.29999C289,416.80002,290,434.5,308,435.60001v4.5c-17.20001,1.40002-30.79999-8.39999-32-28.29999h-10.39999v-8.70001
|
||||
H276 M343.10001,391.70001h17.70001c9.29999,1.89999,14,6.20001,14,12.79999v7.79999c0,4.5-2.29999,7.79999-6.79999,9.89999
|
||||
c-2.60001,1.10001-4.89999,1.70001-6.89999,1.70001h-5h-6.70001c-1.39999,0-2.79999-1.10001-4.39999-3.20001
|
||||
c-0.39999,5.60001,1.70001,9.5,6.20001,11.89999c2.89999,1.60001,6.79999,2.39999,11.70001,2.39999l2.20001-0.10001l2-0.10001
|
||||
v5.39999h-13.89999c-8.60001,0-15.10001-2.89999-19.79999-8.79999c-1.89999-2.5-3.20001-5.39999-4.10001-8.70001v-18.29999
|
||||
C329.20001,397.89999,333.89999,393.60001,343.10001,391.70001 M407.20001,391.5h17.60001c9.29999,1.89999,14,6.20001,14,12.79999
|
||||
c0,4.60001-2.20001,7.79999-6.70001,9.79999c-2.39999,1.10001-4.70001,1.70001-6.89999,1.79999l3.39999,0.60001l3.60001,1.20001
|
||||
c4.5,2,6.70001,5.29999,6.70001,9.79999c0,6.60001-4.70001,10.89999-14,12.79999h-17.60001
|
||||
c-9.39999-1.89999-14.10001-6.20001-14.10001-12.79999c0-4.5,2.29999-7.79999,6.79999-9.79999
|
||||
c2.39999-1.10001,4.70001-1.70001,6.89999-1.79999c-2.20001-0.10001-4.5-0.70001-6.89999-1.79999
|
||||
c-4.60001-2.10001-6.79999-5.29999-6.79999-9.79999C393.20001,397.79999,397.89999,393.5,407.20001,391.5 M458.29999,439.29999
|
||||
v-8.19998h21c4.79999,0,8.79999-4.89999,8.79999-9.60001v-9.60001h-29.79999v-8.70001H488.5v-10.39999h13.29999v29
|
||||
c0,12.29999-7.19998,17.5-16.39999,17.5H458.29999 M32,368.20001c4.3,3.29999,11.1,3.69998,14,3.09998v4.89999
|
||||
c0,0-1.8,0.20001-4.2,0.20001c-11.6,0-18.6-3.20001-23-9.70001c-2.9-4.20001-4.4-8.89999-4.4-15.5
|
||||
c0-2.10001,0.2-3.60001,0.2-3.60001H9.4v-8.79999h5.2v-11.10001h12.1v11.10001H36V328h11.8v10.80002h6.8v8.79999h-7v10.10001H35.5
|
||||
v-10.10001H26c0,0-0.2,1.20001-0.2,4C25.8,359.20001,27.7,364.80002,32,368.20001 M118.4,338.79999
|
||||
c-0.00002,0-0.00002-0.20001-0.00001-0.20001H94.6c0.5,13.29999,4.6,22.39999,12.4,27.39999c3.2,2.10001,7,3.30002,11.5,3.60001
|
||||
v4.70001c-11.5,0-20.60001-3.39999-27.3-10.29999l-6.7,10.39999H73.6v-2.29999L84.2,353.5c-2.2-2.60001-4.6-17-4.6-24.10001h38.8
|
||||
V338.79999 M137.3,327.70001H182.7v5.39999l-30.3,37.79999h30.3v5.39999H137.3v-5.39999l30.3-37.79999h-30.3V327.70001
|
||||
M219.8,378.79999V336.5h-7.5V331l15.3-5.70001H235.5v53.5H219.8 M310.5,349.29999H288c-2,0-3.79999,0.5-5.29999,1.60001
|
||||
S280.5,353.19998,280.5,354.69998v10.89999c0,1.5,0.70001,2.79999,2.20001,3.79999c1.5,1.10001,3.20001,1.60001,5.29999,1.60001h7.5
|
||||
c4.60001,0,7.10001-1.79999,7.5-5.39999h7.5c-1.10001,7.20001-6.10001,10.79999-15,10.79999h-15
|
||||
c-4.10001,0-7.60001-1.10001-10.5-3.20001c-3-2.10001-4.39999-4.70001-4.39999-7.60001v-10.89999c0-3,1.5-5.5,4.39999-7.60001
|
||||
s6.5-3.20001,10.60001-3.20001h15V333h-30v-5.39999h45v21.70001H310.5V349.29999 M359.5,333H352c-2,0-3.79999,0.5-5.29999,1.60001
|
||||
S344.5,336.89999,344.5,338.39999v2.70001c0,3.79999,4.79999,8.60001,14.5,14.60001l1,0.60001
|
||||
c7.89999,4.89999,14.5,11.89999,14.5,14.60001v5.39999h-45V371h30v-0.5c0-3.39999-4.79999-8.10001-14.5-14.10001l-1-0.60001
|
||||
c-9.70001-6-14.20001-10.79999-14.20001-14.60001v-1c0-3.39999,1.5-6.39999,4.39999-8.79999
|
||||
c2.89999-2.5,6.10001-3.70001,10.20001-3.70001h15c8.79999,0,13.79999,3.60001,15,10.79999H367
|
||||
C366.60001,334.79999,364.10001,333,359.5,333 M438.80002,327.70001v48.60001h-45.60001v-48.60001H438.80002z M495,328.70001
|
||||
c0,8.89999,4.20001,16.29999,7.40002,18.49997v5.5c-6.10001,0-13.5-7.10001-17.10001-15.60001h-14.5
|
||||
c0,14.89999,0.39999,14.70001,3.39999,14l15.60001-3.70001v7.20001l-12.20001,4.20001c-1,0.30002-1.10001,2.5-0.20001,3.70001
|
||||
c2.5,3.39999,9.5,8.29999,22,7.5v4.90002c-21.60001,2.19998-42.19998-6.39999-41.89999-33.60001v-12.60001H495 M28,199h8v50h-8V199
|
||||
M113.1,220.39999V227.5H99.5v13.60001h-7.1V227.5H78.8v-7.10001h13.7V206.8h7.1v13.59999H113.1z M175.7,213.10001l2.40001,5.39999
|
||||
L167,223.7L178.2,228.8L175.8,234.2l-12-5.5V239.3h-8v-10.40001l-11.60001,5.5L141.7,229l11.2-5.2L141.7,218.7l2.3-5.5l11.8,5.40001
|
||||
V208.7h8v10L175.7,213.10001 M241,201.5v8.89999h-31.39999v27.3h37.2v8.90001H201.2V201.5H241 M311.20001,198.60001v6.3h-24v-6.3
|
||||
H311.20001z M311.20001,213.3v6.3h-24v-6.3H311.20001z M263.70001,213.39999l0.10001-2.5h5.60001
|
||||
c-0.79999,21.10001,21.60001,27,43,26.39999v11.8C279.60001,252.5,263.60001,235.89999,263.70001,213.39999 M330.29999,202.39999
|
||||
l43.39999,0.2V210.2h-30.39999C343,211.10001,342.89999,214.3,342.89999,214.3c0,9.8,3.59998,15.7,10.79999,17.7l4.60001-9.8
|
||||
h13.10001l-10.29999,23.39999h-13.20001l3.29999-7.60001c-4-0.39999-7.5-1.8-10.39999-4.2
|
||||
C333.79999,228,330.29999,217.59999,330.29999,202.39999 M425.29999,237.3L413.20001,202h13L441,246.10001h-18.70001
|
||||
l-18.59998-3.70001l-1.20001,3.5H391v-3.2l9.89999-25.8h12.5l-6.39999,17L425.29999,237.3 M480.70001,223.39999
|
||||
C484.5,233.8,491.60001,241.3,502.70001,241v5.2c-14.10001-0.5-26.20001-6.90001-33.10001-18.3l-12.20001,4.89999v-10l8.39999-3.2
|
||||
c-1.69998-5.2-2.5-11.2-2.29999-17.8h13.70001c0,4.3,0.40002,8.8,1.20001,13l18.5-7v9L480.70001,223.39999 M54.4,172.2v9.5H9.7v-9.5
|
||||
h44.6H54.4z M12.2,147.7V138.3h40.5V147.7H12.2 M81.7,136.29999h10.9l-6.9,47.39999L74.8,183.7L81.7,136.29999z M109.5,136.3
|
||||
c0,7.39999,0.4,14.2,1.1,19.7c1.3,10.39999,3.5,17,6.6,19.89999L113.5,181.5c-7-3.39999-15.9-20-15.9-45.2H109.5 M137.10001,135.8
|
||||
h12.60001c-0.39999,9.10001,0,43.90001,28.2,42.7v5.5c-18,1.10001-41.40001-7.2-41.2-40.60001L137.10001,135.8 M163.8,159.8
|
||||
l5.60001-24h13.8l-6.10001,24H163.8 M216.5,154.89999h14.89999v10.2H216.5V154.89999 M266.79999,156.10001h42.39999v7.8h-42.39999
|
||||
V156.10001 M370.10001,144.60001L347.70001,160l22.39999,15.5H357l-23-15.39999l23-15.5H370.10001 M398,175.39999l22.39999-15.29999
|
||||
L398,144.60001h13.10001l23,15.5l-23,15.29999H398 M471.10001,135.60001h17.70001c9.29999,1.89999,14,6.2,14,12.8v23.2
|
||||
c0,6.7-4.70001,11-14,12.7h-17.70001c-9.29999-1.7-14-6-14-12.7v-23.2C457.20001,141.8,461.79999,137.5,471.10001,135.60001
|
||||
M27.5,107.3H17.1l3.4-22.7h10.3L27.5,107.3z M43.5,107.3H33.1l3.5-22.7h10.3L43.5,107.3 M85.4,82.4h21.2v10.8H85.4V82.4z
|
||||
M106.60001,98.8v10.9H85.4V98.8H106.60001 M182.5,115.4l-45.10001,3.9v-9.1l45.10001-4.7V115.4z M182.5,82.5l-45.10001,4v-9.1
|
||||
L182.5,72.6V82.5z M179.10001,98.6l-37.89999,3.7v-8.5l37.89999-4.4V98.6 M233,118.1c-11.10001,0-19.7-3.2-25.8-9.7
|
||||
c-2.5-2.6-4.3-5.8-5.5-9.7V86.9h44.59999v8.2h-32c0.60001,7.3,4.2,12.5,10.8,15.6c4.2,2,13.60001,2.9,18.5,2.9v4.5H233z M243.8,73.9
|
||||
V81h-40.2v-7.1H243.8 M266.60001,71.8h12.60001c-0.89999,14,2.70001,44.3,28.20001,42.7v5.5C272,121,264.5,95.9,266.60001,71.8z
|
||||
M309.5,95.8h-13.29999L296,71.8h13.79999L309.5,95.8 M377.5,99.89999h-20.70001v-7.7H377.5V99.89999z M326.5,99.8v-7.7h20.70001
|
||||
v7.7H326.5 M405,72.9v15.7c0,11.9,5.10001,19.7,15.39999,23.5c4.10001,1.6,9.20001,2.4,15.29999,2.2v5
|
||||
c-17.70001,0-30-4.7-36.89999-14.1c-3-3.9-4.70001-8.7-5.20001-14.1L393.5,72.9H405z M413,72.7h10.5l-2.89999,22.6h-10.39999
|
||||
L413,72.7 M435.60001,95.3h-10.39999l2.89999-22.6H438.5L435.60001,95.3 M466.70001,95.2H457.5v-8.1h45.10001v8.1h-19.39999
|
||||
c-1.29999,13.8,6.70001,19.4,16.39999,19.2v4.6c-19.79999,1.8-27.20001-10.9-28.60001-15.7
|
||||
C468.79999,95.6,468.60001,95.2,466.70001,95.2z M502.10001,73v7.9h-44.5V73H502.10001 M27.5,5.2h12v7H56v8.2H39.5v33.4h16.3v5H8v-5
|
||||
l6.4-27.7H24V29l-5.4,24.8h9V20.4H11v-8.2h16.5V5.2 M51.7,51.6c-6.2-5.1-9.4-13.6-9.4-25.7L52,26c-0.1,11.5,1.2,18.3,3.8,20.5
|
||||
l0.1,5.1H51.7z M94,41.7c0,0-5.3,0-5.3,0c-12.6,0-15.1-13.3-15.1-16.3v-16h44.8V18H85.6c-0.5,11.7,0.5,18.5,7.4,18.3V24.2h13.2v12.5
|
||||
c0,7.5,4.10001,12,12.3,13.5v4.3C107.9,54.5,99.7,50.3,94,41.7 M137.3,51h30.2l-22.8-11v-5.8H160c2.2,0,3.89999-0.6,5-1.8
|
||||
s1.7-2.2,1.7-3v-11c0-1.3-0.3-2.6-1.60001-3.6c-1.3-0.9-3.3-1.2-5.10001-1.2h-6.39999c-6.2,0-7.3,3.3-8.60001,4.8h-7.60001
|
||||
c1.2-7.2,6.2-10.8,15.10001-10.8h15.10001C171.7,7.6,175.2,8.7,178.2,10.8s4.5,4.7,4.5,7.6v10.9c0,2.5-1.39999,4.9-4.3,7.3
|
||||
s-6.5,3.6-10.8,3.6H160L182.60001,51v5.4h-45.39999L137.3,51L137.3,51 M201.3,4.5h45v5.3H229.7v8.3h17v20h-11.8V26.5h-21v11.3
|
||||
c0,7.9,4.2,13.1,12.8,15.6c0,0,5.2,1.3,12.8,1.3v4.8c-15.99998,0-27.2-3.7-33.59999-11.2C203.3,45.1,201.8,41.3,201.3,36.9V18
|
||||
h17.10001V9.7H201.3V4.5 M329.60001,4.5h44.99997v4.8h-5.39999v8.2h5.39999v9.4h-5.39999v21.5c0,6.6-2.79999,11.1-8.5,11.1
|
||||
h-31.39999v-8.9H352c4.10001,0,6.10001-2.9,6-8.7v-15h-15.79999c0,0-0.20001,1.1-0.20001,2.5
|
||||
c-0.09998,6.4,2.60001,10.6,7.70001,11.6v3.7c-13.89999,1.2-20.10001-6.7-20.10001-18.5v-8.7H358V9.3h-28.39999V4.5 M487.70001,51.1
|
||||
h-15.5V40h15.5V51.1z M487.70001,24h-15.5V12.9h15.5v11V24 M419.89999,26.7H412V7.9h7.89999V26.7z M419.89999,56.2H412V34.6h7.89999
|
||||
V56.2z M492.49997,265.5v9.10001c0.70001,5.39999,5.29999,13.60001,10,14.39999v4.39999c-6.20001,1.5-13.20001-3.5-18.5-10.70001
|
||||
h-5.5c-0.89999,12.5,1.39999,31.10001,20,27.60001V315c-4.19998,0.5-36.5,5.10001-32.79999-32.29999h-8.29999V274h23.20001v-8.5
|
||||
H457.5v-5h45.10001v5H492.49997z M31.9,271.29999L31.9,271.29999l-22.2,0.09998v-6.60001h43.90001v6.39999h-8.4v8.70001h9.2v8.20001
|
||||
h-9.2v11.10001c0,5.10001-2.7,12.10001-8.4,12.10001H9.7v-8.39999h19c2.2,0,4.6-2.80002,4.6-5.10001v-8.5
|
||||
c-0.1-1.20001-0.7-1.60001-1.4-1.60001H9.7v-8.10001h22.2c1.1-0.19998,1.4-0.79999,1.4-1.79999v-5.10001
|
||||
C33.3,271.79999,32.5,271.29999,31.9,271.29999 M116.3,275.10001H102v24.69998h16.7v8.90002H73.3v-8.90002H90v-24.69998H75.5
|
||||
v-7.80002h40.8V275.10001 M158.5,298.20001c-14.7,0.5-23-12.40002-23.09999-30.90002h29.60001l0.39999-3.79999H177.8l-0.5,3.79999
|
||||
h7.10001v8.60001H176.3l-3.8,31.70001h11.89999v5H140v-5h20.7l3.3-31.70001h-14.89999c0,8,3.2,14,9.39999,18.20001V298.20001
|
||||
M219.7,270.89999l0.8-7.19998h12.60001L232.2,270.89999h14.40001V279h-15.5l-1.70001,12.60001H246.5v8.10001h-18.10001
|
||||
L226.8,312.29999H214.2L215.8,299.70001h-14.5v-8.10001h15.59999L218.60001,279h-17.20001v-8.10001H219.7 M265.29999,260.5h0.00006
|
||||
v-0.20001h45.39999V265.5h-25v8.39999h23.39999v8.29999h-18.60001c0.20001,5,1.20001,9.70001,3.10001,14.10001
|
||||
c3.39999,7.60001,8.79999,12.29999,16.39999,14v4.5c-3.20001,0.10001-6.30002-0.39999-9.20001-1.29999
|
||||
c-7-2.39999-12.40002-7.19998-16.20001-14.29999l-1.39999,16.10001h-11.5v-14.20001c0.79999-2.20001,1.39999-8.5,1.79999-18.70001
|
||||
h-8.20001v-8.29999H273.5v-8.39999h-8.20001V260.5 M438.5,275.20001c-3.79999,4.5-7.5,10-10.79999,16.5l-2.10001,4.10001
|
||||
l-1.89999,4.10001v12.39999h-15.60001v-12.60001c0-3,5-11.10001,15-24.5v-5.89999h-29.70001v-5.60001H438.5V275.20001
|
||||
M364.69998,279.09998c-0.80002,16.30002,3.09998,28.30002,9.79999,28.70001v4.60001h-2.79999
|
||||
c-7.69998-1.69998-19.79999-9.09998-19.79999-33.29999h-8.79999c-1.19998,0-2.39999,1.29999-2.39999,2.89999v19.90002
|
||||
c0,1.70001,1,2.60001,2.39999,2.60001h6.79999v7.89999h-11.60001C333.5,312.40002,329.5,309,329.5,303.20001v-32h22.39999v-7.5
|
||||
h12.70001v7.5h7.79999v7.89999L364.69998,279.09998z M401.60001,335v14.29999h28.79999V335H401.60001z M430.39999,369v-14.29999
|
||||
h-28.79999V369H430.39999 M478.79999,179l1,0.2H480c4.79999-0.39999,7.20001-3.2,7.20001-8.2v-17.89999l-12.89999,23.2
|
||||
c0.79999,1.10001,2,1.89999,3.60001,2.39999L478.79999,179 M480.20001,141.60001H479.5
|
||||
c-4.60001,0.10001-6.89999,2.60001-6.89999,7.5v17.7L485,143.2C483.79999,142.10001,482.20001,141.5,480.20001,141.60001 M81.2,416
|
||||
h21.6v-19.79999L81.2,416 M352.20001,397.5H351.5c-4.70001,0.10001-7,2.60001-7,7.70001l0.10001,5.5
|
||||
c0,3.29999,1.20001,5.70001,3.60001,7.10001c1.10001,0.70001,2.20001,1.10001,3.60001,1.10001h0.29999
|
||||
c4.89999-0.5,7.20001-3.20001,7.10001-8.20001v-5.5c0-3.39999-1.20001-5.60001-3.5-6.70001L352.20001,397.5 M416.20001,419H415.5
|
||||
c-4.60001,0.10001-6.89999,2.70001-6.89999,7.60001c0,5.10001,2.39999,7.79999,7.20001,8.20001h0.20001
|
||||
c4.79999-0.39999,7.20001-3.20001,7.20001-8.20001C423.29999,421.60001,420.89999,419.10001,416.20001,419 M416.20001,397.39999
|
||||
H415.5c-4.60001,0.10001-6.89999,2.70001-6.89999,7.60001s2.39999,7.70001,7.20001,8.20001h0.20001
|
||||
c4.79999-0.60001,7.20001-3.29999,7.20001-8.20001C423.29999,400,420.89999,397.5,416.20001,397.39999 M30.8,499l1,0.20001H32
|
||||
C36.8,498.80002,39.2,496,39.2,491v-17.89999l-12.9,23.20001c0.8,1.10001,2,1.89999,3.6,2.39999L30.8,499 M32.2,461.60001h-0.7
|
||||
c-4.6,0.10001-6.9,2.60001-6.9,7.5v17.70001L37,463.20001C35.8,462.10001,34.2,461.5,32.2,461.60001z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
Reference in New Issue
Block a user