1.原理demo

原理:使用*[ extractcenter ]节点提取pieces的中心点,使点沿曲线移动,再使用[ transformpieces ]*节点 沿点移动碎片

image-20250820161940220

1.多个点沿曲线移动,(根据曲线上的uv位置移动点)

[ primuv() ] 函数, 使用的是内在的属性(intrinsic) prim uv,对指定属性(这里是"P"位置)在指定uv位置处插值.

1.使用[findattribval()] 函数,寻找prim中的name属性,以此将点与曲线一一对应.

2.为每个点设置uv值,依此在曲线上移动点

image-20250820163244267
使用promote将name属性 从point推广到的prim
image-20250820163300772

4.映射到时间轴,设置动画

image-20250820164605136

3.这里不使用[uvsample()]函数,其使用的是uv属性中的指定位置,需要为曲线创建uv属性(uvtexture节点),并且无法指定prim,只能对单个prim作用

2.fracture 粉碎

1.转换为VDB,在转换或polygon,确保网格完整

image-20250820200622019

1.使用Verona fracture结合Boolean fracture

1.在volume中scatter点,以此切割bound边框,保留内在部分作为切割刀具.

image-20250820201108946

1.清理刀具网格clean,修复重叠

image-20250820201121707

2.remesh网格, 加上噪波(多层)

注意mountain noise ==要取消noise alone vector,==否则会产生大量小碎片
image-20250820201254584
==打开则会产生大量交错==
image-20250820205743454 image-20250820205821016 image-20250820205857524 image-20250820205912349

3.使用Boolean fracture

image-20250820201402076

2.在切割后的内表面 植入uv

在刀具上设置uv属性

image-20250820201522249

copy cutting surface attributes(uv)

image-20250820202733840

2.优化cutting

1.去除main cutter的多余部分,利用bounding volume分组

设置volumereshape,膨胀dilate SDF,保留体积内的点

image-20250820204144144

2.添加额外的刀具

设置少量的点 copy 网格,随机N作为方向

image-20250820210429029

3.驱动碎片移动

1.设置移动路径

1.提取pieces中心点,将其投影到地面,作为终点,连接起点终点为线

2.使用[ primuv() ] 沿曲线移动点。

image-20250820222010907

2.根据点y坐标相对的高度设置延迟delay,上面的碎片先到达位置

1.获取点P.y相对于boundbox的位置,有两种实现方法

方法一:使用attribute vop,通过[relbbox]节点,获取相对于边界框的位置

image-20250820231907928 image-20250820232030306

方法二:使用VEX函数, [ getbbox() ]获取输入几何体边界框的最值。按照最值将y坐标重映射

image-20250820232250537

2.设置延迟,越上面的值越小,越先移动

image-20250820232530708

3.将点沿中心向外移动

1.向四周扩散

image-20250820233704592

2.依据相对高度dist向四周扩散,使上面的点靠近内测,下面的点靠近外侧

以达到内测的点先向上移动到物体的上部分
image-20250820235309982 image-20250820235339639 image-20250820235315048 image-20250820235510933

3.扭曲曲线

斜坡重映射curveu,映射到角度,以此扭曲曲线

image-20250821002836672 image-20250821002912606

2.设置沿y轴移动位置,通过斜坡函数重映射curveu,调节曲线

image-20250821004716971 image-20250821005025070

4.选取几条曲线作为主要路径

1.使用foreach 循环选择

这里使用单个VEX难以随机选取 精确个数的曲线,由于VEX并行运行,且rand函数会重复选择

foreach 方法只适用于少量的精确选择,大量选取时运行速度慢

image-20250821163220365 image-20250821163232409

2.使用foreach pieces分开每一组曲线和主要路径

选择class作为pieces attribute 分组

image-20250821164656596

3.将原始曲线与主曲线混合

