threejs辉光通道01(UnrealBloomPass && layers)


前言

踩坑记录:
1、UnrealBloomPass 辉光参照three官网示例
2、分层渲染分为两篇:本篇为最简单的layers分层渲染


一、辉光

1、引入库:

import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'
import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass'
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass'

2、注意事项:

其他three组件都是常规的写法,开启炫光通道的时候如下注意点

主要注意渲染器中添加
renderer.autoClear = false
通道添加

bloomPass.renderToScreen = true
渲染使用合成渲染
composer.render()
部分代码

除去常规写法的【场景、相机、控制器、光源等】
只需要注意上述这部分代码

initrenderer () {
  var width = document.getElementById('threecanvas').offsetWidth
  var height = document.getElementById('threecanvas').offsetHeight
  renderer = new THREE.WebGLRenderer({
    antialias: true,
  })
  renderer.setPixelRatio(window.devicePixelRatio)// 设置分辨率与电脑的分辨率相同
  renderer.setSize(width, height)
  renderer.toneMapping = THREE.ReinhardToneMapping
  renderer.autoClear = false
  document.getElementById('threecanvas').appendChild(renderer.domElement)
}
addBloomPass () {
  var width = document.getElementById('threecanvas').offsetWidth
  var height = document.getElementById('threecanvas').offsetHeight
  const renderScene = new RenderPass(scene, camera)
  const bloomPass = new UnrealBloomPass(new THREE.Vector2(width, height),1.5,0.4,0.85)
  bloomPass.renderToScreen = true
  bloomPass.threshold = params.bloomThreshold
  bloomPass.strength = params.bloomStrength
  bloomPass.radius = params.bloomRadius

  composer = new EffectComposer(renderer)
  composer.setSize( width, height );
  composer.addPass(renderScene)
  composer.addPass(bloomPass) 
}
function render () {
  requestAnimationFrame(render)
  update()
  composer.render()
}

二、layers分层渲染

问题: 使用简单的layers分层渲染会出现深度遮挡问题,或者有其他物体在光晕后方,光晕不生效

注意事项和上述相同,然后给物体分层即可

我们只需要在渲染的时候设置好层级
注意合成的渲染通道在上,正常的渲染在下,相当于两个图层,然后把相机分给两个图层
图层0:正常渲染
图层1:使用通道渲染

function render () {
  requestAnimationFrame(render)
  update()
  
  renderer.clear()
  camera.layers.set(1)
  composer.render()

  renderer.clearDepth()
  camera.layers.set(0)
  renderer.render(scene, camera)
}

然后自己需要哪些物体使用炫光的通道,就把这个物体

object.layers.set(1)

正常渲染的话

object.layers.set(0)

或不设置,正常的图层默认为0

总结

由于这种简单的layers分层会出现不确定性问题
下篇继续

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Three.js是一个基于JavaScript的3D图形库,用于在Web浏览器中创建和显示3D图形。它提供了一系列易于使用的功能和工具,使开发者能够轻松地创建各种各样的3D效果和交互式场景。 穿模(Glow-through)是Three.js中的一种特效,它可以使物体看起来像是发并透过其他物体。实现穿模的一种常见方法是使用ShaderMaterial和自定义着色器。 首先,你需要创建一个ShaderMaterial,并在其中定义自定义的着色器代码。着色器代码可以通过修改顶点和片元着色器来实现穿模效果。顶点着色器用于处理顶点的位置和变换,片元着色器用于处理像素的颜色和照。 在顶点着色器中,你可以通过将顶点的位置进行偏移来创建效果。在片元着色器中,你可以根据顶点的位置和法线来计算照效果,并将发的颜色与场景中其他物体的颜色进行混合。 以下是一个简单的示例代码,展示了如何使用Three.js实现穿模效果: ```javascript // 创建一个平面几何体 var geometry = new THREE.PlaneGeometry(10,10); // 创建一个自定义的着色器材质 var material = new THREE.ShaderMaterial({ vertexShader: document.getElementById('vertexShader').textContent, fragmentShader: document.getElementById('fragmentShader').textContent, }); // 创建一个网格对象并添加到场景中 var mesh = new THREE.Mesh(geometry, material); scene.add(mesh); ``` 在上面的代码中,`vertexShader`和`fragmentShader`分别指定了顶点着色器和片元着色器的代码。你可以在HTML文件中使用`<script>`标签将着色器代码嵌入到页面中。 这只是一个简单的示例,实际的穿模效果可能需要更复杂的着色器代码和参数设置。你可以根据自己的需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值