threejs后期处理的基本使用方法之加特效

目录
  • 前言
  • 基本代码
  • 基本流程
  • 核心函数介绍
    • EffectComposer 效果组合器
      • 构造函数
      • 重要方法:
    • RenderPass 渲染通道
      • 构造函数
      • 重要属性:
    • ShaderPass 着色器通道
  • 官方案例
    • 链接
    • 通道相关代码位置
  • 案例演示
    • 电脉冲故障风效果
      • 代码
    • 描边效果
      • 代码
    • 泛光效果
      • BloomPass的参数
      • 代码
  • 总结

前言

后期处理:简单的说就是先渲染一张图存起来,在这张图上面"添油加醋",处理完后再渲染到屏幕上。这一过程three进行了封装,使用现成的可以更快实现需求

基本代码

// 引入后期处理基本的对象
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js'
...
//  因为是介绍后期渲染,省略场景初始化等代码

// 初始化效果组合器
this.EffectComposer = new EffectComposer(this.renderer)
// 添加基本的渲染通道
this.RenderPass = new RenderPass(this.scene, this.camera)
// 把通道加入到组合器
this.EffectComposer.addPass(this.RenderPass)

// 渲染方法,不断调用render()
_animate() {
  requestAnimationFrame(this._animate.bind(this))
  // 组合器执行渲染
 this.EffectComposer.render()
}

基本流程

  • 初始化一个效果组合器
  • 把需要用的若干通道(也就是要进行的操作)依次添加到组合器中
  • 组合器会按顺序执行各通道内的操作,上一通道的操作结果会传递给下一通道,直至最后都操作完,然后渲染到屏幕上

核心函数介绍

EffectComposer 效果组合器

作用:管理了后期处理的过程,根据通道的插入顺序,来执行通道内的代码(主要为着色器代码)

构造函数

需要传入平时初始化three场景时的渲染器WebGLRenderer, 用来后续渲染场景

// 引入
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'

this.EffectComposer = new EffectComposer(渲染器)

重要方法:

addPass

this.EffectComposer.addPass(通道)

给EffectComposer添加后期处理通道,可以添加多个,依次执行

render

this.EffectComposer.render()

渲染,循环调用通道的render()方法

RenderPass 渲染通道

构造函数

需要传入初始化场景时生成的场景对象跟相机对象

this.RenderPass = new RenderPass(this.scene, this.camera)

RenderPass通道的作用是把场景和相机作为参数传入,获得场景的渲染结果,不对渲染结果做特定处理。
简单说就是RenderPass用来生成第一张原始图,用来传给后面通道使用,所以一般RenderPass会作为第一个通道

重要属性:

renderToScreen

默认值是false,true将处理的结果保存到帧缓冲区,false直接显示在canvas画布上面。

ShaderPass 着色器通道

需要传入自定义的着色器代码,控制渲染

const effectCopyPass = new ShaderPass(着色器代码)

着色器代码格式可以参照CopyShader.js three/examples/jsm/shaders/CopyShader.js

官方案例

链接

threejs.org/examples/?q…

官方有很多封装好的通道,可以拿来直接使用

通道相关代码位置

three/examples/jsm/postprocessing/

案例演示

电脉冲故障风效果

代码

// 引入
import { GlitchPass } from 'three/examples/jsm/postprocessing/GlitchPass.js'
// 初始化通道
const Pass = new GlitchPass()
// 将此通道结果渲染到屏幕
Pass.renderToScreen = true
// 把通道加入到组合器
this.EffectComposer.addPass(Pass)

描边效果

代码

// 传入长宽、场景、相机
const Pass = new OutlinePass(new THREE.Vector2(this.width, this.height), this.scene, this.camera)
// 将此通道结果渲染到屏幕
Pass.renderToScreen = true
// OutlinePass相关属性设置
Pass.visibleEdgeColor = new THREE.Color(76, 148, 156) // 可见边缘的颜色
Pass.hiddenEdgeColor = new THREE.Color(0, 1, 0) // 不可见边缘的颜色
Pass.edgeGlow = 1.0 // 发光强度
Pass.usePatternTexture = false // 是否使用纹理图案
Pass.edgeThickness = 2.0 // 边缘浓度
Pass.edgeStrength = 2.0  // 边缘的强度,值越高边框范围越大
Pass.pulsePeriod = 0 // 闪烁频率,值越大频率越低

