魔法石汇聚
1.原理demo
原理:使用*[ extractcenter ]节点提取pieces的中心点,使点沿曲线移动,再使用[ transformpieces ]*节点 沿点移动碎片
1.多个点沿曲线移动,(根据曲线上的uv位置移动点)
[ primuv() ] 函数, 使用的是内在的属性(intrinsic) prim uv,对指定属性(这里是"P"位置)在指定uv位置处插值.
1.使用[findattribval()] 函数,寻找prim中的name属性,以此将点与曲线一一对应.
2.为每个点设置uv值,依此在曲线上移动点
使用promote将name属性 从point推广到的prim
4.映射到时间轴,设置动画
3.这里不使用[uvsample()]函数,其使用的是uv属性中的指定位置,需要为曲线创建uv属性(uvtexture节点),并且无法指定prim,只能对单个prim作用
2.fracture 粉碎
1.转换为VDB,在转换或polygon,确保网格完整
1.使用Verona fracture结合Boolean fracture
1.在volume中scatter点,以此切割bound边框,保留内在部分作为切割刀具.
1.清理刀具网格clean,修复重叠
2.remesh网格, 加上噪波(多层)
注意mountain noise ==要取消noise alone vector,==否则会产生大量小碎片
==打开则会产生大量交错==
3.使用Boolean fracture
2.在切割后的内表面 植入uv
在刀具上设置uv属性
copy cutting surface attributes(uv)
2.优化cutting
1.去除main cutter的多余部分,利用bounding volume分组
设置volumereshape,膨胀dilate SDF,保留体积内的点
2.添加额外的刀具
设置少量的点 copy 网格,随机N作为方向
3.驱动碎片移动
1.设置移动路径
1.提取pieces中心点,将其投影到地面,作为终点,连接起点终点为线
2.使用[ primuv() ] 沿曲线移动点。
2.根据点y坐标相对的高度设置延迟delay,上面的碎片先到达位置
1.获取点P.y相对于boundbox的位置,有两种实现方法
方法一:使用attribute vop,通过[relbbox]节点,获取相对于边界框的位置
方法二:使用VEX函数, [ getbbox() ]获取输入几何体边界框的最值。按照最值将y坐标重映射
2.设置延迟,越上面的值越小,越先移动
3.将点沿中心向外移动
1.向四周扩散
2.依据相对高度dist向四周扩散,使上面的点靠近内测,下面的点靠近外侧
以达到内测的点先向上移动到物体的上部分
3.扭曲曲线
斜坡重映射curveu,映射到角度,以此扭曲曲线
2.设置沿y轴移动位置,通过斜坡函数重映射curveu,调节曲线
4.选取几条曲线作为主要路径
1.使用foreach 循环选择
这里使用单个VEX难以随机选取 精确个数的曲线,由于VEX并行运行,且rand函数会重复选择
foreach 方法只适用于少量的精确选择,大量选取时运行速度慢
2.使用foreach pieces分开每一组曲线和主要路径
选择class作为pieces attribute 分组
3.将原始曲线与主曲线混合
让原始曲线靠近主曲线
1.==需要设置曲线段数一致==
2.在primitive 上运行,由于曲线段数一致,对于每个prims曲线,点数一致,即可==线性插值==([ lerp() ]函数),对应点的位置
3.其他方法(point wrangle):可以先为每个点设置ptnum / numpt属性作为位置标记,再在主曲线寻找同样属性值的点位置,插值当前点与目标点位置(但是需要foreach 为每个prims曲线设置属性)
5.沿梯度方向将起点推离地面
梯度gradient 演示
梯度值([ volumegradient() ]):由内指向SDF表面的==单位向量==
体素值([ volummesample() ]): 体素位置到表面的距离
6.为曲线设置noise
4.particles 粒子模拟
1.选取prims的最后一个点
1.使用[groupexpression()]节点 选取prims的起点(方法一)
将线性顶点编号转化为prims顶点编号,
使用point wrangle 实现选取prims 的起点(方法二)
注意:[ vertexprimindex() ]函数 将==线性顶点编号== 转化为 prims顶点编号
@vtxnum属性: 表示的是顶点的线性编号(==这里的ptnum 与 vtxnum 一一应==)
@numvtx属性: 表示的是顶点的个数
这里使用[ vertexprimindex() ]函数,获取顶点对应的prims顶点编号
同样的表达式实现同样的效果,即选取prims的起点终点
2.使用VEX实现noise控制
1.通过 ==缩放输入坐标== 实现 控制频率==frequency==
2.通过 ==缩放噪声输出值== 实现 控制振幅==amplitude==
3.通过 ==偏移输入坐标== 实现 控制偏移==offset==
对选取的点生成噪波
3.popnet
1.设置粒子朝向曲线旋转
为每个粒子寻找曲线上的最近点([ xyzdist() ]函数搜索到曲面的最近点[ primuv() ]函数通过prim,uv获取属性在最近点位置的插值),这里计算指向曲线的方向向量,和切线N叉乘,即可获得环绕的向量方向
2.设置噪波
直接使用vop添加噪波更方便
3.设置时间不再生成粒子
4.设置到达曲线的端点处删除粒子
这里同样采样曲线上最近点的curveu属性
这里将age重映射,fit函数具有钳制效果,当age超出范围内,始终采取最大值。即前两秒映射,使速度由慢到快,超出两秒则始终为1,即原速度.
在VEX中的映射,[ efit() ]函数则使用映射的线性关系来处理超出的部分
5.缓存粒子,设置Alpha属性,设置随机pscale。
5.smoke 烟雾模拟
1.设置source
1.使用pyrosource 生成粒子(方便使用particles separation来确定voxel size)
在动画点上设置density属性,再通过transformpieces拷贝到sources上
1.这里的endframe对应驱动点运动的代码,即每个点运动到最终位置的时间.
2只在点到达最终位置是设置颜色.映射一个遍历的区域.
3.依据Cd动画 设置density
4.==volume rasterizeattribute== 将density 转换为volume
2.solver
参数调整
1.source
2.shape
3.粒子设置
使用普通的scatter散布点,但要保留name属性
由于transformpieces是使用name属性为依据分开碎片
2.只选取到达终点的一层粒子
只选择到达终点这一帧的点
3.popnet
advect by volume节点,通过smoke的速度场驱动粒子,加上wind noise
4.依据id设置随机颜色
5.先随机pscale,再依据age属性映射pscale,逐渐变小
6.缓存
6.mountain 创建地形
制作背景山脉
使用heightfield,创建中心渐变的mask
1.NDC空间 Normalized Device Coorinates 标准化设备坐标
==这里是相机视角所对应的平面, 使用xy平面,坐标为 0-1范围内==

