dev #84

Merged
ksenia_mikhailova merged 141 commits from dev into main 2024-10-03 15:30:24 +03:00
11 changed files with 447 additions and 235 deletions
Showing only changes of commit d448b36d59 - Show all commits

View File

@ -178,10 +178,17 @@ a[href^="#"] {
}
&_calc {
@apply py-0;
@apply py-0 relative;
> .container:first-child {
@apply relative h-[50vh] min-h-[600px] justify-between;
> * {
@apply z-10
}
}
&-canvas {
@apply relative h-[50vh] min-h-[600px];
@apply absolute top-0 bottom-0;
}
}
@ -301,10 +308,10 @@ button {
}
&-item {
@apply flex flex-row gap-4 items-center justify-start xl:justify-center flex-wrap xl:flex-nowrap;
@apply flex flex-row items-center justify-start flex-wrap;
label {
@apply w-full xl:w-auto;
@apply w-full;
}
.icon {
@ -316,7 +323,7 @@ button {
}
&_checkbox {
@apply w-full xl:w-auto flex-row xl:flex-initial flex-nowrap
@apply w-full xl:w-auto flex-row xl:flex-initial flex-nowrap gap-4
}
input[type=range] {

View File

@ -1,59 +1,37 @@
<script setup lang="ts">
import { TresCanvas } from '@tresjs/core'
import { OrbitControls } from '@tresjs/cientos'
//@ts-ignore
import { useGLTF } from '@tresjs/cientos'
import { degToRad, radToDeg } from 'three/src/math/MathUtils.js';
import { Stats, OrbitControls } from '@tresjs/cientos'
import { degToRad } from 'three/src/math/MathUtils.js';
const fence_section = use_fence_section()
const section_count = use_section_count()
const extra_section = use_extra_section()
const max_size = use_max_size()
const lamelles_count = use_lamelles_count()
const lamelle_height = use_lamelle_height()
const defDistance = 3
const controlsState = reactive({
distance: section_count.value,
minDistance: 10,
maxDistance: 20,
minDistance: defDistance,
maxDistance: defDistance,
position: { x: 0, y: 0, z: 0 },
// enablePan: false,
minPolarAngle: degToRad(30),
maxPolarAngle: degToRad(80),
enablePan: false,
enableZoom: false,
minPolarAngle: degToRad(60),
maxPolarAngle: degToRad(90),
})
const cameraStat = reactive({
position: [-4, 2, 8],
position: [0, 0, 5],
aspect: 1920 / 600,
// fov: 40,
})
const pointLight = ref()
const loadAll = async () => {
const { scene: light } = await useGLTF('/models_light/zabor_so_svetom.glb')
pointLight.value = light.children[2].clone()
pointLight.value.intensity = pointLight.value.intensity * 0.05
pointLight.value.shadow.bias = -0.002
const j = 4
pointLight.value.shadow.mapSize.x = 512 * j
pointLight.value.shadow.mapSize.y = 512 * j
const k = 1
// pointLight.value.position.x = pointLight.value.position.x * k
// pointLight.value.position.y = pointLight.value.position.y * k
// pointLight.value.position.z = pointLight.value.position.z * k
pointLight.value.position.x = pointLight.value.position.x * k
pointLight.value.position.y = pointLight.value.position.z * k
pointLight.value.position.z = pointLight.value.position.z * k
}
const camera = ref("camera")
onMounted(() => {
cameraStat.aspect = window.innerWidth / (window.innerHeight * 0.5)
loadAll()
})
watch([section_count, extra_section], () => {
let v = (section_count.value + ~~(!!extra_section.value)) * 2
if (v < controlsState.minDistance) v = controlsState.minDistance;
if (v > controlsState.maxDistance) v = controlsState.maxDistance;
// (camera.value as any).position.normalize().multiplyScalar(v)
let v = (section_count.value + ~~(!!extra_section.value));
if (v <= defDistance) v = defDistance
controlsState.minDistance = v;
controlsState.maxDistance = v;
(camera.value as any).position.normalize().multiplyScalar(v)
})
</script>
<template>
@ -65,25 +43,16 @@ watch([section_count, extra_section], () => {
</div>
</template>
<Loader />
<TresCanvas clear-color="#ccc">
<Stats />
<TresCanvas shadows>
<TresPerspectiveCamera v-bind="cameraStat" ref="camera" />
<OrbitControls v-bind="controlsState" make-default />
<TresGroup>
<TresGroup :position-y="-0.5">
<Suspense>
<ModelParametric />
</Suspense>
</TresGroup>
<TresMesh receive-shadow name="ground">
<TresCircleGeometry :args="[50, 32]" :rotate-x="-Math.PI * 0.5" />
<TresShadowMaterial :opacity="0.2" />
</TresMesh>
<template v-if="pointLight">
<TresPointLight v-bind="pointLight.clone()" cast-shadow />
<TresPointLight v-bind="pointLight.clone()" :position-x="pointLight.position.x * -1"
:position-z="pointLight.position.z * -1" cast-shadow />
</template>
<TresAmbientLight intensity="10" />
</TresCanvas>
</ClientOnly>
</div>

View File

@ -151,69 +151,52 @@ const goal = (target: string, params: object) => {
</script>
<template>
<div class="container relative py-4">
<form class="form">
<div class="col-span-12 sm:col-span-6">
<div class="form-row">
<div class="form-item w-full">
<label for="length">Длина ламельного блока, мм</label>
<input disabled :value.input="`${form_state.length.toFixed(0)} мм`" class="w-28" />
<input id="length" type="range" class="xl:w-full" v-bind="parametric.length"
v-model="form_state.length" :disabled="form_state.auto_length" :ref="form_refs.length" />
</div>
<div class="form-item w-full">
<label for="height">Высота забора, мм</label>
<input disabled :value="`${form_state.height} мм`" class="w-28" />
<input id="height" type="range" class="xl:w-full" v-bind="parametric.height"
v-model="form_state.height" :ref="form_refs.height" />
</div>
<div class="col-span-3">
<div class="form-row">
<div class="form-item w-full">
<label for="length">Длина ламельного блока, мм</label>
<input disabled :value.input="`${form_state.length.toFixed(0)} мм`" class="w-28" />
<input id="length" type="range" class="xl:w-full" v-bind="parametric.length"
v-model="form_state.length" :disabled="form_state.auto_length" :ref="form_refs.length" />
</div>
<div class="form-item w-full">
<label for="height">Высота забора, мм</label>
<input disabled :value="`${form_state.height} мм`" class="w-28" />
<input id="height" type="range" class="xl:w-full" v-bind="parametric.height"
v-model="form_state.height" :ref="form_refs.height" />
</div>
<div class="form-item">
<label for="total_length">Общая длина забора, м</label>
<input type="number" id="total_length" v-bind="parametric.total_length" min=0
v-model="form_state.total_length" :ref="form_refs.total_length" />
</div>
<div class="form-item form-item_checkbox">
<input id="auto_length" type="checkbox" v-model="form_state.auto_length" />
<label for="auto_length">Автоматический подбор секции</label>
</div>
<div class="form-item form-item_checkbox">
<input id="remove_pillar" type="checkbox" v-model="form_state.remove_pillar" />
<label for="remove_pillar">Без столбов</label>
</div>
</div>
<div class="col-span-12 sm:col-span-6">
<div class="form-row">
<div class="form-item">
<label for="lamelle_color">Цвет ламелей</label>
<input id="lamelle_color" type="text" :value="getColorNameFromRal(lamelle_color)" class="w-60"
disabled />
<ColorPicker :cb="setLamelleColor" />
</div>
<div class="form-item">
<label for="pillar_color">Цвет столба</label>
<input id="pillar_color" type="text" :value="getColorNameFromRal(pillar_color)" class="w-60"
disabled />
<ColorPicker :cb="setPillarColor" />
</div>
</div>
</div>
<div class="col-span-3 col-start-10">
<div class="form-item">
<label for="lamelle_color">Цвет ламелей</label>
<input id="lamelle_color" type="text" :value="getColorNameFromRal(lamelle_color)" class="w-60"
disabled />
<ColorPicker :cb="setLamelleColor" />
</div>
<div class="form-item">
<label for="pillar_color">Цвет столба</label>
<input id="pillar_color" type="text" :value="getColorNameFromRal(pillar_color)" class="w-60" disabled />
<ColorPicker :cb="setPillarColor" />
</div>
</div>
<template v-if="(form_state.total_length * 1000) >= parametric.length.min">
<div class="col-span-12">
<div class="form-row">
<div class="form-item">
<label for="total_length">Общая длина забора, м</label>
<input type="number" id="total_length" v-bind="parametric.total_length" min=0
v-model="form_state.total_length" :ref="form_refs.total_length" />
</div>
<div class="form-item xl:w-2/4 text-sm xl:text-base">
<p v-if="form_state.total_length_mm < parametric.length.min" class="text-ioprim">
Выбранный размер забора слишком мал для расчета стоимости. Пожалуйста, выберите больший
размер, чтобы продолжить.
</p>
<p v-if="form_state.extra_section" class="text-ioprim">
Внимание! Дополнительная секция приводит к увеличению стоимости.
Рекомендуем вам изменить длину забора или длину секции!
</p>
</div>
</div>
<div class="form-row min-h-12 mt-2 xl:mt-0">
<div class="form-item form-item_checkbox">
<input id="auto_length" type="checkbox" v-model="form_state.auto_length" />
<label for="auto_length">Автоматический подбор секции</label>
</div>
<div class="form-item form-item_checkbox">
<input id="remove_pillar" type="checkbox" v-model="form_state.remove_pillar" />
<label for="remove_pillar">Без столбов</label>
</div>
</div>
</div>
<template v-if="(form_state.total_length * 1000) >= parametric.length.min">
<div class="col-span-12 xl:col-span-8 xl:col-start-3 grid calc_table">
<div class="grid grid-cols-6">
<div class="col-span-4 calc_table-maincell">Секции</div>
@ -250,7 +233,19 @@ const goal = (target: string, params: object) => {
<div class="col-span-12 text-center mb-4">
<button @click.prevent="toggleModal">Рассчитать</button>
</div>
</template>
</form>
<div class="col-span-12">
<div class="form-item xl:w-2/4 text-sm xl:text-base">
<p v-if="form_state.total_length_mm < parametric.length.min" class="text-ioprim">
Выбранный размер забора слишком мал для расчета стоимости. Пожалуйста, выберите больший
размер, чтобы продолжить.
</p>
<p v-if="form_state.extra_section" class="text-ioprim">
Внимание! Дополнительная секция приводит к увеличению стоимости.
Рекомендуем вам изменить длину забора или длину секции!
</p>
</div>
</div>
</div>
</template>
</div>
</template>

View File

@ -9,7 +9,6 @@ const fence_section = use_fence_section()
const section_count = use_section_count()
const extra_section = use_extra_section()
const remove_pillar = use_remove_pillar()
const max_size = use_max_size()
const lSize = lamelle_height.value
const bSize = 0.0235

View File

@ -1,5 +1,6 @@
<script setup lang="ts">
import { Box3, Vector3 } from 'three';
import { useLoop, useTresContext } from '@tresjs/core';
import { Box3, Object3D, Vector3 } from 'three';
import { degToRad } from 'three/src/math/MathUtils.js';
const props = defineProps(['number', 'count', 'models'])
@ -16,33 +17,52 @@ const rotate = () => {
}
}
const { seekByName } = useSeek()
const { scene } = useTresContext()
const { scene, camera } = useTresContext()
const section_count = use_section_count()
const extra_section = use_extra_section()
const fence_section = use_fence_section()
const max_size = use_max_size()
const lamelle_count = use_lamelles_count()
const lamelle_height = use_lamelle_height()
const total = ref((section_count.value + ~~(!!extra_section.value)))
const position = ref(new Vector3())
const clickable_positions = reactive({
'top': [position.value.x, (lamelle_count.value + 1) * lamelle_height.value, 0],
'lam': [position.value.x, position.value.y * 0.5, 0]
})
const clickable_pointers = ref<any[]>([])
const clickable_refs = ref<any>([])
Object.entries(clickable_positions).map(el => {
const p = props.models.pointer.clone()
p.position.set(...el[1])
p.updateMatrixWorld()
p.name = `clickable_${props.number}_${el[0]}`
clickable_pointers.value.push(p)
clickable_refs.value.push(ref(p.name))
})
const count_pos = () => {
total.value = (section_count.value + ~~(!!extra_section.value))
const line = seekByName(scene.value, `line_${props.number}`)
const line_size = new Vector3()
const line_pos = new Vector3()
const line_lpos = new Vector3()
if (line && line.children.length) {
line.updateMatrixWorld()
new Box3().expandByObject(line).getSize(line_size)
line.getWorldPosition(line_pos)
console.log(`line_${props.number}`, line, line_size, line_pos)
}
const line1 = seekByName(scene.value, `line_1`);
const line1 = seekByName(scene.value, `line_1_inner`);
const line1_size = new Vector3()
const line1_pos = new Vector3()
if (line1) {
new Box3().expandByObject(line1).getSize(line1_size)
line1.getWorldPosition(line1_pos)
console.log('first', line1, line1_size, line1_pos)
}
const k = ((line1_size.x / props.count) - line1_size.z) * 0.5
switch (props.number) {
@ -60,22 +80,67 @@ const count_pos = () => {
position.value.x = line1_size.x - k
break;
}
line?.updateMatrixWorld()
clickable_positions.top = [position.value.x, (lamelle_count.value + 1) * lamelle_height.value, 0];
clickable_positions.lam = [position.value.x, position.value.y * 0.5, 0];
}
watch(clickable_positions, () => {
clickable_refs.value.map((el: Ref<Object3D[]>) => {
const name = el.value[0].name.replace(`clickable_${props.number}_`, '')
if (name in clickable_positions) {
const p = clickable_positions[name as keyof typeof clickable_positions];
console.log(props.number, p, el.value[0].name)
el.value[0].position.set(p[0], p[1], p[2])
el.value[0].children[0].position.set(p[0], p[1], p[2])
el.value[0].updateMatrixWorld()
}
})
}, { deep: true })
onMounted(() => {
count_pos()
})
watch(() => [props.count, section_count.value, extra_section.value], count_pos)
watch(() => [props.count, fence_section.value, section_count.value, extra_section.value, lamelle_count.value],
count_pos,
{ flush: 'post' }
)
const { onBeforeRender } = useLoop()
onBeforeRender(() => {
clickable_refs.value.map((el: any) => {
if (el.value[0] && el.value[0].children) {
el.value[0].children[0].lookAt(camera.value?.position);
el.value[0].children[0].rotateX(degToRad(90));
el.value[0].children[0].rotateZ(degToRad(15));
const dis_to_cam = camera.value?.position.distanceTo(el.value[0].position);
if (dis_to_cam) {
const scaling = (0.66 * dis_to_cam) / 100
el.value[0].children[0].scale.set(scaling, scaling, scaling);
el.value[0].updateMatrixWorld()
}
}
})
})
</script>
<template>
<TresGroup :name="`line_${props.number}`" :rotate-y="rotate()" :position-x="position.x" :position-y="position.y"
:position-z="position.z">
<template v-for="i in props.count">
<template v-if="(i + (props.number - 1) * props.count) <= total"
:key="(i + (props.number - 1) * props.count)">
<ModelFence :index="i" :models="props.models"
:last_element="(i + (props.number - 1) * props.count) == total"
:first_element="i == 1 && props.count == 1" />
<TresGroup :name="`line_${props.number}_inner`">
<template v-for="i in props.count">
<template v-if="(i + (props.number - 1) * props.count) <= 1"
:key="(i + (props.number - 1) * props.count)">
<ModelFence :index="i" :models="props.models"
:last_element="(i + (props.number - 1) * props.count) == total"
:first_element="i == 1 && props.number == 1" />
</template>
</template>
</template>
</TresGroup>
<TresGroup name="pointer">
<template v-for="(p, i) in clickable_pointers">
<TresObject3D v-bind="p.clone()" :ref="clickable_refs[i]" :visible="false" />
</template>
</TresGroup>
</TresGroup>
</template>

View File

@ -1,27 +1,26 @@
<script setup lang="ts">
import {
PCFSoftShadowMap,
EquirectangularReflectionMapping,
CineonToneMapping,
Euler,
Mesh,
Group,
Object3D,
Vector3,
EquirectangularReflectionMapping,
Euler,
PMREMGenerator,
} from 'three';
import { GainMapLoader, } from '@monogrid/gainmap-js'
//@ts-ignore
import { useGLTF, } from '@tresjs/cientos'
import { getColorHexFromRal, type ralTypes } from '../ral';
import { degToRad, radToDeg } from 'three/src/math/MathUtils.js';
const pillar_color = use_pillar_color()
const lamelle_color = use_lamelle_color()
const section_count = use_section_count()
const lamelle_count = use_lamelles_count()
const extra_section = use_extra_section()
const max_size = use_max_size()
const { scene, renderer, camera } = useTresContext()
const { scene, renderer, camera, controls } = useTresContext()
renderer.value.toneMapping = CineonToneMapping
renderer.value.toneMappingExposure = 0.5
@ -29,13 +28,13 @@ renderer.value.shadowMap.enabled = true
renderer.value.shadowMap.type = PCFSoftShadowMap
const { scene: top_model } = await useGLTF('/models_one/verh_100.glb', { draco: true })
// const { scene: fence_model } = await useGLTF('/models_one/fence.glb', { draco: true })
const { scene: model_fence_top } = await useGLTF('/fence_one/top.glb')
const { scene: model_fence_center } = await useGLTF('/fence_one/center.glb')
const { scene: model_fence_bottom } = await useGLTF('/fence_one/bottom.glb')
const { scene: model_fence_inner } = await useGLTF('/fence_one/inner.glb')
const { scene: fastening_model } = await useGLTF('/models_one/krepleniye_planok (1).glb', { draco: true });
const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { draco: true });
const { scene: point_model } = await useGLTF('/models_one/pointer.glb');
[model_fence_top, model_fence_bottom].map((sc: Object3D) =>
sc.traverse((child: Object3D) => {
@ -44,6 +43,7 @@ const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { dr
}
})
)
point_model.traverse((el: Object3D) => el.position.set(0, 0, 0))
const top = ref(top_model)
const fence = ref(model_fence_center)
@ -52,6 +52,7 @@ const fence_bottom = ref(model_fence_bottom)
const fence_inner = ref(model_fence_inner)
const fastening = ref(fastening_model)
const lamelle = ref(lamelle_model)
const pointer = ref(point_model)
if (!pillar_color.value) {
const r = Math.floor(Math.random() * predefPillarColors.length)
@ -66,6 +67,8 @@ set_material(lamelle.value, getColorHexFromRal(lamelle_color.value));
(el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value)) });
[fence_inner].map(
(el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value), lamelle_count.value) });
set_material(pointer.value, getColorHexFromRal('5012'));
const { seek, seekAll } = useSeek()
watch(lamelle_color, () => {
@ -98,7 +101,6 @@ const size = ref(Math.ceil(total.value / 4))
const count = ref((total.value >= 4) ? size.value : total.value)
watch(() => [section_count.value, extra_section.value], () => {
console.log('parametric line clear')
total.value = (section_count.value + ~~(!!extra_section.value))
size.value = Math.ceil(total.value / 4);
count.value = (total.value >= 4) ? size.value : total.value;
@ -121,8 +123,9 @@ watch(() => [section_count.value, extra_section.value], () => {
n = 0
}
}
if (line?.children && n < line?.children.length) {
line.children = [...line?.children.slice(0, n)]
const inner = seek(line, 'name', line.name + '_inner');
if (inner?.children && n < inner?.children.length) {
inner.children = [...inner?.children.slice(0, n)]
}
});
})
@ -130,14 +133,34 @@ watch(() => [section_count.value, extra_section.value], () => {
watch(lamelle_count, () => {
[fence_inner].map(
(el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value), lamelle_count.value) });
camera.value?.lookAt(10, 10, 10)
})
const pmremGenerator = new PMREMGenerator(renderer.value);
pmremGenerator.compileEquirectangularShader();
onMounted(async () => {
const loader = new GainMapLoader(renderer.value)
const result = await loader.loadAsync([
'hdrmaps/hdr.webp',
'hdrmaps/hdr-gainmap.webp',
'hdrmaps/hdr.json',
])
if (renderer.value && camera.value) {
renderer.value.render(scene.value, camera.value)
}
const exrCubeRenderTarget = pmremGenerator.fromEquirectangular(result.renderTarget.texture);
const newEnvMap = exrCubeRenderTarget ? exrCubeRenderTarget.texture : null;
scene.value.environment = newEnvMap
scene.value.environmentIntensity = 1.5
result.renderTarget.texture.dispose();
})
</script>
<template>
<TresGroup name="base">
<template v-for="line in (total >= 4) ? 4 : 1" :key="`${line}_${count}`">
<ModelLine :models="{ top, fence, fence_top, fence_bottom, fence_inner, fastening, lamelle }" :number="line"
:count="count" />
<ModelLine :models="{ top, fence, fence_top, fence_bottom, fence_inner, fastening, lamelle, pointer }"
:number="line" :count="count" />
</template>
</TresGroup>
</template>

View File

@ -3,8 +3,8 @@ import type { ralTypes } from '@/components/ral'
export const predefPillarColors = ['3004', '7043', '6028', '5013', '8016', '1020', '3005', '4009']
export const predefLamelleColors = ['3009', '9003', '6027', '5024', '9001', '1012', '3007', '4007']
const n = 2
const min = 1300
const n = 4
const min = 1370
export const use_lamelle_height = () => useState<number>('lamelle_height', () => 0.115)
export const use_lamelles_count = () => useState('lamelles_count', () => 14)

327
package-lock.json generated
View File

@ -10,13 +10,14 @@
"@artmizu/yandex-metrika-nuxt": "^1.0.4",
"@monogrid/gainmap-js": "^3.0.5",
"@nuxt/image": "^1.7.0",
"@nuxtjs/robots": "^3.0.0",
"@nuxtjs/robots": "^4.0.0",
"@nuxtjs/sitemap": "^5.3.5",
"@nuxtjs/tailwindcss": "^6.12.0",
"@tailwindcss/typography": "^0.5.13",
"@tresjs/cientos": "^3.9.0",
"@tresjs/core": "^4.0.2",
"@tresjs/nuxt": "^2.1.2",
"@tresjs/post-processing": "^0.7.1",
"consola": "^3.2.3",
"marked": "^12.0.2",
"nuxt": "^3.11.2",
@ -1379,9 +1380,10 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
@ -2029,12 +2031,93 @@
}
},
"node_modules/@nuxtjs/robots": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-3.0.0.tgz",
"integrity": "sha512-qsHGW1KXBvV5Kq7u3huPnFCUTbHS4Fk8Za2mNPgmUXcwLgp3exvhPtdZfIdjrCF/aZk3A8OZONNmGghs6CecBA==",
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-4.1.7.tgz",
"integrity": "sha512-1rz2oyBNmpfIzqNG9LfGft+H8Wpp1BMmPyNhkm7BuG/jUXTBFaCh6HDeK6Otx2y53Z9JtCDhiIs/JHj/L4WLPw==",
"license": "MIT",
"dependencies": {
"@nuxt/kit": "^3.0.0",
"h3": "^1.0.1"
"@nuxt/devtools-kit": "^1.4.1",
"@nuxt/kit": "^3.13.1",
"consola": "^3.2.3",
"defu": "^6.1.4",
"nuxt-site-config": "^2.2.16",
"nuxt-site-config-kit": "^2.2.16",
"pathe": "^1.1.2",
"pkg-types": "^1.2.0",
"sirv": "^2.0.4",
"std-env": "^3.7.0",
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/@nuxtjs/robots/node_modules/@nuxt/devtools-kit": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.5.0.tgz",
"integrity": "sha512-Q8sOquz9CoUMTABo6Bq+nkbNMZi+WVN4xpz1USZPZazcJhSj9imSmQRSycY2fBYqkfB1AKBRhm2UV2ujCQfw0Q==",
"license": "MIT",
"dependencies": {
"@nuxt/kit": "^3.13.2",
"@nuxt/schema": "^3.13.2",
"execa": "^7.2.0"
},
"peerDependencies": {
"vite": "*"
}
},
"node_modules/@nuxtjs/robots/node_modules/@nuxt/kit": {
"version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
"integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
"license": "MIT",
"dependencies": {
"@nuxt/schema": "3.13.2",
"c12": "^1.11.2",
"consola": "^3.2.3",
"defu": "^6.1.4",
"destr": "^2.0.3",
"globby": "^14.0.2",
"hash-sum": "^2.0.0",
"ignore": "^5.3.2",
"jiti": "^1.21.6",
"klona": "^2.0.6",
"knitwork": "^1.1.0",
"mlly": "^1.7.1",
"pathe": "^1.1.2",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"semver": "^7.6.3",
"ufo": "^1.5.4",
"unctx": "^2.3.1",
"unimport": "^3.12.0",
"untyped": "^1.4.2"
},
"engines": {
"node": "^14.18.0 || >=16.10.0"
}
},
"node_modules/@nuxtjs/robots/node_modules/@nuxt/schema": {
"version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
"integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
"license": "MIT",
"dependencies": {
"compatx": "^0.1.8",
"consola": "^3.2.3",
"defu": "^6.1.4",
"hookable": "^5.5.3",
"pathe": "^1.1.2",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"std-env": "^3.7.0",
"ufo": "^1.5.4",
"uncrypto": "^0.1.3",
"unimport": "^3.12.0",
"untyped": "^1.4.2"
},
"engines": {
"node": "^14.18.0 || >=16.10.0"
}
},
"node_modules/@nuxtjs/sitemap": {
@ -3991,6 +4074,47 @@
}
}
},
"node_modules/@tresjs/post-processing": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/@tresjs/post-processing/-/post-processing-0.7.1.tgz",
"integrity": "sha512-MLrjxR4rJ55MOYFKMEZ8aqh5no2/sOG1fdYk2B49Ntx2p2etyuVpI6e9BBAvrc4M/wktRHkQ2JNDbgMaCiJoMg==",
"license": "MIT",
"dependencies": {
"@tresjs/core": "^3.5.1",
"@unocss/core": "^0.58.0",
"@vueuse/core": "^10.6.1",
"postprocessing": "^6.33.4",
"three-stdlib": "^2.28.7"
},
"peerDependencies": {
"three": ">=0.133",
"vue": ">=3.3"
}
},
"node_modules/@tresjs/post-processing/node_modules/@tresjs/core": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/@tresjs/core/-/core-3.9.0.tgz",
"integrity": "sha512-6el70oXSduTvSA3XCI8/rQV2GzcgCLceZKA443CTU/MBPmRDULJ12q/UYl18Ij4CJ68rTqgVi0Da+WNMrs784A==",
"license": "MIT",
"dependencies": {
"@alvarosabu/utils": "^3.1.1",
"@vue/devtools-api": "^6.6.1",
"@vueuse/core": "^10.7.0"
},
"peerDependencies": {
"three": ">=0.133",
"vue": ">=3.3"
}
},
"node_modules/@tresjs/post-processing/node_modules/@unocss/core": {
"version": "0.58.9",
"resolved": "https://registry.npmjs.org/@unocss/core/-/core-0.58.9.tgz",
"integrity": "sha512-wYpPIPPsOIbIoMIDuH8ihehJk5pAZmyFKXIYO/Kro98GEOFhz6lJoLsy6/PZuitlgp2/TSlubUuWGjHWvp5osw==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@trysound/sax": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
@ -6457,9 +6581,10 @@
}
},
"node_modules/c12": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/c12/-/c12-1.11.1.tgz",
"integrity": "sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==",
"version": "1.11.2",
"resolved": "https://registry.npmjs.org/c12/-/c12-1.11.2.tgz",
"integrity": "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==",
"license": "MIT",
"dependencies": {
"chokidar": "^3.6.0",
"confbox": "^0.1.7",
@ -6471,7 +6596,7 @@
"ohash": "^1.1.3",
"pathe": "^1.1.2",
"perfect-debounce": "^1.0.0",
"pkg-types": "^1.1.1",
"pkg-types": "^1.2.0",
"rc9": "^2.1.2"
},
"peerDependencies": {
@ -8585,9 +8710,10 @@
]
},
"node_modules/ignore": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"license": "MIT",
"engines": {
"node": ">= 4"
}
@ -9510,11 +9636,12 @@
}
},
"node_modules/magic-string": {
"version": "0.30.10",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
"integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
"version": "0.30.11",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
"integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/magic-string-ast": {
@ -10666,64 +10793,67 @@
}
},
"node_modules/nuxt-site-config": {
"version": "2.2.15",
"resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-2.2.15.tgz",
"integrity": "sha512-V/gsWAeSWQi7FGoy6vicf6DXaaNJ/akail54dMWnrkcBre4PpBSwP7arZqmZZzj1mc0v7LoYqISr9qeXhcT1NA==",
"version": "2.2.18",
"resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-2.2.18.tgz",
"integrity": "sha512-NU39ANP1kvRBzpEWV496y/lf9PKVv3t1VKX3zmQ1POcbzAXU4gm0Mh5NKOaLEcoXj6bQnziFNqjzHX3DAA8Aog==",
"license": "MIT",
"dependencies": {
"@nuxt/devtools-kit": "^1.3.9",
"@nuxt/kit": "^3.12.3",
"@nuxt/schema": "^3.12.3",
"nuxt-site-config-kit": "2.2.15",
"@nuxt/devtools-kit": "^1.4.2",
"@nuxt/kit": "^3.13.1",
"@nuxt/schema": "^3.13.1",
"nuxt-site-config-kit": "2.2.18",
"pathe": "^1.1.2",
"pkg-types": "^1.1.3",
"pkg-types": "^1.2.0",
"sirv": "^2.0.4",
"site-config-stack": "2.2.15",
"ufo": "^1.5.3"
"site-config-stack": "2.2.18",
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/nuxt-site-config-kit": {
"version": "2.2.15",
"resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-2.2.15.tgz",
"integrity": "sha512-uN+JOijDt0u35rBhI3GhRHvPKncm2Nu/P3QMRIi+mwt4F/tQtlvLa1XUANkeEy8InTnPTVgs6dSDSqHP4sBXzg==",
"version": "2.2.18",
"resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-2.2.18.tgz",
"integrity": "sha512-iPtf2X1fvI9m9VV04edSqNGC2EzQ1aLB7F2/AOxYRktCJxHeTdBGifuNPc90EaEIOfWx+gf3lmRd4EppGoAMSA==",
"license": "MIT",
"dependencies": {
"@nuxt/kit": "^3.12.3",
"@nuxt/schema": "^3.12.3",
"pkg-types": "^1.1.3",
"site-config-stack": "2.2.15",
"@nuxt/kit": "^3.13.1",
"@nuxt/schema": "^3.13.1",
"pkg-types": "^1.2.0",
"site-config-stack": "2.2.18",
"std-env": "^3.7.0",
"ufo": "^1.5.3"
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/nuxt-site-config-kit/node_modules/@nuxt/kit": {
"version": "3.12.4",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.12.4.tgz",
"integrity": "sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==",
"version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
"integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
"license": "MIT",
"dependencies": {
"@nuxt/schema": "3.12.4",
"c12": "^1.11.1",
"@nuxt/schema": "3.13.2",
"c12": "^1.11.2",
"consola": "^3.2.3",
"defu": "^6.1.4",
"destr": "^2.0.3",
"globby": "^14.0.2",
"hash-sum": "^2.0.0",
"ignore": "^5.3.1",
"ignore": "^5.3.2",
"jiti": "^1.21.6",
"klona": "^2.0.6",
"knitwork": "^1.1.0",
"mlly": "^1.7.1",
"pathe": "^1.1.2",
"pkg-types": "^1.1.3",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"semver": "^7.6.3",
"ufo": "^1.5.4",
"unctx": "^2.3.1",
"unimport": "^3.9.0",
"unimport": "^3.12.0",
"untyped": "^1.4.2"
},
"engines": {
@ -10731,21 +10861,22 @@
}
},
"node_modules/nuxt-site-config-kit/node_modules/@nuxt/schema": {
"version": "3.12.4",
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.12.4.tgz",
"integrity": "sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==",
"version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
"integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
"license": "MIT",
"dependencies": {
"compatx": "^0.1.8",
"consola": "^3.2.3",
"defu": "^6.1.4",
"hookable": "^5.5.3",
"pathe": "^1.1.2",
"pkg-types": "^1.1.3",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"std-env": "^3.7.0",
"ufo": "^1.5.4",
"uncrypto": "^0.1.3",
"unimport": "^3.9.0",
"unimport": "^3.12.0",
"untyped": "^1.4.2"
},
"engines": {
@ -10753,12 +10884,13 @@
}
},
"node_modules/nuxt-site-config/node_modules/@nuxt/devtools-kit": {
"version": "1.3.9",
"resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.3.9.tgz",
"integrity": "sha512-tgr/F+4BbI53/JxgaXl3cuV9dMuCXMsd4GEXN+JqtCdAkDbH3wL79GGWx0/6I9acGzRsB6UZ1H6U96nfgcIrAw==",
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.5.0.tgz",
"integrity": "sha512-Q8sOquz9CoUMTABo6Bq+nkbNMZi+WVN4xpz1USZPZazcJhSj9imSmQRSycY2fBYqkfB1AKBRhm2UV2ujCQfw0Q==",
"license": "MIT",
"dependencies": {
"@nuxt/kit": "^3.12.2",
"@nuxt/schema": "^3.12.3",
"@nuxt/kit": "^3.13.2",
"@nuxt/schema": "^3.13.2",
"execa": "^7.2.0"
},
"peerDependencies": {
@ -10766,29 +10898,30 @@
}
},
"node_modules/nuxt-site-config/node_modules/@nuxt/kit": {
"version": "3.12.4",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.12.4.tgz",
"integrity": "sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==",
"version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
"integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
"license": "MIT",
"dependencies": {
"@nuxt/schema": "3.12.4",
"c12": "^1.11.1",
"@nuxt/schema": "3.13.2",
"c12": "^1.11.2",
"consola": "^3.2.3",
"defu": "^6.1.4",
"destr": "^2.0.3",
"globby": "^14.0.2",
"hash-sum": "^2.0.0",
"ignore": "^5.3.1",
"ignore": "^5.3.2",
"jiti": "^1.21.6",
"klona": "^2.0.6",
"knitwork": "^1.1.0",
"mlly": "^1.7.1",
"pathe": "^1.1.2",
"pkg-types": "^1.1.3",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"semver": "^7.6.3",
"ufo": "^1.5.4",
"unctx": "^2.3.1",
"unimport": "^3.9.0",
"unimport": "^3.12.0",
"untyped": "^1.4.2"
},
"engines": {
@ -10796,21 +10929,22 @@
}
},
"node_modules/nuxt-site-config/node_modules/@nuxt/schema": {
"version": "3.12.4",
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.12.4.tgz",
"integrity": "sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==",
"version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
"integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
"license": "MIT",
"dependencies": {
"compatx": "^0.1.8",
"consola": "^3.2.3",
"defu": "^6.1.4",
"hookable": "^5.5.3",
"pathe": "^1.1.2",
"pkg-types": "^1.1.3",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"std-env": "^3.7.0",
"ufo": "^1.5.4",
"uncrypto": "^0.1.3",
"unimport": "^3.9.0",
"unimport": "^3.12.0",
"untyped": "^1.4.2"
},
"engines": {
@ -11316,9 +11450,10 @@
}
},
"node_modules/pkg-types": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz",
"integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz",
"integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==",
"license": "MIT",
"dependencies": {
"confbox": "^0.1.7",
"mlly": "^1.7.1",
@ -11918,6 +12053,15 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/postprocessing": {
"version": "6.36.2",
"resolved": "https://registry.npmjs.org/postprocessing/-/postprocessing-6.36.2.tgz",
"integrity": "sha512-a1qZjpm0Vrozat7YFtYOEvwElWz/ukhxoA+K7HzDVeor20vzacREMnJZL5GTj6TFVr7/ma3W0qD03Go0V5gQOA==",
"license": "Zlib",
"peerDependencies": {
"three": ">= 0.157.0 < 0.169.0"
}
},
"node_modules/potpack": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz",
@ -13115,11 +13259,12 @@
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
},
"node_modules/site-config-stack": {
"version": "2.2.15",
"resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-2.2.15.tgz",
"integrity": "sha512-Ykh1X+puUlGoM/HX7bV7xZMKd4mQTm0KtB/9ChHKSIknCJ6pEwIRKuDiEnImtOTG+HUhuFJGW8lV8CkAB58tXw==",
"version": "2.2.18",
"resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-2.2.18.tgz",
"integrity": "sha512-kwyuCwYZBJikuLN3IB15cGT7SHQQxAitLaDs1b6eNZbb+tBHubVUhj0pnFZnZZi4+5eNCO+3HiZxaU3qpFxP2A==",
"license": "MIT",
"dependencies": {
"ufo": "^1.5.3"
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
@ -14198,9 +14343,10 @@
}
},
"node_modules/unimport": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/unimport/-/unimport-3.9.0.tgz",
"integrity": "sha512-H2ftTISja1BonUVdOKRos6HC6dqYDR40dQTZY3zIDJ/5/z4ihncuL0LqLvtxYqUDMib41eAtunQUhXIWTCZ8rA==",
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/unimport/-/unimport-3.12.0.tgz",
"integrity": "sha512-5y8dSvNvyevsnw4TBQkIQR1Rjdbb+XjVSwQwxltpnVZrStBvvPkMPcZrh1kg5kY77kpx6+D4Ztd3W6FOBH/y2Q==",
"license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.1.0",
"acorn": "^8.12.1",
@ -14208,13 +14354,13 @@
"estree-walker": "^3.0.3",
"fast-glob": "^3.3.2",
"local-pkg": "^0.5.0",
"magic-string": "^0.30.10",
"magic-string": "^0.30.11",
"mlly": "^1.7.1",
"pathe": "^1.1.2",
"pkg-types": "^1.1.3",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"strip-literal": "^2.1.0",
"unplugin": "^1.11.0"
"unplugin": "^1.14.1"
}
},
"node_modules/unimport/node_modules/acorn": {
@ -14305,17 +14451,24 @@
}
},
"node_modules/unplugin": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz",
"integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==",
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz",
"integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==",
"license": "MIT",
"dependencies": {
"acorn": "^8.12.1",
"chokidar": "^3.6.0",
"webpack-sources": "^3.2.3",
"webpack-virtual-modules": "^0.6.2"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"webpack-sources": "^3"
},
"peerDependenciesMeta": {
"webpack-sources": {
"optional": true
}
}
},
"node_modules/unplugin-vue-router": {

View File

@ -20,6 +20,7 @@
"@tresjs/cientos": "^3.9.0",
"@tresjs/core": "^4.0.2",
"@tresjs/nuxt": "^2.1.2",
"@tresjs/post-processing": "^0.7.1",
"consola": "^3.2.3",
"marked": "^12.0.2",
"nuxt": "^3.11.2",

Binary file not shown.

View File

@ -32,8 +32,8 @@ export const set_material = (scene: any, color: any, count: number | undefined =
alphaMap: count ? texture : null,
transparent: true,
opacity: 1,
// roughness: 0.5,
// metalness: 0,
roughness: 0.2,
metalness: 0,
side: DoubleSide,
})
set_metaril_func(scene, material)