冰与火时空门特效解析

在这里插入图片描述

本文在线示例查看。更多精彩内容尽在数字孪生平台,关注公众号:sky的数孪技术,技术交流、源码下载请添加VX:digital_twin123

基本信息

三维渲染库采用threejs,项目用vite打包。
版本:v1.1.0

场景解析

时空门

image.png
这一蓝一红时空门很酷炫,我封装了一个专门的 Portal 类来实现,每个 Portal 类都会创建 Particles、Halo、EventHorizon、Smoke、Lightnings。

Particles

创建粒子效果。根据 ringCountcount 数量来设置顶点数据。

需要一个 FlowField 对象来对顶点数据实现流动效果,这里面运用了交换纹理的技术,通过构造两个 RenderTarget 来实现纹理切换。

材质这块用的 ShaderMaterial,其中片元着色器代码:

uniform vec3 uColor;
uniform sampler2D uMaskTexture;void main()
{float mask = texture2D(uMaskTexture, gl_PointCoord).r;gl_FragColor = vec4(uColor, mask);
}

每帧更新时,通过不断的对 FlowField 对象进行纹理重绘,来替代shader中的 uFBOTexture

Halo

创建圆环效果。这里只是用了一个PlaneGeometry,然后主要是在材质Shader中去计算纹理,具体逻辑可以看片元着色器shaders/portalHalo/fragment.glsl的代码。

vec2 centeredUv = vUv - 0.5;
float distanceToCenter = length(centeredUv);float colorMixA = pow(distanceToCenter * 3.0, 4.0);
vec3 color = mix(uColorA, uColorB, colorMixA);float colorMixB = (distanceToCenter - 0.3) * 30.0;
colorMixB = clamp(colorMixB, 0.0, 1.0);
colorMixB = smoothstep(0.0, 1.0, colorMixB);
color = mix(color, uColorC, colorMixB);float alpha = (distanceToCenter - 0.33) * 20.0;
alpha = 1.0 - alpha;
alpha = smoothstep(0.0, 1.0, alpha);gl_FragColor = vec4(color, alpha);
EventHorizon

创建流动圆环效果。实现跟Halo基本一致,区别主要是片元着色器。这里用了perlin3d的噪声算法来模拟流动效果。

float smoke = perlin3d(vec3(smokeUv * vec2(50.0, 15.0), uTime * 0.001));
smoke *= halo;
smoke *= 2.0;vec3 color = mix(uColorStart, uColorEnd, smoke);gl_FragColor = vec4(color, smoke);
Smoke

创建烟雾效果。根据 count 数量,创建了一堆的大小为1的 PlaneGeometry,赋予流动速度模拟烟雾。用如下烟雾图作为材质的 alphaMap,混合颜色进行计算。
image.png
更新过程中,每个粒子都有一定的生命周期,能够渐渐消逝。

Lightnings

创建电离动态效果。与 Smoke 类似,创建同样大小为1的 PlaneGeometry,用闪电灰度图作为 uMaskTexture,混合颜色进行计算。

float outerAlpha = min(1.0, 1.0 - (length(vModelPosition.xy) - 1.0) * 10.0);float maskStrength = texture2D(uMaskTexture, vUv).r * outerAlpha * uAlpha;gl_FragColor = vec4(uColor, maskStrength);

更新过程与 Smoke 的粒子周期相同。

地面

地面的材质用的MeshStandardMaterial,材质贴图应用了颜色贴图、法线贴图、位移贴图以及粗糙度贴图,并接受阴影;几何应用PlaneGeometry

灯光

本示例场景里添加了两个点光源来点缀场景。

this.lights.items.a = {}this.lights.items.a.color = '#ff0a00'this.lights.items.a.instance = new THREE.PointLight(this.lights.items.a.color, 11)
this.lights.items.a.instance.rotation.y = Math.PI
this.lights.items.a.instance.position.y = - 0.5
this.lights.items.a.instance.position.z = - 1.501
this.lights.items.a.instance.castShadow = true
this.lights.items.a.instance.shadow.camera.far = 7
this.lights.items.a.instance.shadow.normalBias = 0.005
this.scene.add(this.lights.items.a.instance)

人物模型

这个没啥好说的,添加模型,设置好比例位置即可。不过要记得把模型的receiveShadowcastShadow都要开启。

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

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

相关文章

Python第二语言(十四、高阶基础)

目录 1. 闭包 1.1 使用闭包注意事项 1.2 小结 2. 装饰器:实际上也是一种闭包; 2.1 装饰器的写法(闭包写法) :基础写法,只是解释装饰器是怎么写的; 2.2 装饰器的语法糖写法:函数…

Flink作业执行之 2.算子 StreamOperator

Flink作业执行之 2.算子 StreamOperator 前文介绍了Transformation创建过程,大多数情况下通过UDF完成DataStream转换中,生成的Transformation实例中,核心逻辑是封装了SimpleOperatorFactory实例。 UDF场景下,DataStream到Transf…

Java——LinkedList

1、链表 1.1 链表的概念及结构 链表在逻辑层面上是连续的,在物理层面上不一定是连续的 链表结构可分为,单向或双向、带头或不带头、循环或非循环,组合共计8种 重点:无头单向非循环链表、无头双向链表 1.2 模拟实现无头单向非…