让原始曲线靠近主曲线
1.==需要设置曲线段数一致==
image-20250821185619475
2.在primitive 上运行,由于曲线段数一致,对于每个prims曲线,点数一致,即可==线性插值==([ lerp() ]函数),对应点的位置
image-20250821185346093 image-20250821185353442
3.其他方法(point wrangle):可以先为每个点设置ptnum / numpt属性作为位置标记,再在主曲线寻找同样属性值的点位置,插值当前点与目标点位置(但是需要foreach 为每个prims曲线设置属性)

5.沿梯度方向将起点推离地面

image-20250821201538277 image-20250821201556167

梯度gradient 演示

梯度值([ volumegradient() ]):由内指向SDF表面的==单位向量==

体素值([ volummesample() ]): 体素位置到表面的距离

image-20250821201629594 image-20250821201722216

6.为曲线设置noise

image-20250821211258685 image-20250821211307004

4.particles 粒子模拟

1.选取prims的最后一个点

1.使用[groupexpression()]节点 选取prims的起点(方法一)

将线性顶点编号转化为prims顶点编号,

image-20250821222204119 image-20250821222157003 image-20250821222209591

使用point wrangle 实现选取prims 的起点(方法二)

注意:[ vertexprimindex() ]函数 将==线性顶点编号== 转化为 prims顶点编号

@vtxnum属性: 表示的是顶点的线性编号(==这里的ptnum 与 vtxnum 一一应==)

@numvtx属性: 表示的是顶点的个数

image-20250821223842799

这里使用[ vertexprimindex() ]函数,获取顶点对应的prims顶点编号

image-20250821223902637

同样的表达式实现同样的效果,即选取prims的起点终点

image-20250821224953161 image-20250821224433350 image-20250821224835403

2.使用VEX实现noise控制

1.通过 ==缩放输入坐标== 实现 控制频率==frequency==

2.通过 ==缩放噪声输出值== 实现 控制振幅==amplitude==

3.通过 ==偏移输入坐标== 实现 控制偏移==offset==

image-20250822000651646

对选取的点生成噪波

image-20250822000923924 image-20250822000938095 image-20250822001038684

3.popnet

1.设置粒子朝向曲线旋转

为每个粒子寻找曲线上的最近点([ xyzdist() ]函数搜索到曲面的最近点[ primuv() ]函数通过prim,uv获取属性在最近点位置的插值),这里计算指向曲线的方向向量,和切线N叉乘,即可获得环绕的向量方向

image-20250822155112006 image-20250822155227853

2.设置噪波

直接使用vop添加噪波更方便

image-20250822155244025

3.设置时间不再生成粒子

image-20250822162933345 image-20250822162938659

4.设置到达曲线的端点处删除粒子

这里同样采样曲线上最近点的curveu属性

image-20250822162959481

这里将age重映射,fit函数具有钳制效果,当age超出范围内,始终采取最大值。即前两秒映射,使速度由慢到快,超出两秒则始终为1,即原速度.

在VEX中的映射,[ efit() ]函数则使用映射的线性关系来处理超出的部分
image-20250822163440560

5.缓存粒子,设置Alpha属性,设置随机pscale。

image-20250822163623154

5.smoke 烟雾模拟

1.设置source

1.使用pyrosource 生成粒子(方便使用particles separation来确定voxel size)

在动画点上设置density属性,再通过transformpieces拷贝到sources上

1.这里的endframe对应驱动点运动的代码,即每个点运动到最终位置的时间.

image-20250822202013880

2只在点到达最终位置是设置颜色.映射一个遍历的区域.

image-20250822203529278 image-20250822201901864

3.依据Cd动画 设置density

image-20250822203611980 image-20250822203624697

4.==volume rasterizeattribute== 将density 转换为volume

image-20250822203926827

2.solver

参数调整

1.source

image-20250822212055229

2.shape

image-20250822212203590

3.粒子设置

使用普通的scatter散布点,但要保留name属性

由于transformpieces是使用name属性为依据分开碎片

image-20250822212622956 image-20250822212615573

2.只选取到达终点的一层粒子

只选择到达终点这一帧的点

image-20250822213647272 image-20250822220640986

3.popnet

image-20250822223117174