// 一般生产环境中会配合鼠标事件,来改变selectedObjects,使选中的物体描边
Pass.selectedObjects = [需要添加外边框的网格模型]
// 将通道加入组合器
this.EffectComposer.addPass(Pass)

泛光效果

BloomPass的参数

  • strength 泛光效果的强度,值越高明亮区域越明显,较暗区域的亮度也会变高
  • kernelSize 泛光效果的偏移量
  • sigma 锐利程度,值越高,泛光越模糊
  • resolution 泛光效果的解析图,值太低方块化就会加重

代码

// 引入
import { BloomPass } from 'three/examples/jsm/postprocessing/BloomPass.js'
import { CopyShader } from 'three/examples/jsm/shaders/CopyShader.js'
import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'

// 参数默认值strength = 1, kernelSize = 25, sigma = 4, resolution = 256
const Pass = new BloomPass(2.5, 25, 0.1, this.width)
// 加入到组合器
this.EffectComposer.addPass(Pass)

// BloomPass通道不能通过renderToScreen=true将结果渲染到屏幕上,
// 所以需要再加一个通道effectCopyPass来完成输出结果这一步
// effectCopyPass通道没有任何特殊效果, 只是输出结果
const effectCopyPass = new ShaderPass(CopyShader)
effectCopyPass.renderToScreen = true
// 加入到组合器
this.EffectComposer.addPass(effectCopyPass)

总结

此文只介绍了几个案例的基本使用,只要掌握使用的流程,其他的案例也可以很好的上手

