dev #84
|
@ -46,18 +46,67 @@ function generateNoiseTexture(width: number, height: number) {
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const m = new MeshStandardMaterial({
|
||||||
|
// alphaMap: pattern ? texture : null,
|
||||||
|
transparent: true,
|
||||||
|
opacity: 1,
|
||||||
|
roughness: 0.5,
|
||||||
|
metalness: 0,
|
||||||
|
side: DoubleSide,
|
||||||
|
})
|
||||||
|
|
||||||
|
const m_onBeforeCompile = (shader) => {
|
||||||
|
// Добавляем uniform переменную
|
||||||
|
shader.uniforms.customUniform = { value: 1.0 };
|
||||||
|
|
||||||
|
// Изменяем вершинный шейдер
|
||||||
|
shader.vertexShader = `
|
||||||
|
uniform float customUniform;
|
||||||
|
varying vec2 vPosition;
|
||||||
|
${shader.vertexShader}
|
||||||
|
`.replace(
|
||||||
|
`#include <begin_vertex>`,
|
||||||
|
`#include <begin_vertex>
|
||||||
|
vPosition = position.xy;
|
||||||
|
`
|
||||||
|
);
|
||||||
|
|
||||||
|
// Изменяем фрагментный шейдер
|
||||||
|
shader.fragmentShader = `
|
||||||
|
float random(float p) {
|
||||||
|
return fract(sin(p) * 10000.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float noise(vec2 p) {
|
||||||
|
return random((p.x + p.y) * 10000.0);
|
||||||
|
}
|
||||||
|
${shader.fragmentShader}
|
||||||
|
`
|
||||||
|
// .replace(
|
||||||
|
// `#include <map_fragment>`,
|
||||||
|
// `
|
||||||
|
// float noise_v = noise(diffuseColor.rg);
|
||||||
|
// float clamped_noise = clamp(noise_v, -0.15, 0.15);
|
||||||
|
// diffuseColor.rgb *= clamped_noise;
|
||||||
|
// #include <map_fragment>
|
||||||
|
// `
|
||||||
|
// )
|
||||||
|
.replace(
|
||||||
|
`#include <dithering_fragment>`,
|
||||||
|
`#include <dithering_fragment>
|
||||||
|
|
||||||
|
float noise_v = noise(gl_FragColor.rg);
|
||||||
|
float clamped_noise = clamp(noise_v, -0.05, 0.05);
|
||||||
|
gl_FragColor.rgb -= clamp(vec3(clamped_noise), 0.0, 1.0);
|
||||||
|
`
|
||||||
|
);
|
||||||
|
};
|
||||||
export const set_material = (scene: any, color: any, pattern: { pattern: patternTypes, count: number } | undefined = undefined) => {
|
export const set_material = (scene: any, color: any, pattern: { pattern: patternTypes, count: number } | undefined = undefined) => {
|
||||||
let c = color
|
let c = color
|
||||||
|
|
||||||
const material = new MeshStandardMaterial({
|
const material = m.clone()
|
||||||
color: new Color(c || '#9c9c00'),
|
material.color = new Color(c || '#9c9c00')
|
||||||
// alphaMap: pattern ? texture : null,
|
material.onBeforeCompile = m_onBeforeCompile
|
||||||
transparent: true,
|
|
||||||
opacity: 1,
|
|
||||||
roughness: 0.5,
|
|
||||||
metalness: 0,
|
|
||||||
side: DoubleSide,
|
|
||||||
})
|
|
||||||
|
|
||||||
const promises = []
|
const promises = []
|
||||||
if (pattern && pattern.pattern !== undefined) {
|
if (pattern && pattern.pattern !== undefined) {
|
||||||
|
@ -74,41 +123,6 @@ export const set_material = (scene: any, color: any, pattern: { pattern: pattern
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
material.onBeforeCompile = (shader) => {
|
|
||||||
// Добавляем uniform переменную
|
|
||||||
shader.uniforms.customUniform = { value: 1.0 };
|
|
||||||
|
|
||||||
// Изменяем вершинный шейдер
|
|
||||||
shader.vertexShader = `
|
|
||||||
uniform float customUniform;
|
|
||||||
varying vec2 vPosition;
|
|
||||||
${shader.vertexShader}
|
|
||||||
`.replace(
|
|
||||||
`#include <begin_vertex>`,
|
|
||||||
`#include <begin_vertex>
|
|
||||||
vPosition = position.xy;
|
|
||||||
`
|
|
||||||
);
|
|
||||||
|
|
||||||
// Изменяем фрагментный шейдер
|
|
||||||
shader.fragmentShader = `
|
|
||||||
float random(float p) {
|
|
||||||
return fract(sin(p) * 10000.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
float noise(vec2 p) {
|
|
||||||
return random((p.x + p.y) * 10000.0);
|
|
||||||
}
|
|
||||||
${shader.fragmentShader}
|
|
||||||
`.replace(
|
|
||||||
`#include <dithering_fragment>`,
|
|
||||||
`#include <dithering_fragment>
|
|
||||||
|
|
||||||
float noise_v = noise(gl_FragColor.rg);
|
|
||||||
gl_FragColor.rgb += vec3(noise_v);
|
|
||||||
`
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (scene) set_metaril_func(scene, material)
|
if (scene) set_metaril_func(scene, material)
|
||||||
else console.log(scene)
|
else console.log(scene)
|
||||||
|
|
Loading…
Reference in New Issue