threejs-后期通道效果汇总

news2025/1/24 17:55:49

文章目录

  • 前言
  • 后期处理通道汇总
  • 简单通道效果
    • FilmPass
    • DotScreenPass
    • BloomPass
    • UnrealBloomPass
    • OutlinePass
    • GlitchPass
    • HalftonePass
  • 高级通道效果
    • 掩码效果MaskPass
    • 景深效果 BokehPass
    • 景自定义效果 ShaderPass
  • 总结


前言

Threejs提供了很多后期处理通道,配合 THREE.EffectComposer可实现各种效果,本文列举Threejs包含的通道及效果。


后期处理通道汇总

API效果说明
THREE.AdaptiveToneMappingPass根据场景光照强度自动调节场景亮度
THREE.BloomPass增强场景中的明亮区域模拟现实世界中的摄像机
THREE.BokehPass实现类似于大光圈镜头的景深效果
THREE.ClearPass清空纹理缓存
THREE.CubeTexturePass渲染天空盒
THREE.DotScreenPass将黑点图层应用到屏幕的原始图片上
THREE.FilmPass通过扫描线和失真来模拟电视屏幕效果
THREE.GlitchPass随机在屏幕上显示电脉冲
THREE.HalftonePass模拟传统印刷中的半色调效果,通过网格点大小和疏密表现亮度
THREE.MaskPass在当前区域添加掩码,后续的通道只会影响掩码区域
THREE.OutlinePass勾勒场景中的轮廓
THREE.RenderPass在当前场景和摄像机上渲染出一个新的场景
THREE.SAOPass 、THREE.SSAOPass实现实时环境光遮挡效果
THREE.SMAAPass、THREE.SSAARenderPass添加全屏反锯齿效果
THREE.SSAARenderPass根据场景光照强度自动调节场景亮度
THREE.SavePass反复当前的渲染效果
THREE.ShaderPass接收自定义的着色器,生成一个高级、自定义的后期处理通道
THREE.TAARenderPass一种全屏反锯齿效果
THREE.AdaptiveToneMappingPass根据场景光照强度自动调节场景亮度
THREE.TexturePass将其它组合器的当前状态保存为纹理,将其参数传入到其它的组合器里
THREE.UnrealBloomPass与THREE.Bloom类似的泛光,效果接近于Unreal 3D

简单通道效果

列举常用的简单通道

FilmPass

通过扫描线和失真来模拟电视屏幕效果

	const renderPass = new RenderPass(scene, camera);
    const effectFilm = new FilmPass(0.8, 0.325, 256, false);
    effectFilm.renderToScreen = true;
    
    composer.current = new EffectComposer(render);
    composer.current.addPass(renderPass);
    composer.current.addPass(effectFilm);

在这里插入图片描述

DotScreenPass

黑点图层

    const renderPass = new RenderPass(scene, camera);
    const dotScreenPass = new DotScreenPass();   
    dotScreenPass.renderToScreen = true;
    
    composer.current = new EffectComposer(render);
    composer.current.addPass(renderPass);
    composer.current.addPass(dotScreenPass);

在这里插入图片描述

BloomPass

增强场景中的明亮区域

实现这个功能注意两点:

  • BloomPass 不能直接渲染至屏幕上,可借助 ShaderPass
  • 在渲染更新时将 render.autoClear 设置为false并调用 render.clear(),否则渲染场景会被清空
	import { ShaderPass } from "three/examples/jsm/postprocessing/ShaderPass.js";
	...
    const renderPass = new RenderPass(scene, camera);
    const effectCopy = new ShaderPass(CopyShader);
    effectCopy.renderToScreen = true;
    const bloomPass = new BloomPass();

    composer.current = new EffectComposer(render);
    composer.current.addPass(renderPass);
    composer.current.addPass(bloomPass);
    composer.current.addPass(effectCopy);

	···
	const renderScene = useCallback(() => {
    	console.log('renderScene')
    	const delta = clock.current.getDelta();
    	window.requestAnimationFrame(() => renderScene())
    	controls.update();
    	earthRef.current.rotation.y += 0.001;
    	render.autoClear = false;
    	render.clear();
    	// render.render(scene,camera);
    	composer.current.render(delta);
  }, [render])

在这里插入图片描述