advect by volume节点,通过smoke的速度场驱动粒子,加上wind noise

image-20250822223227962 image-20250822223400283

4.依据id设置随机颜色

image-20250822223420929

5.先随机pscale,再依据age属性映射pscale,逐渐变小

image-20250822223630586 image-20250822223535380

6.缓存

6.mountain 创建地形

制作背景山脉

使用heightfield,创建中心渐变的mask

1.NDC空间 Normalized Device Coorinates 标准化设备坐标

==这里是相机视角所对应的平面, 使用xy平面,坐标为 0-1范围内==

image-20250822234712430

1.相对于相机视锥,xy轴0-1,则是其裁切面范围,其-z方向则是视锥的深度

这里的box设置为在xy平面上向 -z延申

xy的大小始终为1,即点的xy坐标为(0-1)范围,对应于相机NDC空间的边界位置,将其转换为世界坐标,即为视锥形状的边界,-z方向对应相机NDC空间的裁切面深度,z坐标为0的点都在一个点(视锥近平面收束为一点),坐标向-z延申则为裁切远平面.

image-20250822235000056

2.使用VEX将box转换为视锥

image-20250822235854394 image-20250822235902608

注意box设置,放到xy的正半部分(NDC空间范围为0-1)z方向从0向远处延申,即为视锥深度

image-20250822235923322 image-20250823000109208 image-20250823000117788

2.使用heightfielld 创建地形

1.使用volume wrangle依据到中心点的距离创建mask

image-20250823003108252 image-20250823003114931

2.使用hf noise 生成地形

image-20250823003156619

增加一层noise创建细节

image-20250823003210871

3.使用hf erode 生成 侵蚀细节

repose angle休止角 的作用

image-20250823003530749 image-20250823003923078

一些侵蚀参数

image-20250823003644967 image-20250823003310329

4.清除mask

image-20250823003932813

5.使用hf resample重采样增加分辨率

image-20250823004025429 image-20250823004035032

6.使用 hf distort by noise增加细节

image-20250823004144782

7.hf convert 转换为polygon

image-20250823004744430

8.创建视锥范围(首尾帧并起来 union)

image-20250823005332945

保留视锥范围内地形

image-20250823005435553 image-20250823005605481

7.rock 散布岩石

1.使用rs渲染

通过rs texture 导入纹理(base color, bump, roughness, normal...)

image-20250823192908854

2.scatter 资产

1. 注意合并多个资产时,要设置name属性以便于散布时分辨单个资产

image-20250823211508709 image-20250823211610666

2.使用scatter时要删除原来点上的属性以免干扰,

image-20250823211628712

3.再为每个点设置随机的name属性以便分配不同的资产 选择name属性作为pieces 属性

image-20250823211722097 image-20250823211806176

3.选取视锥范围内的地形散布更多的石块

1.再通过计算与相机位置的距离作为mask

image-20250823220931269 image-20250823220944715 image-20250823220950155

2.注意打包相机为pack,以便保留单个位置的点

image-20250823221147186

3.scatter时以距离作为density,远处散布的更少

image-20250823221245810

8.fog

1.在视锥内生成volume 以便渲染为雾气

image-20250823230419404

2.依据到相机距离作为渐变设置density

image-20250823230501900 image-20250823230519713

3.使用[ vdbactivate() ]去掉为零的voxel

image-20250823230610652

4.再次ramp设置渐变,再设置可视化visualization

image-20250823230819476

9.material 材质

1.pieces

1.使用dome light时,若不想要hdri作为背景,则==调节contribution的camera==

image-20250823235411557

2.关于置换displacement

1.需要展开uv

image-20250824012008798

2.RS渲染需要设置 打开displacement

image-20250824014120642

3.设置fog为emission

4.设置灯光

1.设置light group AVO为¥OS,设置contribution 中的volume 为0(不对volume产生影响)

2.设置一个point light 打开RS ROP的 volume scattering (设置volume为1)

image-20250824132948618

3.设置侧向的distance light

image-20250824142118986