到此这篇关于threejs后期处理的基本使用方法之加特效的文章就介绍到这了,更多相关threejs后期加特效内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用vue3+threejs仿iView官网大波浪特效实例

    目录 前言 一.效果图 二.代码 三.背景图片素材 总结 前言 Threejs可以理解为是一个web端三维引擎(渲染模型,数据可视化),如果有接触过UnralEngine 4(虚幻四)等游戏引擎的,应该很容易理解在一个三维场景必备的每一个部件(场景,渲染器,网格模型,材质,光源,色相机).好的,基础知识咱们先跳过,直接上实现的过程 一.效果图 先上最终效果图: 具体效果可参考iview官方界面iView - 一套高质量的UI组件库 大波浪效果,使用的是three.js的官方例子,需要先安装thr

  • threejs后期处理的基本使用方法之加特效

    目录 前言 基本代码 基本流程 核心函数介绍 EffectComposer 效果组合器 构造函数 重要方法: RenderPass 渲染通道 构造函数 重要属性: ShaderPass 着色器通道 官方案例 链接 通道相关代码位置 案例演示 电脉冲故障风效果 代码 描边效果 代码 泛光效果 BloomPass的参数 代码 总结 前言 后期处理:简单的说就是先渲染一张图存起来,在这张图上面"添油加醋",处理完后再渲染到屏幕上.这一过程three进行了封装,使用现成的可以更快实现需求 基本

  • 使用threejs实现第一人称视角的移动的问题(示例代码)

    在数据可视化领域利用webgl来创建三维场景或VR已经越来越普遍,各种开发框架也应运而生.今天我们就通过最基本的threejs来完成第一人称视角的场景巡检功能.如果你是一位threejs的初学者或正打算入门,我强烈推荐你仔细阅读本文并在我的代码基础之上继续深入学习.因为它将是你能够在网上找到的最好的免费中文教程,通过本文你可以学习到一些基本的三维理论,threejs的api接口以及你应该掌握的数学知识.当然要想完全掌握threejs可能还有很长的路需要走,但至少今天我将带你入门并传授一些独特的学

  • 解决threeJS加载obj gltf模型后颜色太暗的方法

    目录 网上找到的部分解决方法 效果对比 总结 网上找到的部分解决方法 其实通过查找后不难发现网上给出了很多解决方法,但是大部分都无法从根本上解决问题.我之前看到有一篇文章对gltf的解决方法是让gltf增加自发光,相关的设置如下: 使用threeJS的过程中,刚开始总是会遇到些问题,就比如加载obj/gltf等带材质的模型时老是会出现显示效果较暗的问题. object.traverse((child) => { if(child.isMesh) { child.material.emissive

  • Mongodb中MapReduce实现数据聚合方法详解

    Mongodb是针对大数据量环境下诞生的用于保存大数据量的非关系型数据库,针对大量的数据,如何进行统计操作至关重要,那么如何从Mongodb中统计一些数据呢? 在Mongodb中,给我们提供了三种用于数据聚合的方式: (1)简单的用户聚合函数: (2)使用aggregate进行统计: (3)使用mapReduce进行统计: 今天我们首先来讲讲mapReduce是如何统计,在后续的文章中,将另起文章进行相关说明. MapReduce是啥呢?以我的理解,其实就是对集合中的各个满足条件的文档进行预处理

  • 一些实用性较高的js方法

    本文分享下自己平时积累的一些实用性较高的js方法,供大家指点和评价.本想分篇介绍,发现有点画蛇添足.整理了下也没多少拿得出手的方法,自然有一些是网上看到的个人觉得很有实用性的方法,在这里一起贴出来供大家探讨. 1.点击返回若没有之前页面则跳转到规定页面 首先是客户需求中要求--单个分享到微信的页面,点击返回可以跳转到网站首页. 期间这个功能有和客户探讨过,能否在页面中添加回到首页按钮进行跳转. 可是这种方式无法作用到每个页面,并且指明需要该功能的分享页面没有可以放得下一个图标,又不影响美观的地方

  • 使用3D引擎threeJS实现星空粒子移动效果

    three.js是JavaScript编写的WebGL第三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机.光影.材质等各种对象. 下载地址: http://threejs.org/ 首先创建一个HTML文件,引入three.js引擎包. <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <titl

  • JS/jQuery实现获取时间的方法及常用类完整示例

    本文实例讲述了JS jQuery实现获取时间的方法及常用类.分享给大家供大家参考,具体如下: 效果图 源码解析 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS获取时间的方法及常用类</title> <style type="text/css"> input{ color:red; min-width: 25

  • Threejs实现滴滴官网首页地球动画功能

    偶然翻滴滴官网看到首页下翻第六栏(大概)有个绚丽的地球的三维动画,试着用there.js实现了下,基本实现了动画效果,不过还是有些问题:这个动画看似简单,但也用到好的绘制方法和计算,这里先写一下主要功能的实现: 先看示例:http://39.106.166.212:8080/webgl/t4(由于是写dome的一个项目,内容较多没做优化,第一次加载会会比较慢,需多等待几秒) (lice这个截图工具也是很不好用,每次都截到一半 ╮(╯﹏╰)╭) 一. 3d绘制场景的构建 绘制一个3d程序首先需要添

  • 如何用threejs实现实时多边形折射

    前言 在本教程中,您将学习如何使用Three.js在三个步骤中使对象看起来像玻璃. 渲染3D对象时,无论使用某种3D软件还是使用WebGL进行实时显示,始终都必须为其分配材料以使其可见并具有所需的外观. 可以使用Three.js之类的库中的现成程序来模仿许多类型的材料,但是在本教程中,我将向您展示如何使用三个对象(三个步骤)使对象看起来像玻璃一样. 步骤1:设定和正面折射 在本演示中,我将使用菱形几何图形,但是您可以跟随一个简单的盒子或任何其他几何图形. 让我们建立我们的项目.我们需要一个渲染器

  • threejs太阳光与阴影效果实例代码

    目录 前言 灯光与材质基础篇 太阳光 整体调用代码 太阳光类 初始化 设置平行光信息 Tween 总结 前言 这篇文章实现智慧城市中模拟太阳光随时间变化产生对应场景效果.为了场景能够更逼真,我们一般会通过对接天气以及阳光等各种环境因素同步到场景中,使得场景能够更贴近现实.比如一些常见的天气系统,下雨.下雪.阴天.雾霾等,我之后会独立一篇文章中提现.这边文章主要介绍一系列灯光,主要是平行光对于太阳的模仿,以及一些材质的问题~ 灯光与材质基础篇 常见的灯光: - 点光源 (点光源可以理解为一个同时向

随机推荐