shader test

This commit is contained in:
Kseninia Mikhaylova 2024-09-30 13:54:15 +03:00
parent 1dce9e7ea9
commit 32b6702efd
1 changed files with 58 additions and 44 deletions

View File

@ -46,11 +46,7 @@ function generateNoiseTexture(width: number, height: number) {
return texture;
}
export const set_material = (scene: any, color: any, pattern: { pattern: patternTypes, count: number } | undefined = undefined) => {
let c = color
const material = new MeshStandardMaterial({
color: new Color(c || '#9c9c00'),
const m = new MeshStandardMaterial({
// alphaMap: pattern ? texture : null,
transparent: true,
opacity: 1,
@ -59,22 +55,7 @@ export const set_material = (scene: any, color: any, pattern: { pattern: pattern
side: DoubleSide,
})
const promises = []
if (pattern && pattern.pattern !== undefined) {
const filename = getFilename(pattern.pattern)
if (filename) {
const texture = loaded_patterns[filename]
promises.push(texture)
texture.then((res: Texture) => {
res.wrapT = RepeatWrapping;
res.repeat.set(1, pattern.count);
res.needsUpdate = true
material.alphaMap = res
return res
})
}
}
material.onBeforeCompile = (shader) => {
const m_onBeforeCompile = (shader) => {
// Добавляем uniform переменную
shader.uniforms.customUniform = { value: 1.0 };
@ -100,15 +81,48 @@ export const set_material = (scene: any, color: any, pattern: { pattern: pattern
return random((p.x + p.y) * 10000.0);
}
${shader.fragmentShader}
`.replace(
`
// .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);
gl_FragColor.rgb += vec3(noise_v);
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) => {
let c = color
const material = m.clone()
material.color = new Color(c || '#9c9c00')
material.onBeforeCompile = m_onBeforeCompile
const promises = []
if (pattern && pattern.pattern !== undefined) {
const filename = getFilename(pattern.pattern)
if (filename) {
const texture = loaded_patterns[filename]
promises.push(texture)
texture.then((res: Texture) => {
res.wrapT = RepeatWrapping;
res.repeat.set(1, pattern.count);
res.needsUpdate = true
material.alphaMap = res
return res
})
}
}
if (scene) set_metaril_func(scene, material)
else console.log(scene)