新闻详情

新闻详情

首页 / 资讯中心 / 详情

10 分钟调出复古半色调点阵:three.js DotScreenPass 实战指南

发布时间:2026/9/8 23:23:40来源:尧图网络
10 分钟调出复古半色调点阵:three.js DotScreenPass 实战指南
10 分钟调出复古半色调点阵three.js DotScreenPass 实战指南【免费下载链接】three.jsJavaScript 3D Library.项目地址: https://gitcode.com/GitHub_Trending/th/three.jsthree.js 的DotScreenPass是一个半色调后处理通道场景渲染完成后它把整幅画面重绘成密集圆点阵列让屏幕看起来像报纸印刷或老式点阵屏。读完这篇你能拿到一段可直接粘贴的接入代码以及一套运行时调节网点旋转与脉冲的配方。先让画面变味儿——最小可运行接入DotScreenPass是 addon 模块不在核心包里必须显式引入。下面这段代码把它接进场景渲染之后的后处理链import * as THREE from three; import { EffectComposer } from three/addons/postprocessing/EffectComposer.js; import { RenderPass } from three/addons/postprocessing/RenderPass.js; import { DotScreenPass } from three/addons/postprocessing/DotScreenPass.js; const composer new EffectComposer( renderer ); composer.addPass( new RenderPass( scene, camera ) ); composer.addPass( new DotScreenPass( new THREE.Vector2( 0, 0 ), 0.5, 0.8 ) ); function animate() { requestAnimationFrame( animate ); composer.render(); } animate();跑起来后整块画面被圆点阵列覆盖亮的地方点又大又亮暗的地方几乎沉进黑里颜色信息被点阵的明暗代替——就是报纸放大看的那种质感。这个构造写法在官方运行示例 examples/webgl_postprocessing_advanced.html 里原样出现。三个旋钮怎么拧——参数调优速查构造函数收三个参数对应三个旋钮网点从哪开始旋转、点阵斜多少、点有多大。new DotScreenPass( center, angle, scale );三个参数都是可选的省略就沿用着色器默认值参数含义默认值推荐范围center网点相位原点( 0.5, 0.5 )屏幕中心( 0, 0 )屏幕角落angle网点旋转角弧度1.57约 π/20 ~ 6.28scale网点密度越大点越小1.00.5 ~ 2.0把scale从 1.0 拖到 0.5颗粒感立刻粗一倍——相当于同一张网点底片是放大打印还是缩小打印的差别。angle设成0.5点阵会微微倾斜多几分手绘报纸的味道。让网点动起来——运行时动态调参 ✨pass.uniforms和材质共享同一份引用改完下一帧就生效无需重建 pass。把angle在动画帧里每次加一点网点就开始缓慢转圈const dotScreen new DotScreenPass( new THREE.Vector2( 0, 0 ), 0.5, 0.8 ); composer.addPass( dotScreen ); function animate() { requestAnimationFrame( animate ); dotScreen.uniforms.angle.value 0.01; dotScreen.uniforms.scale.value 0.6 0.3 * Math.sin( Date.now() * 0.001 ); composer.render(); } animate();跑起来后angle每帧加 0.01 让点阵慢转scale由正弦波驱动网点粗细来回呼吸。想让网点相位挪位置用dotScreen.uniforms.center.value.copy( new THREE.Vector2( 0.3, 0.7 ) )一行搞定。滤镜背后那 20 行着色器——半色调算法拆解视觉效果的核心是 DotScreenShader.js 里的片元着色器算法沿用了 glfx.js 的实现。关键代码就这么多float pattern() { float s sin( angle ), c cos( angle ); vec2 tex vUv * tSize - center; vec2 point vec2( c * tex.x - s * tex.y, s * tex.x c * tex.y ) * scale; return ( sin( point.x ) * sin( point.y ) ) * 4.0; } void main() { vec4 color texture2D( tDiffuse, vUv ); float average ( color.r color.g color.b ) / 3.0; gl_FragColor vec4( vec3( average * 10.0 - 5.0 pattern() ), color.a ); }拆成三步理解1取 RGB 平均值average当这个像素的灰度亮度2把 UV 换算到像素空间以center为原点按angle旋转、再乘scale——两个旋钮的数学来源就藏在这几行3对旋转后坐标分别取sin再相乘得到 [-1, 1] 间的周期性调制值放大 4 倍后叠加到average * 10.0 - 5.0的亮度基底上形成明暗靠点阵表达的半色调观感原图 alpha 原样保留。想自定义网点造型——45° 新闻纸排布、CMYK 彩色分色——改pattern()这一个函数再把自己的 ShaderMaterial 传给 pass 即可。组合拳实战——后处理链级联配置网点滤镜单飞能看级联出味道场景渲染 → 伽马校正 → 网点 → 渐晕。通道顺序直接决定最终观感比如伽马校正放在网点后面网点本身的黑白也会被校正整体色调明显变亮。下面这条链可直接嵌入项目import { ShaderPass } from three/addons/postprocessing/ShaderPass.js; import { GammaCorrectionShader } from three/addons/shaders/GammaCorrectionShader.js; import { VignetteShader } from three/addons/shaders/VignetteShader.js; const composer new EffectComposer( renderer ); composer.addPass( new RenderPass( scene, camera ) ); composer.addPass( new ShaderPass( GammaCorrectionShader ) ); const dotScreen new DotScreenPass( new THREE.Vector2( 0, 0 ), 0.5, 0.8 ); composer.addPass( dotScreen ); const vignette new ShaderPass( VignetteShader ); vignette.uniforms[ offset ].value 1.6; vignette.uniforms[ darkness ].value 0.95; composer.addPass( vignette );运行后画面是点阵质感加四角压暗一股老电影放映机的味道。offset/darkness取 1.6 和 0.95 来自官方 advanced 示例照抄不会出错。踩坑清单与资源释放 ⚠️漏调 dispose 会泄漏 GPU 资源动态重建后处理链时先把旧 pass 摘掉再释放chrome://gpu里 WebGL 纹理数不再上涨才算干净dotScreen.dispose();这一行会释放 ShaderMaterial 和全屏四边形几何体不执行的话这两块显存就一直挂着。scale与网点密度是反比数值越大点越小越细密越小点越大越粗。新手最常搞反第一次想调细结果调出一颗大圆点。渲染管线边界Pass基类模块注释明确只服务WebGLRenderer后处理。项目走 WebGPU TSL 的话请改用 DotScreenNode 文档 里的 Node 实现这个 Pass 不能原样搬过去。别手动设tDiffuse和tSizerender()每帧自动写入上一通道纹理和缓冲区宽高你自己设了也会被覆盖白忙活。如果你只带走这几句引入路径three/addons/postprocessing/DotScreenPass.js挂进EffectComposer才生效构造三参center/angle/scale全部可省省了就用默认值想要更细的网点把scale往大了调——它是反比动画帧里改uniforms下一帧即生效不用重建移除通道前dispose()一次显存还给你。参考官方文档Pass 源码着色器源码Pass 基类运行示例【免费下载链接】three.jsJavaScript 3D Library.项目地址: https://gitcode.com/GitHub_Trending/th/three.js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