1.相对于相机视锥,xy轴0-1,则是其裁切面范围,其-z方向则是视锥的深度
这里的box设置为在xy平面上向 -z延申
xy的大小始终为1,即点的xy坐标为(0-1)范围,对应于相机NDC空间的边界位置,将其转换为世界坐标,即为视锥形状的边界,-z方向对应相机NDC空间的裁切面深度,z坐标为0的点都在一个点(视锥近平面收束为一点),坐标向-z延申则为裁切远平面.
2.使用VEX将box转换为视锥
注意box设置,放到xy的正半部分(NDC空间范围为0-1)z方向从0向远处延申,即为视锥深度
2.使用heightfielld 创建地形
1.使用volume wrangle依据到中心点的距离创建mask
2.使用hf noise 生成地形
增加一层noise创建细节
3.使用hf erode 生成 侵蚀细节
repose angle休止角 的作用
一些侵蚀参数
4.清除mask
5.使用hf resample重采样增加分辨率
6.使用 hf distort by noise增加细节
7.hf convert 转换为polygon
8.创建视锥范围(首尾帧并起来 union)
保留视锥范围内地形
7.rock 散布岩石
1.使用rs渲染
通过rs texture 导入纹理(base color, bump, roughness, normal...)
2.scatter 资产
1. 注意合并多个资产时,要设置name属性以便于散布时分辨单个资产
2.使用scatter时要删除原来点上的属性以免干扰,
3.再为每个点设置随机的name属性以便分配不同的资产 选择name属性作为pieces 属性
3.选取视锥范围内的地形散布更多的石块
1.再通过计算与相机位置的距离作为mask
2.注意打包相机为pack,以便保留单个位置的点
3.scatter时以距离作为density,远处散布的更少

