
一句话:选中物体、点两下,它就跟着波浪一起起伏。Floatify 干的事非常窄——把「用 Ocean 修改器造海面 + 建一张隐形的 Shrinkwrap 控制网格贴住波面 + 给物体加 Copy Location / Copy Rotation 绑到那张网格的一个顶点组上」这套原本要手动搭十几步的流程,压成了两个按钮。作者自己在官方页上的描述也克制到极点:「一个简单任务用的快速直白插件。选中物体、点一下 realise,就这样。」
它只有 $3,销量 70+,整个插件就是一个 6,847 字节的 Python 文件。我在下面把源码逐行讲清楚了——不是凑篇幅,而是因为这么小的工具,你能完全读懂它,就能放心改它:想换绑定点、想加多层波浪、想改成跟着水面漂的碎片群,改几行就行。这类小工具的价值不在功能多,在于它是透明的。
⚠ 先把它的边界说清楚,免得你按海洋解算的期待去装它:它没有浮力物理。它不算物体形状、体积、密度,也不算吃水深度和自身摇摆惯性——它做的是把一个控制点的高度和朝向复制给物体。所以木桶、浮标、小船、漂浮残骸、垃圾这类氛围镜头用它很快很够;但大船破浪、尾迹、浪花、排水这些,得上专门的海洋/流体方案。这条我写在下面「已知限制」里了,不是替作者圆场。
适合谁:① 需要几个漂浮物点缀镜头的场景/概念设计;② 想学「约束绑定 + Shrinkwrap 跟随表面」这套做法的 Blender 用户——这 6.8 KB 是个很干净的范例;③ 想拿它当模板自己写小工具的。作者 chery(Manu Chery),官方分类挂在 Materials and Shading 下。
一、用法就三步(官方三步,一字不差)
第 1 步:点「Create Ocean」。场景里会生成两样东西:一个名为 Ocean 的立方体,带 Ocean 修改器(这就是海面);一个名为 FloatControl(hide me) 的线框平面——这是隐形控制网格,名字里的 hide me 就是提醒你可以把它藏起来。
第 2 步:选中你要浮起来的物体,点「Realise Object」。物体会自动加上 Copy Location 和 Copy Rotation 两个约束,目标都指向那个隐形控制网格,并绑定到它上面的顶点组 FloatVerts。从此物体的位置和旋转就跟着波面走。
第 3 步:给 Ocean 打关键帧。官方原话特别强调过这一句:「And keyframe the ocean. Thats it you have a floating object.」——海面本身不会自己动,你要么给 Ocean 修改器的 Time 打关键帧让它随时间推移,要么在时间线上 K 帧。这一步漏了,画面就是静止的。
安装:Blender → 编辑 → 偏好设置 → 插件 → 安装,选 Floatify.py 勾选启用;然后在 3D 视图按 N,侧栏里会出现一个新的「Floatify」标签页(bl_category = 'Floatify')。
二、做完之后还有旋钮:位置和旋转可以分开调
绑定完成后,侧栏里会多出两个面板,只在选中网格物体时才显示(poll 里判断 obj.type == 'MESH'):
Location 面板:Location Influence(位置跟随强度,0 完全不跟随、1 完全跟随)、X / Y / Z 逐轴开关(哪个轴跟随)、Offset(相对偏移)、Invert X / Y / Z 逐轴反相。
Rotation 面板:Rotation Influence、逐轴开关、Offset、逐轴反相,结构完全对称。
这两组面板只是在操作物体上那两个约束的属性,所以你也可以直接在「物体属性 → 约束」里调,改的是同一份数据。实用技巧:把 Rotation 的 Influence 调低到 0.15–0.3,位置跟随保持 1,能做出「随浪起伏但不会跟着水面死板倾斜」的效果——真实漂浮物的倾斜远小于波面斜率。
三、源码怎么实现的(6,847 字节,我逐行读了)
这段是给想改它的人看的。整个插件一个文件、五个类(Ocean / Realise_Object 两个算子 + MainPanel / locpanel / rotpanel 三个面板),没有任何外部依赖。
「Create Ocean」按钮(button_01)逐步做的事:
1. 建一个边长 2 的立方体,加 Ocean 修改器,命名为 Ocean;修改器的 viewport_resolution 与 resolution 都被设成 10(偏低的精度,为视口流畅;要更细的波浪自己调高);
2. 建一个平面,显示方式设为线框 Wire、关闭阴影投射,命名为 FloatControl(hide me);
3. 对这个平面做一次 11 刀 Subdivide;
4. 给它加 Shrinkwrap(缩裹)修改器,目标指向 Ocean 立方体,方式 PROJECT、方向 ABOVE_SURFACE、并勾选反向投影(use_negative_direction = True)——效果就是这张网格贴着波浪表面走;
5. 新建名为 FloatVerts 的顶点组,把几个硬编码的顶点索引(源码里写死的是 0, 1, 0, 42,其中 0 出现两次)以权重 1.0 加进去。
「Realise Object」按钮(button_02)做的事:给当前选中物体加 Copy Location 约束,目标 = 隐形控制网格,subtarget = FloatVerts 顶点组;再加一个 Copy Rotation,同样指向那个顶点组。
所以它真正绑定的不是「海面」,而是「顶点组 FloatVerts 所在的那个点」。这就是它为什么这么轻——没有解算、没有浮力、没有惯性,纯粹一次高度与朝向的复制。也顺带解释了它所有的坑(见下节)。
四、已知限制与坑(如实写,不替作者圆场)
1) 没有浮力物理。不按物体形状/体积/密度算吃水深度和倾斜,只是把一个控制点的高度与朝向复制过去。想让大船和小球表现不同,只能自己调 Influence、Offset、Invert。
2) 控制网格的名字是硬编码的。源码按字符串 "FloatControl(hide me)" 查找目标物体。你要是改了那个平面的名字,约束就失效了。同样——如果你点了两次「Create Ocean」,Blender 会把第二个平面自动改名成 FloatControl(hide me).001,而「Realise Object」仍然只认第一个,于是你会莫名其妙绑错。要重来请先把旧的 Ocean 和 FloatControl 删掉再点。
3) 顶点组是硬编码的顶点索引。写死 0, 1, 0, 42,它依赖「细分 11 刀」这个固定操作产生的拓扑。所以不要手动改那个平面的细分次数,否则绑定点就不在你以为的那个角上了。
4) 官方只声明支持到 Blender 3.5。包内 bl_info 写的是 blender: (3, 4, 1)。代码里没有调用被 Blender 4.x 移除的 API(用的都是 bpy.ops.mesh.primitive_* / modifier_add / constraint_add / vertex_groups.new 这些稳定接口),理论上 4.x 能跑,但官方页面没有声明,我也没有在你的环境里实测——这一点如实说明,不打包票。
5) 海面默认只有 10 级精度,近景会看到明显棱。需要的话把 Ocean 修改器的 Viewport / Render 精度调高,代价是变慢。
6) 它是「做氛围」的,不是海洋解算。真要船体起伏 + 尾迹 + 浪花 + 排水,得上专门方案。
五、包内文件(逐字节实测)
Floatify_1.0.rar 1,688 B(psdly 原样发布的原始压缩包)、Floatify/Floatify.py 6,847 B(解包后的插件本体,就这一个文件)、README-中文.txt 6,993 B(本说明)、cover.jpg 39,934 B(官方产品图,940×530)。合计 4 个文件 / 55,462 B。未改动原始包内任何文件——包里本来就只有那一个 .py,没有附加素材、预设、文档或教程视频,这也是它只要 $3 的原因。
安装时直接选 Floatify.py 这个文件,不要选文件夹。
六、官方页信息
作者:chery(Manu Chery);价格:$3.00 一次性买断;销量:70+;发布:三年多前;授权:GPL;官方标注 Blender 版本:3.0 / 3.1 / 3.2 / 3.3 / 3.4 / 3.5;官方分类:Materials and Shading;标签:Float、floater、floatify、spring24、floating。
官方的「How To Set Up」原文(三段,很短):「装好插件(edit → preferences → install),然后在 N 面板里找到它。选中你要的物体点 realise object。然后给 ocean 打关键帧,就这样,你有一个浮着的物体了。」
⚠ 版本说明:psdly 条目与包内 bl_info 的版本号一致,都是 1.0("version": (1, 0))。官方页面上没有单独的版本历史区块可核对,所以本文只报包内实测值 1.0,不替官方宣称「这是最新版」。
原产品页:https://superhivemarket.com/products/floatify
封面图片来自作者官方产品页。本文为中文整理,功能与兼容性信息以作者官方页面与包内说明为准。资源仅供学习交流,商业使用请购买正版授权。













暂无评论内容