湖南村级界线矢量数据清洗与应用实战指南 2026/9/9 0:08:45

湖南村级界线矢量数据清洗与应用实战指南

简介:湖南村级行政界线矢量数据以shapefile格式提供全省村级行政区域边界,面向GIS制图、空间分析和行政区划研究场景,适合需要村级基础底图的规划、国土、农业、科研等从业者及学生使用。压缩包共6个文件,由.shp几何数据、.dbf属性…

阅读更多 →
PX4 SITL+Gazebo+QGC仿真环境深度搭建与故障排查指南 2026/9/9 0:08:45

PX4 SITL+Gazebo+QGC仿真环境深度搭建与故障排查指南

1. 这不是“装个软件就完事”的仿真环境,而是PX4飞控开发的底层工作台你搜过“ubuntu搭建px4无人机仿真环境”,点开前十个结果,大概率会看到一串命令复制粘贴——sudo apt install gazebo11、git clone PX4-Autopilot、make px4_sitl_default…

阅读更多 →
40年城市年鉴面板数据整理:清洗、编码与校验实战 2026/9/9 0:08:45

40年城市年鉴面板数据整理:清洗、编码与校验实战

做城市经济、区域发展或者历史地理研究的人,几乎人手一册《中国城市统计年鉴》。但真要把1985—2025这40年的年鉴整理成一份能直接跑回归的面板数据,工作量比大多数论文“数据来源”段落里写的那两行字要残酷得多。不同版本的表格结构变了、指标名称换了…

阅读更多 →
Matlab蚁群算法路径规划实操指南:可调参、可部署、可落地 2026/9/9 0:08:45

Matlab蚁群算法路径规划实操指南:可调参、可部署、可落地

简介:本资源是一份面向算法学习者与MATLAB初学者的蚁群算法(ACO)路径规划实践代码包,聚焦旅行商问题(TSP)等组合优化场景,适用于机器人导航、物流调度等实际路径规划任务的原理验证与算法调试。…

阅读更多 →
智能体是什么?概念拆解、架构原理与落地入门指南 2026/9/9 0:08:45

智能体是什么?概念拆解、架构原理与落地入门指南

给新人讲“什么是智能体”,我从来不会先念定义。我通常只问一个问题:你手头有没有一件事,每周至少重复三遍以上,而且每次都希望有个AI替你跑完?多数人会愣一下,然后反问我:智能体是不是就是那个…

阅读更多 →
用原生JavaScript打造2048小游戏:从零实现核心算法与交互 2026/9/9 0:05:45

用原生JavaScript打造2048小游戏:从零实现核心算法与交互

简介:这是一款基于纯JavaScript开发的网页版2048小游戏完整源码包,面向初级Web工程师及前端初学者,旨在通过一个无需外部框架的实战项目,帮助理解JavaScript核心机制、DOM操作、事件驱动编程和游戏状态管理等知识点。压缩包共3个文…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