UnrealBloomPass

效果更接近于Unreal 3D 的泛光效果

	const unrealBloomPass = new UnrealBloomPass();
    const renderPass = new RenderPass(scene, camera);
    composer.current = new EffectComposer(render);
    composer.current.addPass(renderPass);
    composer.current.addPass(unrealBloomPass);

在这里插入图片描述

OutlinePass

勾勒场景中的轮廓

    const outlinePass = new OutlinePass(
      new THREE.Vector2(window.innerWidth, window.innerHeight),
      scene,
      camera,
      [earthRef.current]);
    const renderPass = new RenderPass(scene, camera);
    composer.current = new EffectComposer(render);
    composer.current.addPass(renderPass);
    composer.current.addPass(outlinePass);

在这里插入图片描述

GlitchPass

随机生成电脉冲效果

	const glitchPass = new GlitchPass();
    const renderPass = new RenderPass(scene, camera);
    composer.current = new EffectComposer(render);
    composer.current.addPass(renderPass);
    composer.current.addPass(glitchPass);

在这里插入图片描述

HalftonePass

模拟传统印刷中的半色调效果

    const halftonePass = new HalftonePass();
    const renderPass = new RenderPass(scene, camera);
    composer.current = new EffectComposer(render);
    composer.current.addPass(renderPass);
    composer.current.addPass(halftonePass);

在这里插入图片描述

高级通道效果

掩码效果MaskPass

为指定的场景添加通道效果

  • 场景三个场景,分别存放背景;地球;火星
  • 使用 EffectComposer 将三个场景放置在一个 render下
  • 分布为地球和火星添加颜色效果

在这里插入图片描述

景深效果 BokehPass

使得指定场景的那一部分处在景深效果中(模糊虚化)

在这里插入图片描述

景自定义效果 ShaderPass

ShaderPass提供了许多封装完成着色器程序来添加自定义效果

ShaderPass具体的种类和源码可去three\examples\js\shaders 查阅,下面是其中一部分:

在这里插入图片描述

总结

  • 后期处理通道汇总

  • 简单通道效果列举

  • 高级通道效果列举

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【并发编程Python】一文了解Python并发编程,协程、线程、进程

并发编程简介和一些前缀知识 并发编程是使得程序大幅度提速的。在并发编程中,程序可以同一时间执行多个任务,这有助于提高程序的吞吐量和响应时间。并发编程设计的主要概念包括线程、锁、同步、信号量、进程间通信等。 前缀知识: IO&#x…

信息系统项目管理师第四版知识摘编:第22章 组织通用治理​

第22章 组织通用治理​ 组织治理是协调组织利益相关者之间关系的一种制度安排,目标是为了确保组织的高效决策,实现利益相关者之间的利益均衡,提高组织的绩效,确保组织运行的可持续发展。​ 22.1组织战略​ 组织战略是组织高质量…

一文读懂:低代码开发平台对企业效益有什么作用?

一文读懂:低代码开发平台对企业效益有什么作用? 近年来,企业数字化转型的需求越来越迫切,但面临着IT人才不足、成本高昂等痛点问题,于是零代码平台应运而生,成为企业数字化转型的重要工具。 市面上的零代…

基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的的脑部肿瘤识别分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它…

Spring boot+Vue博客平台:文章列表展示、文章分类与标签管理模块实现

本文将详细介绍如何实现博客平台中的文章列表展示、文章分类与标签管理功能,包括前端的Vue组件设计和后端的Spring Boot接口实现。在阅读本文后,您将了解如何设计和实现高效、易用的文章列表展示、文章分类与标签管理功能。 一、文章列表展示 1.设计思…

电脑蓝屏错误MACHINE-CHECK-EXCEPTION重装系统教程

电脑蓝屏错误MACHINE-CHECK-EXCEPTION重装系统教程分享。最近有用户电脑遇到了蓝屏问题,正常使用电脑的时候常常会出现了蓝屏错误代码“MACHINE-CHECK-EXCEPTION”。那么遇到这个问题要怎么去进行系统的重装呢?来看看以下的具体操作方法教学吧。 准备工作…

JVM/GC/CMS

