Niagara—— 发射器常见Module

Niagara内容示例 4.3 Mesh Orientation vs. Rotational Force 粒子效果 有三竖列的粒子,都在绕某个轴进行旋转。根据下面的文本提示来看,应该是每堆粒子的旋转操作的赋予方式不同,分别是直接操作网格体朝向(Mesh Orientation),操作旋转的速度(Rotational Velocity),操作发起旋转的力(Rotational Force)。(理科生可能会比较好懂,其实就是分别操作位置,速度以及加速度,如果你脑中有公式的话,其实这三者做的是同一件事,。) Niagara蓝图部分 蓝图中包含了三个发射器(对应三种模式),并配文做出相应的解释。左上角是操作Mesh朝. 阅读详情

Emitter Update

Spawn Particles in Grid

        基于用户定义的网格精度设置来生成粒子,与 Grid Location 一起使用;


Particle Spawn

 Grid Location

        基于Spawn Particles in Grid生成的粒子,将该粒子均匀的分布在网格上;

        模块输出变量 Normalized Array Location 可用于 Sample Texture 模块采样;

Initial Mesh Orientation

        设置Mesh初始方向,即设置属性MeshOrientation;这与Rotational Force/Velocity模块不同,后者建立了一种更基于物理的旋转方法,旋转力需一个额外的求解器,使其成本更高;

对Mesh进行旋转:

对mesh进行定向:

  • Random 随机方向

  • System 系统本身实例的旋转方向

  • Orient to Vector 定向到指定矢量
    • Orientation,通过将Mesh的轴对齐到指定的方向;
      • Orientation Vector 指定的方向;
      • Mesh Axis To Orient 指定哪个轴对象到指定的方向;

  • Orient to Matrix 定向到指定矩阵

  • Orient to Quaternion 定向到指定四元数

Calculate Size and Rotational Inertia by Mass

        根据设定的质量和密度,计算Particles.Scale或Particles.SpriteSize和旋转惯性Particles.RotationalInertia;

不勾选Calculate Mesh Scale,针对的是Sprite的Particles.SpriteSize;

勾选Calculate Mesh Scale,针对的是Mesh的Particles.Scale;

Initialize Mesh Reproduction Sprite

        在Skeletal Mesh表面生成粒子,且粒子大小参考三角面面积,朝向对齐法线;

        该模块首先在Skeletal Mesh上选择一个随机坐标位置,然后使用选择的三角面,计算一个理想的SpriteSize,UVscale、Spritealignment;为正确的将粒子对齐到mesh表面,应设置Custom Alignment、Custom Facing Vector;

        如Mesh没有动画,可勾选"Overwrite Intrinsic Variables",设置所有粒子系统固有参数(Position、Velocity等);如要更新,则不应选中该复选框,应在粒子更新阶段添加"update mesh repropduction sprite"模块;

        在材质内,使用"Niagara_MeshReproductionSpriteUVs"去采样Mesh的UV;

注:这些模块假定Skeletal Mesh的uvs是正方形的,并且没有在一个轴上压缩;

Move to Nearest Distance Field Surface GPU

        将粒子移动到最近距离场的表面,仅适用于GPU且项目已开启Generate Mesh Distance Fields;

  • Vector To Nearest Surface Normal,表示粒子指向表面的单位向量;


Particle Update

Find Kinetic and Potential Energy 

        求动能和势能,重映射总能量默认是0~1;

  • Kinetic Energy = len(v)^2*mass*0.5
  • Total Energy = Kinetic Energy + Potential Energy

Update Mesh Orientation

        随时间更新Mesh方向,即直接设置属性MeshOrientation;这与Rotational Force/Velocity模块不同,后者建立了一种更基于物理的旋转方法,旋转力需一个额外的求解器,使其成本更高;

Rotation Rate 旋转率

Orient To Vector(s)

Orient to Position

Sprite Facing and Alignment

        无论模拟坐标空间如何,Particles.SpriteFacing和Particles.SpriteAlignment均为世界空间向量;

