postprocessing
This commit is contained in:
parent
3a5df5dae4
commit
8f9ae6deaf
|
@ -32,3 +32,4 @@ onMounted(async () => {
|
||||||
})
|
})
|
||||||
watch(() => props.hdr_webp, loadEnv)
|
watch(() => props.hdr_webp, loadEnv)
|
||||||
</script>
|
</script>
|
||||||
|
<template></template>
|
|
@ -1,7 +1,22 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, onUnmounted, reactive, ref, watch } from 'vue';
|
import { onMounted, onUnmounted, reactive, ref, watch } from 'vue';
|
||||||
import { Box3, Color, DoubleSide, Group, Mesh, MeshBasicMaterial, PlaneGeometry, SpriteMaterial, TextureLoader, Vector2, Vector3 } from 'three';
|
import {
|
||||||
import { useTresContext, useSeek, useRenderLoop } from '@tresjs/core';
|
Box3, Color, DoubleSide, Group, Mesh, MeshBasicMaterial,
|
||||||
|
PlaneGeometry, SpriteMaterial, TextureLoader, Vector2, Vector3,
|
||||||
|
} from 'three';
|
||||||
|
// import { DepthOfField, EffectComposer, Pixelation } from '@tresjs/post-processing'
|
||||||
|
|
||||||
|
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
|
||||||
|
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
|
||||||
|
import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js';
|
||||||
|
|
||||||
|
import { RGBShiftShader } from 'three/addons/shaders/RGBShiftShader.js';
|
||||||
|
import { DotScreenShader } from 'three/addons/shaders/DotScreenShader.js';
|
||||||
|
import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';
|
||||||
|
|
||||||
|
import '@tresjs/leches/styles'
|
||||||
|
|
||||||
|
import { useTresContext, useSeek, useRenderLoop, useLoop } from '@tresjs/core';
|
||||||
import { useGLTF } from '@tresjs/cientos'
|
import { useGLTF } from '@tresjs/cientos'
|
||||||
|
|
||||||
import Env from './env.vue'
|
import Env from './env.vue'
|
||||||
|
@ -38,6 +53,7 @@ const envVars = reactive({}) as { hdr_gainmap?: string, hdr_json?: string, hdr_w
|
||||||
// renderer.value.capabilities.maxTextures = 4
|
// renderer.value.capabilities.maxTextures = 4
|
||||||
// renderer.value.capabilities.maxTextureSize = 512
|
// renderer.value.capabilities.maxTextureSize = 512
|
||||||
// renderer.value.capabilities.precision = 'lowp'
|
// renderer.value.capabilities.precision = 'lowp'
|
||||||
|
let composer: any = null
|
||||||
|
|
||||||
const loadModels = async () => {
|
const loadModels = async () => {
|
||||||
const res = await fetch(`${SERVER_URL}/api/obj/scene/${props.source}`)
|
const res = await fetch(`${SERVER_URL}/api/obj/scene/${props.source}`)
|
||||||
|
@ -77,7 +93,6 @@ const loadModels = async () => {
|
||||||
clickable.value.push(...clickable_areas)
|
clickable.value.push(...clickable_areas)
|
||||||
}
|
}
|
||||||
sidebar_scene.setData(sidebar_items)
|
sidebar_scene.setData(sidebar_items)
|
||||||
// sidebar.open()
|
|
||||||
|
|
||||||
for (let index = 0; index < clickable.value.length; index++) {
|
for (let index = 0; index < clickable.value.length; index++) {
|
||||||
const element = clickable.value[index];
|
const element = clickable.value[index];
|
||||||
|
@ -130,9 +145,18 @@ const loadModels = async () => {
|
||||||
|
|
||||||
controls.value.enabled = true;
|
controls.value.enabled = true;
|
||||||
props.loaded()
|
props.loaded()
|
||||||
console.log("Number of Triangles :", renderer.value.info.render.triangles);
|
|
||||||
console.log("render.calls ", renderer.value.info.render.calls);
|
|
||||||
|
|
||||||
|
composer = new EffectComposer(renderer.value);
|
||||||
|
composer.addPass(new RenderPass(scene.value, camera.value));
|
||||||
|
|
||||||
|
const effect1 = new ShaderPass(DotScreenShader);
|
||||||
|
effect1.uniforms['scale'].value = 40;
|
||||||
|
composer.addPass(effect1);
|
||||||
|
function animate() {
|
||||||
|
requestAnimationFrame(animate);
|
||||||
|
composer.render();
|
||||||
|
}
|
||||||
|
// animate()
|
||||||
}
|
}
|
||||||
|
|
||||||
const { onLoop } = useRenderLoop()
|
const { onLoop } = useRenderLoop()
|
||||||
|
@ -144,6 +168,12 @@ onLoop(() => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
const { onAfterRender } = useLoop()
|
||||||
|
onAfterRender(() => {
|
||||||
|
if (composer) {
|
||||||
|
composer.render()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const openSidebar = (id: number) => {
|
const openSidebar = (id: number) => {
|
||||||
const target = clickable.value.find(el => el.id == id)
|
const target = clickable.value.find(el => el.id == id)
|
||||||
|
@ -172,7 +202,6 @@ watch(() => props.source, () => {
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
document.addEventListener('click', clickEvent)
|
document.addEventListener('click', clickEvent)
|
||||||
console.log(sidebar.is_open)
|
|
||||||
if (sidebar.is_open) {
|
if (sidebar.is_open) {
|
||||||
sidebar.close()
|
sidebar.close()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { reactive, ref, watch } from 'vue';
|
import { reactive, ref, watch, computed } from 'vue';
|
||||||
import type { Ref } from 'vue'
|
import type { Ref } from 'vue'
|
||||||
import { RouterLink, useRoute } from 'vue-router';
|
import { RouterLink, useRoute } from 'vue-router';
|
||||||
|
|
||||||
import { Vector3 } from 'three';
|
import { Vector3 } from 'three';
|
||||||
import { TresCanvas, vLightHelper } from '@tresjs/core';
|
import { TresCanvas } from '@tresjs/core';
|
||||||
import { BakeShadows, OrbitControls, Stats } from '@tresjs/cientos'
|
import { OrbitControls } from '@tresjs/cientos'
|
||||||
|
import '@tresjs/leches/styles'
|
||||||
|
|
||||||
import LoadModels from './load_models.vue'
|
import LoadModels from './load_models.vue'
|
||||||
import Sidebar from './sidebar.vue'
|
import Sidebar from './sidebar.vue'
|
||||||
|
@ -56,7 +57,7 @@ watch(() => route.params.target, () => {
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div :class="[{ 'loading': !models_loading }, 'canvas-wrapper']">
|
<div :class="[{ 'loading': !models_loading }, 'canvas-wrapper']">
|
||||||
<TresCanvas window-size shadows :alpha="false" power-preference="high-performance">
|
<TresCanvas window-size :alpha="false" power-preference="high-performance" >
|
||||||
<TresPerspectiveCamera :position="cameraPosition" ref="camera" />
|
<TresPerspectiveCamera :position="cameraPosition" ref="camera" />
|
||||||
<OrbitControls v-bind="controlsState" @change="onChange" make-default />
|
<OrbitControls v-bind="controlsState" @change="onChange" make-default />
|
||||||
<Suspense>
|
<Suspense>
|
||||||
|
@ -66,20 +67,6 @@ watch(() => route.params.target, () => {
|
||||||
<TresPlaneGeometry :args="[200, 200]" />
|
<TresPlaneGeometry :args="[200, 200]" />
|
||||||
<TresShadowMaterial :opacity="0.2" />
|
<TresShadowMaterial :opacity="0.2" />
|
||||||
</TresMesh>
|
</TresMesh>
|
||||||
<TresGroup name="lights" v-if="false">
|
|
||||||
<TresHemisphereLight :intensity="100" :position-x="50" :position-y="20" cast-shadow color="red"
|
|
||||||
v-light-helper />
|
|
||||||
<TresPointLight :intensity="100" :position-x="0" :position-y="20" cast-shadow color="green"
|
|
||||||
v-light-helper />
|
|
||||||
<TresDirectionalLight :intensity="100" :position-x="-50" :position-y="20" cast-shadow color="blue"
|
|
||||||
v-light-helper />
|
|
||||||
<TresPointLight :intensity="2000" :position-x="0" :position-y="20" cast-shadow
|
|
||||||
color="rgb(0,255,0)" />
|
|
||||||
</TresGroup>
|
|
||||||
<BakeShadows v-if="models_loading" />
|
|
||||||
<Suspense>
|
|
||||||
<Stats />
|
|
||||||
</Suspense>
|
|
||||||
</TresCanvas>
|
</TresCanvas>
|
||||||
<div class="homelink">
|
<div class="homelink">
|
||||||
<a href="#" @click.prevent="sidebar.open" v-if="!sidebar.is_open">
|
<a href="#" @click.prevent="sidebar.open" v-if="!sidebar.is_open">
|
||||||
|
|
Loading…
Reference in New Issue