CMS (Concurrent Mark Sweep) jdk1.4后期版本开始引入的新gc算法ParNew(新生代) CMS(老年代)组合使用使用标记-清除算法目标:适合于B/S等对响应时间要求高的场景缺点:运行结束产生大量空间碎片缺点:由于分配给用户使用的老年代空间不足造成…

一文快速回顾 Servlet、Filter、Listener

什么是Servlet? 前置知识: Web 服务器:可以指硬件上的,也可以指软件上的。从硬件的角度来说, Web 服务器指的就是一台存储了网络服务软件的计算机;从软件的角度来说, Web 服务器指的是一种软件…

使用codon加速你的python程序

使用codon加速你的python程序 作为高性能 Python 编译器,Codon 可将 Python 代码编译为本机机器代码,而无需任何运行时开销。在单线程上,Python 的典型加速大约为 10-100 倍或更多。Codon 的性能通常与 C/C 的性能相当。与 Python 不同&#…

Three.js教程:第一个3D场景

推荐:将NSDT场景编辑器加入你3D工具链其他工具系列:NSDT简石数字孪生下面的代码完整展示了通过three.js引擎创建的一个三维场景,在场景中绘制并渲染了一个立方体的效果,为了大家更好的宏观了解three.js引擎, 尽量使用了…

【linux】进程和线程的几种状态及状态切换

文章目录一、进程的状态1.1 进程的三种状态1.2 三种状态转换图1.3 三种状态之间的转换1.4 linux下的进程进程状态二、线程的状态三、总结一、进程的状态 1.1 进程的三种状态 进程状态:一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进…

安装spacy+zh_core_web_sm避坑指南

目录 一、spacy简介 二、安装spacy 三、安装zh_core_web_sm 四、安装en_core_web_sm 五、效果测试 5.1 英文测试 5.2 中文测试 一、spacy简介 spacy是Python自然语言处理(NLP)软件包,可以对自然语言文本做词性分析、命名实体识别、依赖…

Java数组的四种拷贝方式

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

ERTEC200P-2 PROFINET设备完全开发手册(3-2)

周期数据分为两大类,输出数据OutputData和输入数据InputData,输出数据是PLC发送给设备的;输入数据是设备发送给PLC。如果采用标准接口(SI),读取输出数据和写入输入数据都是一次初始化数据读写调用和一次/多…

【ChatGPT】多国“围堵”,万人抵制,AI发展的红线到底在哪?

个人主页:【😊个人主页】 文章目录前言Chatgpt💻💻💻多国拟发ChatGPT禁令🈲🈲🈲开端发展高潮联名抵制自我辩解🎛️🎛️🎛️名家争言比尔盖茨&…

TiDB进阶篇-TiKV架构

简介 简要的介绍下TiKV的架构。 底层存储RocksDB RocksDB的写操作 在写入WAL的时候为了防止操作系统写入的时候有缓存,要设置操作系统的参数sync_logtrue,也就是说只要有数据就执行刷写到磁盘,就不会存储到操作系统的缓存了。MemTable的数据…

【Python】无限逼近求积分

✨博文作者 wangzirui32 💖 喜欢的可以 点赞 收藏 关注哦~~ 👉本文首发于CSDN,未经许可禁止转载 Hello,大家好,我是wangzirui32,今天我们来学习如何用Python无限逼近求积分,开始学习吧&#xff…

krita源码提供了Tarball 和KDE Repository两套源码的区别

krita系列文章目录 文章目录krita系列文章目录前言一、Tarball 和KDE Repository区别是什么?二、使用步骤前言 krita官方主页 krita官方下载界面 krita源码提供了Tarball 和KDE Repository两套源码,我一下就懵圈了,不知道两者的区别 一…

第二章 自然语言处理与单词的分布式表示

目录2.1 自然语言处理(Natural Language Processing,NLP)2.2 同义词词典2.2.1 WordNet2.2.2 同义词词典的问题2.3 基于计数的方法2.3.1 基于 Python的语料库的预处理2.3.2 单词的分布式表示2.3.3 分布式假设2.3.4 共现矩阵2.3.5 向量间的相似…

有哪些中西合璧的建筑设计?

所谓中西合璧,中即中华文化,体系繁多,源远流长,浩如烟海,是世界三大文化体系之一,在历史上曾是东亚文化的中心,一度影响欧洲;西即西方文化,西方物质文明和精神文明&#…