8.fog
1.在视锥内生成volume 以便渲染为雾气
2.依据到相机距离作为渐变设置density
3.使用[ vdbactivate() ]去掉为零的voxel
4.再次ramp设置渐变,再设置可视化visualization
9.material 材质
1.pieces
1.使用dome light时,若不想要hdri作为背景,则==调节contribution的camera==
2.关于置换displacement
1.需要展开uv
2.RS渲染需要设置 打开displacement
3.设置fog为emission
4.设置灯光
1.设置light group AVO为¥OS,设置contribution 中的volume 为0(不对volume产生影响)
2.设置一个point light 打开RS ROP的 volume scattering (设置volume为1)

3.设置侧向的distance light
5.粒子渲染
1.设置RS渲染为粒子
2.设置材质
导入color
6.设置AOV
1.AOVS
1.diffuse lighting 漫反射
2.specular lighting ==镜面高光==
3.reflections ==反射==
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
10.crypto Matte 加密遮罩
11.自定义AO(ambient occlusion)
在shop中 创建一个环境光遮蔽着色器,添加到AOV
1.打开all light groups
2.再shop中创建RS着色器,ambient occlusion
环境光遮蔽技术,提升真实感
7.渲染 smoke和 smoke particles
1.关于forced phantom 和 forced matte
2.设置一个null作为matte from,设置Alpha为0
8.为pieces设置光源
使用渐变时的颜色属性作为emission
将作为光源的几何稍微peak大于原几何体,以免光线被遮挡
使其本身不可见,只作为 光源
2.渲染器设置
关闭默认的全局灯光,仅使用自身作为灯光
3.设置AOV,仅需reflection和 gi
4.着色器设置,将Cd属性重映射 作为emission color
9.NUKE合成
1. 分离AOV,基础图层设置
1.使用shuffle节点(洗牌)分离AOV
输入[value in1]显示当前图层的名称
D禁用节点
S进入项目设置
2.使用grade节点 控制亮度,颜色
multiply增加颜色
gain控制亮度
3.主要对diffuse,reflection设置
2.灯光设置
1. houdini中导出camera
export为 fbx,或者alembic
使用postagestamp(邮票)相当于object merge(复制图层序列)
2.使用relight创建灯光设置
使用bump normal,和位置信息
3.以crypto Matte加密遮罩信息,使用cryptomatte节点 选取灯光影响的物体
ctrl键选取物体,A(Alpha通道)


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

4.使用depth作为mask,调节grade将近处变暗。
grade注意调节alpha通道
调节grade
5.fog emission
1.fog emission
saturation调节饱和度
2.使用radial(径向,辐射状),加blur,创建黑边
使用radial时,注意nuke项目的分辨率(S设置),否则使用其作为mask时会改变项目分辨率

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

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

6.volume keylight
使用volume keylight AOV,
加一个shuffle,以blue作为Alpha

7.NUKE的粒子系统
8.GI
1.使用cryptomatte分离地面的reflection
使用erode(fast),膨胀Alpha的像素,去掉边缘高光
使用crypto Matte选择不同的对象
9.smoke
1.同基础AOV设置
2.使用multiply fog层,gamma控制雾浓度
3.emission层
使用 apglow设置辉光
10.调整
1.动态模糊
motionbulr

2.为gi 设置glow
使用postagestamp 截取对应的节点

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