Rotate Around Point

        围绕指定点旋转;

IncrementingCounter += Rate*DeltaTime;
Position = RotationCenter + Radius * Normalize(Cos(IncrementingCounter + Phase) * XAxis + Sin(IncrementingCounter + Phase) * YAxis) 

Collision

GPU

  • GPU Depth Buffer,与任何不透明的on-screen表面碰撞;
  • GPU Distance Fields,非常高效且合理稳定,但仅与足以被低精度距离场捕获的厚度表面碰撞;需已经有距离场的对象,且已在项目设置中激活Generate Mesh Distance;
  • Analytical Planes,是用户定义的无限平面,是最经济便宜的选项;

CPU

  • Ray Traced,非常昂贵,每个粒子通过沿其规矩进行光线追踪的方式查找附近的碰撞表面,使用"WorldDynamic"追踪通道;可读取场景的物理材质特性,如摩擦力和弹性系数;
  • Analytical Planes,是用户定义的无限平面,是最经济便宜的选项;

Collision Radius 每帧计算碰撞半径

  • Sprite,利用Particles.SpriteSize计算碰撞半径;Mesh,使用用户定义的mesh尺寸向量和Particles.Scale变量计算碰撞半径;Custom,直接输入半径值;
  • Bounds,中心到边角的长度;Maximum Axis,最长轴长度/2;Minimum Axis,最短轴长度/2;

Bounce

  • Restitution,控制粒子的反弹系数,1保持所有能量;
  • Restitution Cofficient Blending,碰撞对象的物理材质反弹系数与粒子反弹系数如何融合;

Friction

  • Simple Friction,简单摩擦,较少的控制摩擦参数,大多数情况下已足够用;
  • CPU Friction Blending,碰撞对象的摩擦系数与粒子摩擦系数如何融合;
  • Friction During a Bounce,在碰撞的瞬间对物体施加的摩擦系数;

Static Mesh Location

在指定的Static Mesh位置生成粒子;

Sample Texture

       目前仅支持GPU模拟; 在指定的UV位置采样纹理,并返回颜色;

Mesh Rotational Force

        根据作用在yaw、pitch、roll轴上力的大小添加旋转力,并累加到Transient.PhysicsRotationForce;注意,这是一种基于物理的旋转力,会考虑mass/drag/inertia,会要额外要求旋转解算,比直接设置方向要昂贵的多,不同质量的粒子会对旋转力产生不同反应;

Fade Over Time

        如目标值随时间增加使用目标值,如随时间减少会衰减该值;会输出Particles.FadOverTime.CurrentValue,此值可用于控制其他参数,如材质颜色等;

  • 当目标值 >= 当前值时,使用目标值;
  • 当目标值 < 当前值时,随时间降低当前值;
//Initialize the fader value
if IsFirstFrame
    CurrentValue = TargetValue
else
    CurrentValue = CurrentValue
//Fade the value
if Use Min Delta
    Bool = TargetValue>=CurrentValue and (TargetValue-CurrentValue)>=MinValueDifference
else 
    Bool = TargetValue>=CurrentValue

if Bool
    TempVal = Max(TargetValue,CurrentValue)
else
    if Linear
        TempVal = CurrentValue-FadeRate*DeltaTime
    if Percentage
        TempVal = Max(FadeRate*(CurrentValue-MinValue),MinStepSize)*DeltaTime
        TempVal = CurrentValue-TempVal
TempVal = Max(TempVal,MinValue)

if Active
    CurrentValue = TempVal
else
    CurrentValue = CurrentValue

Update Mesh Reproduction Sprite

         更新在Skeletal Mesh表面生成的粒子属性,包括Position,Velocity等;与Initialize Mesh Reproduction Sprite模块配合使用;

 

Lerp Particle Attributes

        对粒子属性插值;SpriteFacing默认是(0,0,1);

