适用版本:Houdini 22 及以上(本文实测 22.0.368)。SHFS 是 Houdini 22 才引入的机制,更早的版本没有这个东西,也就不会遇到这个提示。实测环境:Windows 11 + Houdini 装在E:\3D\Houdini。
一、问题现象
把 Houdini 装到 C 盘以外的盘之后,每次启动都会看到这么一条提示:
SHFS not current installed: E:/3D/shfs
(注意原文就是这个语法,current installed不是currently——按这串原文搜就对了。)
点掉之后 Houdini 能正常启动、正常用,但会缺东西:自带的示例 / 测试内容全部不可用,比如 Test Geometry 节点里的 Otto、Capybara、Electra,以及配套的测试贴图和视频。
二、原因:Launcher 把 SHFS 下错地方了
从 Houdini 22 开始,官方把「示例 / 测试内容」从安装包里拆了出来,单独做成一个叫SHFS的共享包(多个 Houdini 版本共用同一份),共 145 个必需文件、约810 MB。
Houdini 找它的位置是写死的:
$HFS 的上一级目录 + \shfs
也就是说,Houdini 装在E:\3D\Houdini,它就会去E:\3D\shfs找。
而官方Houdini Launcher 有个坑:即使你把 Houdini 本体装到了别的盘,SHFS 依然会被下到 C 盘的默认位置——
C:\Program Files\Side Effects Software\shfs
两边对不上,于是每次启动都报。
三、先确认你自己的两个路径
1. 看 Houdini 期望 SHFS 在哪里
打开 cmd,把开头的路径换成你自己的 Houdini 安装目录:
"E:\3D\Houdini\bin\hython.exe" -c "import os; print('HFS =', os.environ['HFS']); print('SHFS =', os.environ['SHFS'])"
输出示例:
HFS = E:/3D/Houdini
SHFS = E:/3D/shfs
第二行的SHFS就是它期望 SHFS 所在的位置,报错信息里那个路径也是它。
2. 看 Launcher 实际把它下到哪里了
dir "C:\Program Files\Side Effects Software\shfs"
如果里面有houdini这个子文件夹、体积 800 MB 左右,说明文件早就下好了,只是放错了地方——那么照下面任选一种解法搬一下就行。
四、四种解法(选一个就行)
解法 1:把文件挪到正确位置(推荐,最稳)
把 Launcher 下好的那份整个复制到 Houdini 期望的位置。假设你的期望路径是E:\3D\shfs,在 cmd 里执行:
robocopy "C:\Program Files\Side Effects Software\shfs" "E:\3D\shfs" /E
- /E—— 连子目录一起复制(含空目录)
- /MOVE—— 复制完删掉源目录,省一份空间。想保留原件就别加
⚠️ 注意复制完的目录层级:应该是E:\3D\shfs\houdini\...,而不是E:\3D\shfs\shfs\houdini\...。
我自己的机器上就是这么解决的:把 Launcher 下好的那份复制到安装目录的上一级,145 个文件 / 810 MB,逐个校验通过,重启后提示消失。
复制到 Program Files 需要管理员权限,所以在「以管理员身份运行」的 cmd 里做。
解法 2:设环境变量指过去(不搬文件)
不想动文件,也可以直接告诉 Houdini「SHFS 在那边」。
系统属性 → 环境变量 → 新建(系统变量或用户变量都行):
SHFS = C:\Program Files\Side Effects Software\shfs
或者用另一个变量,查找效果一样(两个变量的区别见下面那条注意):
HOUDINI_SHFS_PATH = C:\Program Files\Side Effects Software\shfs
这两个变量的区别(官方文档原文):
- SHFS—— 共享文件的根目录本身
- HOUDINI_SHFS_PATH—— Houdini 去哪些路径找这个根目录,默认值就指向 $SHFS
⚠️ 实测一个很容易踩的点:HOUDINI_SHFS_PATH 是「替换」而不是「追加」。把它指到 B 目录之后,原来 A 目录里的文件就找不到了——我实测把查找路径指到新目录后,老目录里独有的文件查询结果直接变成 False。所以别想着两边都留着,二选一。
解法 3:建目录联接(不复制、不占第二份空间)
如果 C 盘和 Houdini 不在同一个盘,又不想多占 810 MB,可以建一个目录联接(Junction),让期望位置「指向」Launcher 那份。在 cmd 里执行:
mklink /J "E:\3D\shfs" "C:\Program Files\Side Effects Software\shfs"
mklink 是 cmd 的内置命令,必须在 cmd 里跑;PowerShell 里直接敲会提示找不到命令。对应的 PowerShell 写法是:
New-Item -ItemType Junction -Path "E:\3D\shfs" -Target "C:\Program Files\Side Effects Software\shfs"
⚠️ 建之前目标位置不能已经存在(目录已存在会直接报错),有就先把原来的改名或删掉。
目录联接对上层程序是完全透明的——Houdini 读到的就是里面的真实文件。
我实测过:通过联接,hou.shfs.isInstalled() 对三个文件的检查全部返回 True,和直接读真实目录没有任何区别。
删除联接用:
rmdir "E:\3D\shfs"
实测本机三种删法(cmd 的 rmdir、Git Bash 的 rm -rf、PowerShell 的 Remove-Item -Recurse)都只删掉链接本身、不会动目标目录里的内容;但稳妥起见,建议就用 rmdir。
解法 4:让 Houdini 自己重新下
Houdini 自带一个修复脚本 shfs_repair.py,在:
<Houdini 安装目录>\houdini\python3.13libs\shfs_repair.py
(python3.13libs这个目录名跟着 Houdini 内置的 Python 版本走,别的版本可能是python3.11libs之类,按实际情况找。)
它会照着 $HFS\shfs\file_list.json 里的清单,把缺的文件下到当前 SHFS 目录。执行:
cd /d E:\3D\Houdini\bin
hython.exe ..\houdini\python3.13libs\shfs_repair.py
想连可选文件一起下,加 --optional:
hython.exe ..\houdini\python3.13libs\shfs_repair.py --optional
实测三点注意事项:
- 下载默认往SHFS 那个目录写。这时候改HOUDINI_SHFS_PATH是没用的(它是查找路径,不管下载落盘),要改就改SHFS变量。
- 服务器偶尔会失败,实测遇到过 HTTP 500 和 SSL 连接错误,隔一会儿重跑一次通常就好了。
- 下到一半中断的话,目录里会留下.hdownload后缀的临时文件,重跑脚本即可。
五、怎么确认修好了
方法一:重启 Houdini,启动提示消失。
方法二:不用开界面,用 hython 直接问(更快):
"E:\3D\Houdini\bin\hython.exe" -c "import hou; print(hou.shfs.isInstalled('houdini/pic/testimage/stump.heic'))"
打印True就是通了;False说明还没找对地方。
方法三:在 Houdini 里建一个 Test Geometry: Otto 节点,能正常出模型就对了。
六、常见问题
Q:这 810 MB 不装行不行?
行。那条提示只是个提醒,Houdini 本身能正常启动和工作,缺的只是自带的示例 / 测试内容。但你迟早会用到 Test Geometry 节点,建议装上。
Q:必需文件和可选文件有什么区别?
必需 145 个约 809 MB,是示例几何体、测试贴图 / 视频这些;可选 23 个约 6.3 GB,全是 AI 节点的模型权重(Neural Terrain、SAM2 图像分割、MoGe2 深度估计等)。不用 AI 节点的话,可选部分完全不需要下。
Q:设置环境变量后要重启吗?
要。环境变量对已经打开的进程不生效,改完把 Houdini 完全关掉再重新启动。
Q:Houdini 升级后还要重来一遍吗?
不用。SHFS 本来就是给多个 Houdini 版本共用的一份,装一次所有版本共享。除非你换了 SHFS 的存放位置。
Q:能不能干脆把 SHFS 删掉让提示消失?
不能,删了还是「找不到」。要么让它找得到,要么按解法 2 把它指到一个空目录——但那和没装是一回事,不如直接装上。
Q:我按文章改完还是报同样的错?
按顺序检查三件事:① 复制完的目录层级对不对(别多套一层 shfs);② 环境变量是不是设了两处互相打架;③ 是不是在「查找路径」上指了 A、而文件在 B。用第五节的 hython 命令验证一下,输出 False 就是还没对。
七、命令速查
目的 | 命令 |
查 Houdini 期望的 SHFS 位置 | <安装目录>\bin\hython.exe -c "import os; print(os.environ['SHFS'])" |
查 Launcher 下到哪了 | dir "C:\Program Files\Side Effects Software\shfs" |
复制到正确位置 | robocopy "C:\Program Files\Side Effects Software\shfs" "E:\3D\shfs" /E |
建目录联接 | mklink /J "E:\3D\shfs" "C:\Program Files\Side Effects Software\shfs" |
删除目录联接 | rmdir "E:\3D\shfs" |
重新下载必需文件 | hython.exe ..\houdini\python3.13libs\shfs_repair.py |
重新下载含可选文件 | hython.exe ..\houdini\python3.13libs\shfs_repair.py --optional |
验证是否修好 | hython.exe -c "import hou; print(hou.shfs.isInstalled('houdini/pic/testimage/stump.heic'))" |
八、本文的验证记录
下面这些结论不是照文档抄的,是在本机上逐条跑出来的,列出来供参考:
结论 | 怎么验的 | 结果 |
Houdini 期望 SHFS 在 $HFS 的上一级 | hython 读 os.environ["SHFS"] | HFS=E:/3D/Houdini → SHFS=E:/3D/shfs |
Launcher 下到了 C 盘 | dir 该目录 | 确实在 C:\Program Files\Side Effects Software\shfs,145 个文件 / 810 MB |
那份文件是完整可用的 | 把它设成 SHFS 再查三个文件 | 全部 True |
HOUDINI_SHFS_PATH 是替换不是追加 | 指到新目录后再查老目录独有的文件 | 老目录文件变成 False(所以别两边都留) |
它只管查找、不管下载 | 设了它再调用下载 | 文件仍然下到 $SHFS,没进它指的目录 |
SHFS 变量既管查找也管下载 | 指到空目录后跑 shfs_repair.py | 25 秒下了 6 个文件 / 15 MB,落点正确 |
目录联接对 Houdini 透明 | 建联接后再查三个文件 | 全部 True,与真实目录无差别 |
删联接不会动目标内容 | 建联接后分别用 rmdir / rm -rf / Remove-Item -Recurse 删 | 三种都只删链接,目标文件完好 |
shfs_repair.py 可用 | 文件齐全时整跑一遍 | 退出码 0,约 2 秒完成(只校验不下载) |
九、小结
一句话:SHFS 必须待在「Houdini 安装目录的上一级 \shfs」,而 Launcher 默认把它下到了 C 盘。搬过去、或者用环境变量 / 目录联接指过去,都能解决。
搬文件最稳,目录联接最省空间,环境变量最省事——按自己的情况挑一个。