我的编程空间,编程开发者的网络收藏夹
学习永远不晚

threejs后期处理的基本使用方法以及如何加特效

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

threejs后期处理的基本使用方法以及如何加特效

threejs后期处理的基本使用方法以及如何加特效,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

    前言

    后期处理:简单的说就是先渲染一张图存起来,在这张图上面"添油加醋",处理完后再渲染到屏幕上。这一过程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…

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

    threejs后期处理的基本使用方法以及如何加特效

    通道相关代码位置

    three/examples/jsm/postprocessing/

    案例演示

    电脉冲故障风效果

    threejs后期处理的基本使用方法以及如何加特效

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

    描边效果

    threejs后期处理的基本使用方法以及如何加特效

    代码
    // 传入长宽、场景、相机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)

    泛光效果

    threejs后期处理的基本使用方法以及如何加特效

    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 = 256const 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后期处理的基本使用方法以及如何加特效问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    threejs后期处理的基本使用方法以及如何加特效

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    threejs后期处理的基本使用方法以及如何加特效

    threejs后期处理的基本使用方法以及如何加特效,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言后期处理:简单的说就是先渲染一张图存起来,在这张图上面"添油加醋",处理
    2023-06-28

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录