threejs的后期处理通道包提供了各种强大的效果,有了这些效果会大大降低代码难度,可以直接使用内置的着色器包,避免了复杂的着色器代码编写。

效果示例:

实现方式:

  1. 初始化效果组合器
composer=new THREE.EffectComposer(renderer);//该参数是WebGLRenderer对象

为了保证组合器的正常使用,必要的引用包,在工程文件下可找到,这四个都是必须的,并且注意引用的顺序,如果顺序不对,浏览器控制台会报错的

<script src="js/postprocessing/EffectComposer.js"></script>
<script src="js/postprocessing/RenderPass.js"></script><script src="js/postprocessing/ShaderPass.js"></script>
<script src="js/shaders/CopyShader.js"></script>
  1. 新建场景通道,如果不再建一个场景,主场景会被覆盖掉,什么也看不到
var renderPass=new THREE.RenderPass(scene,camera);
composer.addPass(renderPass);
  1. 添加各种处理效果
//1.将原始图像输出为灰度点集
var dotScreenShader=new THREE.ShaderPass(THREE.DotScreenShader);
dotScreenShader.uniforms['scale'].value=4;
composer.addPass(dotScreenShader);//2.将RGB三种颜色分离
var RGBshiftShader=new THREE.ShaderPass(THREE.RGBShiftShader);
RGBshiftShader.uniforms['amount'].value=0.0015;
composer.addPass(RGBshiftShader);
  1. 最后渲染,注意放在帧循环中
function render(){composer.render();//renderer.render(scene,camera);//可以去掉原来的渲染
}
  1. 可以监听窗口变动时,自动改变渲染尺寸
composer.setSize(window.innerWidth,window.innerHeight);

后处理基础包:

RenderPass.js:

该通道会在当前场景和摄像机的基础上渲染出一个新场景,和普通的webGLRenderer一样。
引用:js/postprocessing/RenderPass.js
参数:
scene,场景对象
camera,相机对象
用法示例:

var renderPass=new THREE.RenderPass(scene,camera);
composer.addPass(renderPass);

ShaderPass.js:

该通道接受自定义的着色器作为参数,以生成一个高级、自定义的后期处理通道, 产生各种模糊效果和高级滤镜。
引用:js/postprocessing/ShaderPass.js
参数:各种threejs内置着色器包或自定义着色器
THREE.DotScreenShader:输出灰度点集
THREE.MirrorShader:创建镜面效果
THREE.HueSaturationShader:改变颜色的色调和饱和度
THREE.VignetteShader:添加晕映效果
THREE.ColorCorrectionShader:调整颜色的分布
THREE.RGBShiftShader:将红绿蓝三种颜色分开
THREE.BrightnessContrastShader:改变亮度和对比度
THREE.ColorifyShader:将某种颜色覆盖到整个屏幕
THREE.SepiaShader:创建类似于乌贼墨的效果
THREE.KaleidoShader:类似于万花筒的效果
THREE.LuminosityShader:提高亮度
THREE.TechnicolorShader:模拟类似老电影里面的两条彩色效果
THREE.HorizontalBlurShader和THREE.VerticalBlurShader:可以向水平和垂直方向创建模糊效果
THREE.HorizontalTiltShiftShader和THREE.VerticalTileShiftShader:可以在水平和垂直方向创建倾斜平移的效果
THREE.TriangleBlurShader:基于三角形的方法创造一种模糊效果
THREE.BleachBypassShader:创造一种镀银的效果
THREE.EdgeShader:找到图片的边界并显示
THREE.FXAAShader:添加抗锯齿的效果
THREE.FocusShader:创建中间比较尖锐,周围比较模糊的效果。
用法示例:

var dotScreenShader=new THREE.ShaderPass(THREE.DotScreenShader);
dotScreenShader.uniforms['scale'].value=4;
composer.addPass(dotScreenShader);

GlitchPass.js:

该通道会随机在屏幕上显示电脉冲。
引用:js/postprocessing/GlitchPass.js
参数:无
属性:
goWild,默认为false,为true则会持续显示全屏电子脉冲
用法示例:

glitchPass=new THREE.GlitchPass();//该通道需要添加着色器依赖包
composer.addPass(glitchPass);glitchPass.goWild=true;//持续全屏电子脉冲

在使用该通道时需要添加对应的着色器依赖包(js/shaders/DigitalGlitch.js),添加后就能直接看到效果。

MaskPass.js:

该通道可以在当前图像上添加掩码,后续的通道只会影响掩码区域,如果取消掩码需要加入THREE.ClearMaskPass通道。需要注意使用掩码前,要将composer.renderTarget.stencilBuffer设置为true,用于限制渲染区域。另外,使用完掩码后,需要使用ClearMaskPass()去掉掩码区域。
用法示例:

var composer = new THREE.EffectComposer(renderer);
composer.renderTarget1.stencilBuffer = true;
composer.renderTarget2.stencilBuffer = true;

FilmPass.js:

该通道会使用扫描线和失真来模拟电视屏幕效果。
配置项:
noiseIntensity:场景的粗糙程度
scanlinesIntensity:扫描线的显著程度
scanLinesCount:扫描线的数量
gratScale:是否使用灰度图输出
用法示例:

BloomPass.js:

该通道会增强场景中的亮度。
配置项:
Strength:光的强度
kernelSize:光的偏移
sigma:光的锐利程度
Resolution:光的精确度,值越低,光的方块化越严重
用法示例:

var renderPass = new THREE.RenderPass(scene, camera);
var effectCopy = new THREE.ShaderPass(THREE.CopyShader);
//CopyShader是为了能将结果输出,普通的通道一般都是不能输出的,要靠CopyShader进行输出
effectCopy.renderToScreen = true;//设置这个参数的目的是马上将当前的内容输出var bloomPass = new THREE.BloomPass(3, 25, 5.0, 256);composer1.addPass(renderScene);//渲染当前场景
composer1.addPass(bloomPass);//添加光效
composer1.addPass(effectCopy);//输出到屏幕

OutlinePass.js:

该通道可以为物体(场景中被添加到通道中的物体)的边缘添加一个发光效果。
配置项:
edgeStrength:强度 ,默认3
edgeGlow::强度 默认1
edgeThickness::边缘浓度
pulsePeriod::闪烁频率 ,默认0 ,值越大频率越低
usePatternTexture:使用纹理
visibleEdgeColor:边缘可见部分发光颜色
hiddenEdgeColor:边缘遮挡部分发光颜色

TexturePass.js:

保存当前通道的输出,作为后续使用。
用法示例:

var renderScene = new THREE.TexturePass(composer1.renderTarget2);//保留当前输出结果
composer2.addPass(renderScene);//将保留的输出结果加入到别的composer中即可

常用着色器包:

CopyShader.js:

将效果输出,普通的通道一般都是不能输出的,要靠CopyShader进行输出。
引用:js/shaders/CopyShader.js

DotScreenShader.js:

该通道会将原始图像输出为灰度点集。
引用:js/shaders/DotScreenShader.js
配置项:
scale:点的大小
center:点的偏移量
angle:点的对其方式
用法示例:

vardotScreenShader=new THREE.ShaderPass(THREE.DotScreenShader);
dotScreenShader.uniforms['scale'].value=4;
composer.addPass(dotScreenShader);

RGBShiftShader.js:

该通道会将图像的红绿蓝三种颜色分离。
引用:js/shaders/RGBShiftShader.js
配置项:
amount:颜色深浅度
用法示例:

var RGBshiftShader=new THREE.ShaderPass(THREE.RGBShiftShader);
RGBshiftShader.uniforms['amount'].value=0.0015;
composer.addPass(RGBshiftShader);

