后期处理
这章节,是针对后期处理在 tvt.js 项目中的实践。
TIP
我们分为两个部分来描述它:
- 1、three.js 原生的方法,就是先屏蔽 tres.js 现有的 render 的模式,增加手动后期处理的渲染
- 2、使用 post-processing.tresjs 生态自带的渲染库
three.js 原生的方法
首先我们默认您了解了 three.js 原生的渲染逻辑,详见:How-to-use-post-processing 在 tvt.js 的最佳实践在后期处理-掩膜通道
TresCanvas
需要增加属性 renderMode="manual"
更改成用户自行渲染
<template>
<TresCanvas renderMode="manual" window-size>
<MaskPass />
<!-- 后期处理-掩膜组件 -->
</TresCanvas>
</template>
然后在 自定义的掩膜组件中,新增EffectComposer
和一些RenderPass
,之后在循环函数中,调用渲染
const { onLoop } = useRenderLoop()
onLoop(() => {
if (effectComposer) {
effectComposer.render()
}
})
代码详见:MaskPass.vue
post-processing.tres 渲染库
在 24 年下半年,tres.js 陆续增加了 post-processing.tres 自己得后期处理库:post-processing.tresjs 使用起来就很简单的,不需要再修改TresCanvas
的渲染模式了直接 组件方式挂在后期渲染
<template>
<TresCanvas window-size clearColor="#000000">
<TresPerspectiveCamera :position="[10, 10, 10]" />
<TresAmbientLight :intensity="1" />
<OrbitControls />
<Box :args="[1, 1, 1]" color="orange" :position="[3, 2, 1]" />
<TresMesh :position="[0, 2, -4]">
<TresBoxGeometry :args="[1, 1, 1]" />
<TresMeshNormalMaterial />
</TresMesh>
<TresGridHelper :args="[10, 10]" />
<EffectComposer>
<UnrealBloom :radius="0.8" :strength="2.5" :threshold="0.8" />
<Glitch />
<SMAA :width="1920" :height="1080" />
<Output />
</EffectComposer>
</TresCanvas>
</template>
<script setup lang="ts">
import { OrbitControls, Box } from '@tresjs/cientos'
import {
EffectComposer,
UnrealBloom,
Glitch,
Output,
SMAA,
} from '@tresjs/post-processing'
</script>
在 tvt.js 的最佳实践在tresProcessing-融合多个后期效果