【代码随想录】【算法训练营】【第35天】[134]加油站 [135]分发糖果 [860]柠檬水找零 [406]根据身高重建队列

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 35,连休两天~ 题目详情 [134] 加油站 题目描述 134 加油站 解题思路 前提:数组 思路:全局贪心算法:最小累加剩余汽油为负数,说明…

面向对象编程重载

系列文章目录 文章目录 系列文章目录前言一、重载(overload) 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了…

Antd 自定义列表全选功能

背景 需要为List组件自定义全选功能,如下图所示: 全选checkbox需要与下面每一项的checkbox联动;当从第一页翻页到第二页的时候,第一页已选的内容保持,可以对第二页勾选,同时保证全选checkbox的状态是正确的…

在自己的电脑上搭建我的世界Java版服务器

很多朋友,喜欢玩Minecraft,也希望搭建一个服务器,用于和小伙伴联机; 并且,拥有服务器后,即使所有玩家都下线,“世界”依旧在运行,玩家可以随时参与其中,说不定一上线&am…

【Da-SimaRPN】《Distractor-aware Siamese Networks for Visual Object Tracking》

ECCV-2018 中科大 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Features and Drawbacks in Traditional Siamese Networks4.2 Distractor-aware Training4.3 Distractor-aware Incremental Learning4.4 DaSiamRPN for Long-t…

mmap引起的内存泄漏分析

最近遇到一个内存泄漏问题,由于问题出现在客户端,只能通过客户提供的Log来分析。 根据客户提供的/proc/meminfo数据发现,MemAvailable 由294072kB减小至18128kB,减小约269MB,引起该变化的最直接原因是PageTables由614…

49.Chome浏览器有三种清缓存方式

49.Chome浏览器有三种清缓存方式:正常重新加载、硬件重新加载、清空缓存并硬性重新加载 1、【正常重新加载】 触发方式:①F5  ②CtrlR  ③在地址栏上回车  ④点击链接 如果缓存不过期会使用缓存。这样浏览器可以避免重新下载JavaScript文件、图像、…

kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现增量同步

1、之前kettle cdc mysql的时候使用的方案是canalkafkakettle,今天我们一起学习下使用kettle的插件Debezium直接cdc mysql。 注:CDC (Change Data Capture) 是一种技术,用于捕获和同步数据库中的更改。 1)Debezium步骤解析mysql b…

反贿赂管理体系认证:提升企业诚信与防范风险的双重利器

反贿赂管理体系认证在当今商业环境中发挥着至关重要的作用。这一认证不仅有助于提高企业的道德标准和社会责任感,还能有效防范商业风险,并提升内部管理水平和工作效率。 反贿赂管理体系认证要求企业制定和执行严格的反贿赂政策和程序,从而在…

计算机网络原理实验(7):分析IP报文结构

一、实验名称 分析IP报文结构 二、实验目的: 1.掌握使用Wireshark分析俘获trace文件的基本技能; 2.深刻理解IP报文结构和工作原理。 三、实验内容和要求 1.分析俘获的分组; 2.分析IP报文结构。 3.记录每一字段的值,分析它的作…

FL Studio(FL 21)软件下载-详细安装教程视频

​fl studio 编曲软件即,简称FL,是音乐人熟知的水果编曲软件.可以完成完整的音乐制作环境或数字音频工作站(DAW)就是大家熟悉的水果 编曲软件,一个全能的音乐制作软件,包括编曲、录音、剪辑和混音等诸多功能,让你的电脑编程一个全能的录音室。…

基坑监测:关键环节与深入剖析,保障施工安全与质量新标准

在建筑工程中,基坑监测是一项至关重要的工作,它涉及对基坑施工现场的实时监测数据进行分析和评估,以确保基坑施工活动的稳定、安全和高效进行。基坑监测涵盖地质勘探、基坑开挖、加固、支护、周边环境以及工程质量验收等多个环节,…

通信原理抽样定理和PAM调制解调硬件实验

一、实验目的 1. 加深理解抽样定理; 2. 加深理解脉冲幅度调制的原理。 二、实验内容 1. 观测PAM平顶抽样波形; 2. 观测PAM自然抽样波形及解码后波形。 三、实验器材 1. 双踪示波器; 2. 通信原理实验箱信号源模块、①号模块。 四、实…

文章解读与仿真程序复现思路——电工技术学报EI\CSCD\北大核心《基于广义目标级联法的多牵引变电站 光伏-储能协同规划配置》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

java写一个验证码

生成验证码 内容:可以是小写字母,也可以是大写字母,还可以是数字 规则 长度为5 内容中是四位字母,1位数字。 其中数字只有1位,但是可以出现在任意的位置。 package User;import java.util.ArrayList; import jav…

FlashDB的TS数据库的标准ANSI C移植验证

本文目录 1、引言2、环境准备3、修改驱动4、验证 文章对应视频教程: 暂无,可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在当今数据驱动的时代,高效可靠的数据存储与管理对于嵌入式系统及物联网(IoT)应用至关重…