112 Three.js postProcess 后处理内置shader包相关推荐

  1. Unity内置Shader解读3——Decal

    1.Shader在什么情况下使用 Decal(贴花)贴花就是类似于CF里的喷漆,或者汽车/墙上等贴一个贴纸. image.png 2.Shader的价值(用的多不多),Shader的难度 这个应该是极 ...

  2. 前端JS学习笔记——内置对象Math、Date 、Array、String

    目录 1.Math常用方法 2.Date()方法 如何获取Date的时间戳 Date()方法的使用 格式化日期时间 格式化输出一串时间日期 倒计时功能 3.Array方法 创建数组对象的两种方法 检测 ...

  3. 简单聊聊js中的内置对象

    文章目录 一.Map对象 1.常用属性和方法 2.示例 二.Set 1.属性和方法 2.示例 三.Date对象 1.创建Date对象 1.1.*new Date() ;* 2.2.*new Date( ...

  4. oracle 触发器 和 常用内置程序包

    --触发器和常用内置程序包 --author:shine --一.触发器: --1.触发器组成:由触发器语句,触发器限制,触发器操作三部分组成. --exp:1.1.1 create or repla ...

  5. oracle 内置程序包,建立程序包的方法,程序包中使用游标,常用程序包

    文章目录 1. 程序包 1.1 程序包定义 1.2 程序包创建 1.3 程序包中的游标 1.4 有关程序包的信息 2. 内置程序包 3. DBMS_JOB包 4. UTL_FILE包 1. 程序包 1 ...

  6. JS中的内置对象 --- Math、Date、Array、String

    1. 基本概念区分 实例对象:通过构造函数创建出来,实例化对象.实例方法必须通过实例对象调用 静态对象(内置对象): 不需要创建, 直接就是一个对象,方法(静态方法)直接通过这个对象名调用.静态方法必 ...

  7. js中的内置对象(详细篇)

    在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质.注意:通过字面量创建的对象在调用属性和 ...

  8. Vue.js入门 0x2 内置指令(1)

    基本指令 v-cloak v-cloak 不需要表达式,它会在 Vue 实例结束编译时从绑定的 HTML 元素上移除 , 常和 css的 display: none:配合使用. <div id= ...

  9. unity URP内置shader lit解析

    unity内置的pbr渲染shader Properties为shader相关属性 两个SubShader里面为相应的渲染内容,第二个为降级处理渲染,如果第一个SubShader不兼容,才会渲染第二个 ...

最新文章

  1. linux服务器读写硬盘io,查看linux服务器硬盘IO读写负载
  2. 小波图像分解与重构程序存在的问题与解决办法
  3. LevelDB 源码剖析(一)准备工作:环境搭建、接口使用、常用优化
  4. Android查看真机布局,android-外部存储
  5. Wireshark文档阅读笔记-WebSocket协议基本概念
  6. Python——字典生成式
  7. 这个情人节,工程师用阿里云来试着表达不一样的爱意 1
  8. LSI存储论坛:6Gb SAS让DAS焕发新活力?
  9. 食谱数据库数据找不到的问题
  10. 图论与复杂网络建模工具Networkx的四种网络模型
  11. GB28181国标流媒体服务(LiveGBS)-支持海康8700等联网网关通过接入实现web端无插件直播...
  12. 虚幻c++入门到入土(一)VS插件Resharper使用
  13. Use SageMath with PyCharm/PyDev (Use PyCharm/PyDev to run and debug SageMath scripts)
  14. 如何制定一个App推广活动方案
  15. Windows下使用SSD检测
  16. Linux系列讲解 —— SSH登录
  17. 从备受质疑到业绩翻盘,这家少女装品牌为何能上演“命运大逆转”?
  18. WIFI基础入门--802.11k--无线局域网络频谱测量
  19. Devops常用工具软件之ansible部署使用
  20. 三台linux之间免密 SSH 登录

热门文章

  1. 从技术经理的角度算一算,如何可以多快好省的做个app(转)
  2. 杀猪刀,是杀不了狗的
  3. 经典Java面试题汇总及答案解析
  4. 框式路由器MPU、SFU、LPU、SRU科普
  5. 无线供电原理、种类及应用方案介绍
  6. Hibernate框架(17) —— Hibernate中uniqueResult()与list()的区别
  7. ROS下使用stm32 与rosserial进行通信的开发说明及源代码示例
  8. PHP代码审计之基础篇
  9. 海潮音排序算法:分析与针对性提升
  10. postgre sql 学习