Calculate Accurate Velocity

        从先前位置和现在位置计算精确的速度;对于改变了解算器预期的位置时是有用的‘;

Ray Trace Distance Field GPU

        光线追踪距离场(球型追踪),沿光线迭代采样全局距离场以查找isosurface;

 

Avoid Cone

        避开锥体,一样使粒子偏离聚光灯或锥形区域,约束条件避免粒子穿透临近表面(沿物体表面,即将速度投射到表面);

Time Based State Machine

        表示粒子的状态是开(1)还是关(0);

  • On Duration,从0到指定数值的持续时间;
  • Off Duration,从0到指定数值的持续时间;
  • On Off Percentage,先是1~0持续时间(Lerp Time To Off),在是0~1持续时间(Lerp Time To On);
    • Lerp Time To Off/On,可以是0,这样就是0和1之间切换;

 

Interpolate Over Time

        以用户定义的速率,随时间向目标值插值过渡;

 

Pendulum Setup

        钟摆设置,非物理正确的钟摆约束,能很好地与力相互作用,如Gravity/ Acceleration/drag;原理即在解算完力和速度后,在方向上(粒子到Pendulum Pivot)仍保持指定的钟摆长度(粒子位置到Pendulum Pivot的距离),并更新速度;

  • 不超过Pendulum Length时,无影响不约束,但勾选Rigid Pendulum时,无论超过不超过均约束到该长度;
  • 超过Pendulum Length时,将粒子直接约束到该长度;

Pendulum Constraint

        应用Pendulum Setup模块的设置,应放置在Solve Forces and Velocity后;

【UE4 Niagara】制作自定义形状的粒子效果 最终效果 制作原理 自定义形状——在静态网格体模型的每个顶点处生成粒子 顶端局部粒子停滞——对Kill Particles in Volume粒子模块进行修改 制作过程 一、MAX制作小猪模型 笔者MAX小白,所以这只猪看起来有点呆QAQ 二、UE4中添加Niagara Module Script创建自定义模块 1.根据粒子的索引控制粒子生成的位置 2.判断粒子的位... 阅读详情

相关推荐

UE4 Niagara Module Script 初次使用笔记

最后的Position也是通过Map Set的+号,选择Particles的Position进行赋值的。这里的RandomnTriCoord是模型的坐标信息。选择模型过后ERROR是因为模型没有让CPU访问。点击+号,输出staticmesh,点击它。这里可以创建一个Niagara模块脚本。这样就可以拿到对应的一些模型信息。这样就把模型的位置渲染出来啦!这个警告是因为没有选择模型。根据坐标信息拿到位置信息。这样就可以找到对应的库了。找到对应位置点击这个即可。

qqQQqsadfj的博客 2562

UE4.26 Niagara Initial Mesh Orientation使用方法

这个节点的作用 可以观察,我们想让物体的哪个面朝向哪个轴, 我们就观察左下的坐标,看好我要的方向,确定Axis, 然后把我想要变换朝向的那个物体面,我们修改这个面原来的朝向Vector,给它正值或负值,它就会朝向我们确定的Axis的正或负值方向。 举例: 物体自身默认轴向 然后我想把现在朝向Z轴的这个面朝向我的Y轴正向,那么我就可以先确定我的Axis为Y轴,这一步更换Axis并不会致使物体旋转 然后将Vector中的Z轴给1或-1,它就会使原来朝向Z轴的面,变更为朝向Y轴正或Y轴反向

m0_47597273的博客 2619

UE5 Niagara粒子系统实战:构建动态交互闪电链特效