5.粒子渲染

1.设置RS渲染为粒子

image-20250824142244408

2.设置材质

导入color

6.设置AOV

image-20250824153421426

1.AOVS

image-20250824153616722

1.diffuse lighting 漫反射

2.specular lighting ==镜面高光==

3.reflections ==反射==

image-20250824154006318 image-20250824153827536

4.global illumination 全局光照

5.volume lighting 体积

6.volume fog emission 体积发射

7.bump normal 凹凸法线

8.world position 世界坐标

9.Z depth Z深度

world position 和 Z depth 设置min depth
image-20250824151408247

10.crypto Matte 加密遮罩

image-20250824151520711

11.自定义AO(ambient occlusion)

在shop中 创建一个环境光遮蔽着色器,添加到AOV
image-20250824152959685 image-20250824152839681

1.打开all light groups

image-20250824150948040

2.再shop中创建RS着色器,ambient occlusion

环境光遮蔽技术,提升真实感

image-20250824152744538

7.渲染 smoke和 smoke particles

1.关于forced phantom 和 forced matte

image-20250824160947854

2.设置一个null作为matte from,设置Alpha为0

image-20250824161618645 image-20250824161653549

8.为pieces设置光源

使用渐变时的颜色属性作为emission

将作为光源的几何稍微peak大于原几何体,以免光线被遮挡

使其本身不可见,只作为 光源

image-20250824165247436

2.渲染器设置

关闭默认的全局灯光,仅使用自身作为灯光

image-20250824165604575 image-20250824165431641

3.设置AOV,仅需reflection和 gi

image-20250824183654361 image-20250824165839918

4.着色器设置,将Cd属性重映射 作为emission color

image-20250824183445463

9.NUKE合成

1. 分离AOV,基础图层设置

1.使用shuffle节点(洗牌)分离AOV

输入[value in1]显示当前图层的名称

D禁用节点

S进入项目设置

image-20250825122524660

2.使用grade节点 控制亮度,颜色

multiply增加颜色

gain控制亮度

3.主要对diffuse,reflection设置

image-20250825124350751 image-20250825124437446

2.灯光设置

1. houdini中导出camera

export为 fbx,或者alembic

使用postagestamp(邮票)相当于object merge(复制图层序列)

2.使用relight创建灯光设置

image-20250825132549700

使用bump normal,和位置信息

image-20250825134321175

3.以crypto Matte加密遮罩信息,使用cryptomatte节点 选取灯光影响的物体

ctrl键选取物体,A(Alpha通道)

image-20250825134721958

image-20250825134831716

以此为物体单独添加边缘光

image-20250825135702303

4.使用depth作为mask,调节grade将近处变暗。

image-20250825141625767

grade注意调节alpha通道

image-20250825141633507

调节grade

image-20250825141825412

5.fog emission

1.fog emission

saturation调节饱和度

2.使用radial(径向,辐射状),加blur,创建黑边

使用radial时,注意nuke项目的分辨率(S设置),否则使用其作为mask时会改变项目分辨率

image-20250825145726288

image-20250825145804658

3.同样使用depth 将远处变暗

image-20250825154102549

4.利用depth,创建radial径向背后高光

image-20250825154645221

image-20250825160200240

6.volume keylight

使用volume keylight AOV,

image-20250825160025051

加一个shuffle,以blue作为Alpha

image-20250825160059029

image-20250825160141123

7.NUKE的粒子系统

8.GI

1.使用cryptomatte分离地面的reflection

使用erode(fast),膨胀Alpha的像素,去掉边缘高光

image-20250825161919695

使用crypto Matte选择不同的对象

9.smoke

1.同基础AOV设置

2.使用multiply fog层,gamma控制雾浓度

image-20250825173347470

3.emission层

使用 apglow设置辉光

10.调整

1.动态模糊

motionbulr

image-20250825174910022

2.为gi 设置glow

使用postagestamp 截取对应的节点

image-20250825174920418
文章作者:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 彬的特效学习指南
喜欢就支持一下吧