在游戏开发与实时渲染领域,粒子系统是实现复杂视觉特效的核心技术之一,它通过模拟大量微小粒子的行为来呈现火焰、烟雾、水流及能量效果。其原理在于对粒子的位置、速度、生命周期及外观属性进行程序化控制。这项技术的价值在于能够高效、灵活地创造出传统建模难以实现的动态、有机视觉效果,极大地增强了游戏的沉浸感和表现力。在虚幻引擎(UE)中,Niagara作为新一代的粒子系统,为开发者提供了强大的可视化脚本工具和性能优势,广泛应用于技能特效、环境互动和场景氛围营造。本文聚焦于利用UE5的Niagara系统,结合蓝图(Blu

weixin_34375251的博客 789

Niagara粒子

常用方法介绍Emitter SettingsEmitter SpawnEmitter UpdateParticle SpawnInitialize ParticleInitial Mesh OrientationAdd VelocityBox Location 方形发射器Calculate Size and Rotational Inertia by MassParticle UpdateUpd...

u013523190的博客 2524

解密UE4 Niagara脚本编辑器:从Module Script创建到HLSL转换的完整工作流

本文深入解析UE4 Niagara脚本编辑器的工作流程,从Module Script创建到HLSL代码转换的全过程。详细介绍了模块脚本的基础架构、编辑器界面功能、代码转换机制及高级调试技巧,帮助技术美术和图形程序员掌握Niagara粒子系统的核心开发技术,提升特效制作效率。

eee77的博客 859

关卡 动画 蓝图 运行_【UE4】Niagara基础入门+Niagara中的Spline 动画

【前言】本篇全部是Niagara粒子系统的基础知识内容。才疏学浅、如有纰漏、还请多多指教。双击刮奖区可在文末抽奖。【Niagara基础知识】【Niagara中的Spline】一、Niagara Emitter 中设置粒子的寿命和数量上面红框中的值先不要按照图中去设置,因为马上要用变量来代替,以在变量表中去控制,要不然需要来回在emitter/particle update/spawn中找,比较费眼...

weixin_31321157的博客 2973

学习Niagara特效系统:观察内容示例所展示的特性

目标 和《学习Cascade粒子系统:观察内容示例所展示的特性》类似,学习Niagara特效范例。 1.1 Simple Sprite Emitter 主要展示了Sprite(面片)这种渲染器 另外,可以注意的是,“粒子大小随声明周期变大变小”的效果,是Scale Sprite Size模块定义的行为,而其中Scale Factor使用了动态输入:首先用Vector 2D From Float将一个float转变为一个2d向量,然后用Sine指定一个正弦的变化。 ![在这里插入图片描述](https

主要记录了工作之余胡乱学习的知识,大部分是入门级别的内容。 主要是为了自己未来有用到时能快速上手,相当于是个备忘录。 当然,也很开心其他人可以从中找到对自己有用的信息。^_^ 3380

openEuler Embedded新增软件包及在线安装软件方法

openEuler Embedded是基于Yocto构建的嵌入式操作系统,默认不包含dnf/apt软件包管理器,主要使用rpm格式。新增软件需通过manifest文件检查是否集成,未集成则需适配新配方。对于在线安装需求,可采用轻量级容器方案:通过isulad运行openEuler服务器版容器镜像,在容器内使用dnf命令安装软件(如Nginx),实现服务器生态兼容。部署前提包括设备支持、存储空间(≥10GB)和网络连接,需先安装并启动isulad服务。这种方法结合了嵌入式系统的轻量化特性和服务器系统的软件管理

专注嵌入式开发与 Linux 系统应用实战,分享芯片驱动、设备调试、系统工具开发干货。 1225

UE4_动画基础_角色的缩放

角色缩放及Niagara system component应用。

Growthofnotes的博客 1130

弹簧管压力表设计报告

精密机械课程设计 弹簧管压力表设计报告 2020年5月1日 目 录 第一章 设计任务概述... 3 1.1 课程设计目的... 3 1.2 设计任务... 3 1.3 技术指标... 3 第二章 压力表概述... 4 2.1 机械式压力表的组成部分... 4 2.2 工作原理... 4 第三章 压力表设计... 5 3.1 弹簧管参数设计... 5 3.2 曲柄滑块机构设计... ...

weixin_42163746的博客 6451

【软件使用】Calibre部分提参的实用技巧与常见问题解析

本文深入解析Calibre部分提参功能的实用技巧与常见问题,重点介绍hcell和xcell文件的配置方法、PEX命令的进阶使用技巧,以及时钟失真等典型问题的排查指南。通过精准控制寄生参数提取范围,显著提升复杂芯片设计的效率与准确性。

weixin_30836759的博客 117

虚幻UE 特效-Niagara特效初识

主要对UE Niagara系统的四大核心组件进行讲解:系统System、发射器Emitter、模块Module、参数Parameter。还有Niagara系统的生命周期:发射器生成(Emitter Spawn)、发射器更新(Emitter Update)、粒子生成(Particle Spawn)、粒子更新(Particle Update)。

UE成长之路,欢迎大家的关注! 2758

tcmalloc(高并发内存池)简化版讲解-项目

高清发不上去,私我发高清,项目完整代码@我。

2201_75352618的博客 910

Niagara—— 自定义Module

自定义scratch pad Module;

NapoleonCoder的博客 910

保姆级教程:用PyTorch从零实现SDE扩散模型(附完整代码与MNIST实战)

本文提供了一份详细的PyTorch教程,指导读者从零开始实现SDE扩散模型,并附有完整的代码示例和MNIST数据集实战。通过解释随机微分方程(SDE)的核心概念、模型架构设计、训练流程实现以及采样生成过程,帮助开发者掌握扩散模型的构建与应用。

weixin_28677005的博客 265

别再手动盘点了!教你给微信小程序仓库系统加个‘扫码枪’:完整扫码入库与查询功能实现

本文详细介绍了如何为微信小程序仓库系统添加扫码入库与查询功能,实现零硬件成本的智能仓储管理。通过优化摄像头参数、增强动态识别算法和深度整合业务逻辑,提升扫码精度和效率,同时提供混合查询方案应对复杂场景。这套方案显著提升入库效率,降低错误率,适用于各类仓储管理需求。

weixin_30844577的博客 298

UE5 Niagara Module Script:模型坐标驱动粒子渲染实战

在实时3D渲染中,粒子特效与动态模型的精准空间绑定是技术美术与引擎程序员的核心挑战。其本质是三维坐标系间的多级数学映射——从骨骼局部空间出发,经骨骼世界变换、模型实例位移,最终转换至粒子发射器局部坐标,全程需严守矩阵乘法顺序与线程一致性。UE5 Niagara 的 Module Script 作为运行于GPU的着色器逻辑,凭借零线程切换、逐粒子并行计算与帧内同步等特性,成为实现低延迟、高精度模型驱动粒子的唯一工程可行路径。该方案广泛应用于角色技能特效、载具尾焰、环境交互反馈等对时空一致性要求严苛的工业级场景

weixin_30423977的博客 645

【Python】解决 ERROR: Exception:Traceback (most recent call last):(亲测有效)

1、遇到问题2、问题解决

Fanjufei的博客 1万+

UE Niagara脚本编辑器深度解析:从Module Script到HLSL的完整工作流

在实时图形渲染与游戏特效开发中,GPU并行计算是实现大规模粒子模拟的核心技术。其原理在于将大量重复的计算任务(如粒子位置、速度更新)交由GPU的数千个核心同时处理,从而获得远超CPU的吞吐量。HLSL作为DirectX的标准着色器语言,是实现GPU计算的关键桥梁,它允许开发者编写直接在图形硬件上运行的程序。这项技术的价值在于能够高效驱动数十万甚至百万级的动态粒子,为复杂的视觉特效(如爆炸、烟雾、魔法)提供了性能基础。其应用场景广泛覆盖了游戏、影视预演和实时可视化领域。本文聚焦于Unreal Engine的N

weixin_33701564的博客 407

【MATLAB代码】雷达观测目标跟踪模型|H-infinity Filter(H无穷大滤波)与EKF(扩展卡尔曼滤波)的对比。附完整代码,订阅专栏后可直接查看

对比了经典扩展卡尔曼滤波(EKF)与H∞优化的EKF(H∞-EKF)在目标跟踪中的性能。通过MATLAB仿真实验,结果显示:在存在模型误差和测量噪声的情况下,H∞-EKF相比经典EKF在位置误差上降低

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 243

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Niagara—— 所有FX相关资产介绍

Niagara所有FX相关资产介绍;

NapoleonCoder的博客 965

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【UE4】NiagaraSystem / ParticleSystem 自动添加 Module

Niagara/Cascade自动添加Module

Bob__yuan的博客 1820

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

UE Niagara 发射器阶段设置浮点数组的话会出现的bug

首先介绍我的某个数组的引用链,这个是一个浮点数组,发射器生成阶段用户变量的浮点数组赋值给发射器的浮点数组,然后模拟阶段使用的是发射器的浮点数组。经查如果你第一次打开工程,没有打开过niagara编辑器,那么这个赋值的操作不会进行,而其他的赋值操作却可以正常进行,比如我的Grid 和RT的size也是绑的用户变量,但是不会有这个问题。如果这个工程第一次打开(关闭后打开也算)那么直接运行不会有任何效果,但是你如果点开一次niagara编辑器就马上恢复正常。保存-关闭项目-重新打开-运行-效果正确!

bingxintbs的博客 338

UE5 Niagara自定义模块实现粒子系统间实时数据通信

在实时图形与游戏特效开发中,粒子系统间的数据交互是提升视觉效果真实感与动态表现的关键技术。传统上,粒子系统往往独立运行,但通过深入引擎底层机制,我们可以实现高效的跨发射器通信。其核心原理在于利用GPU并行计算与持久化数据存储,在Niagara框架内构建自定义模块,绕过游戏线程的中转,直接在渲染管线中完成数据传递。这项技术的工程价值在于大幅降低了粒子联动的性能开销,使得火花触发烟雾、能量引导粒子流等复杂互动得以实时实现。应用场景广泛覆盖了游戏战斗特效、影视级视觉表现以及交互式媒体艺术。本文聚焦于UE5的Nia

weixin_30326741的博客 388

UE Niagara粒子特效实战:从零制作刀锋剑气效果

粒子系统是实时渲染与游戏开发中实现动态视觉特效的核心技术,它通过模拟大量微小粒子的行为来构建烟雾、火焰、魔法等复杂视觉效果。其原理基于对粒子位置、速度、生命周期及外观属性的程序化控制。在虚幻引擎中,Niagara作为新一代可视化粒子系统,提供了强大的节点化编辑能力,极大地提升了特效创作效率与灵活性。掌握Niagara对于技术美术和游戏开发者而言,能直接提升项目的视觉表现力与开发迭代速度。本教程聚焦于Niagara的实战应用,详细演示如何从发射器配置、粒子动力学控制到材质着色,系统性地构建出游戏中常见的“刀锋

weixin_34101229的博客 381

UE5 Niagara实战:从零构建可交互刀锋挥砍特效

粒子系统是实时渲染中模拟动态视觉效果的核心技术,它通过程序化控制大量微小图元(粒子)的行为、外观与生命周期,来表现烟雾、火焰、水流、魔法轨迹等复杂自然现象与能量形态。其原理在于将物理规则(如速度、力场、碰撞)与艺术参数(如颜色、大小、透明度)解耦为模块化组件,通过数据驱动实现高效、可控的模拟。这一技术为游戏开发、影视特效和实时可视化项目带来了前所未有的动态表现力与迭代效率,尤其在需要高互动性、高性能的实时应用场景中至关重要。本文聚焦于利用Unreal Engine 5的Niagara粒子系统,深入剖析如何将

weixin_30520015的博客 405
上一篇: Creed —— 保存与加载
下一篇: Niagara—— 渲染关卡序列帧
挨代码
博客等级 码龄5年 1696粉丝 384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值