视频: https://www.bilibili.com/video/BV1nb2KY3EVZ/
为什么你的模型会被盗
VRChat 的模型资源和地图资源本质上是一个 Unity 的 AssetBundle 文件, 里面包含了所有的资源文件, 比如模型, 贴图, 着色器等.
AssetBundle 只是一种打包格式, 这种格式仅有简单的压缩功能, 可以通过简单的开源工具进行解包.
在 VRChat 中模型和地图资源的加载都会将资源下载到本地, 再解包资源并加载到内存中. 你可以很简单地找到这些资源文件, 并使用开源地工具解包. 在技术上 AssetBundle 的安全性是不存在的.
可能有人会问为何 VRChat 不对上传后的资源进行加密? 但了解过逆向工程的人都知道, 你的资源最终还是会解密并加载到内存中, 只需要简单读取内存就可以获取到解密后的资源. 并且解密会占用很多 CPU 资源, 这只会让性能本就糟糕的 VRChat 更加糟糕.
我会如何防止我的模型被盗
在软件开发领域, 我们从不指望能通过技术手段防止被破解. 只要代码最终是在客户端执行的, 不被破解是不可能的.
要完全避免模型被盗, 唯一的可能性是将渲染流程全部放到 VRChat 的服务器中. 但考虑到成本问题, 这也是不可能的.
但大家要有一个概念, 时间是需要成本的.
我们只需要做到让盗模者付出大于自己改一个模型的成本, 他们的盗模行为就变得毫无意义.
Shader (着色器)
Shader 在打包时会被编译, 哪怕是解包后也很难还原原始的 Shader 代码. 但现在热门的 Shader 也就 lilToon 和 Poiyomi, 简单尝试后其实就能还原材质.
也有人利用了这个特性, 对 Shader 打补丁, 只有特定的 Shader 才能将模型正常渲染出来. 比如 AntiRip 项目.
但 VRChat 因为其糟糕的优化, 不少人都会关闭低信用等级的玩家的 Shader, 正常情况下 VRChat 会使用内置的 Fallback shader 渲染. 但如果你的模型是需要特定 Shader 才能正常渲染, 那你的模型在别人的视角里就是一个类似于刺猬的东西.
这其实是最好的做法, 缺点过于明显, 我认为得不偿失.
Mesh (网格) 与 Texture (贴图)
你需要接受一个前提, 会盗模的人都是蠢蛋. 一个会自己改模的人不会通过盗模的方式获取模型.
只需要简单将 Mesh 合并, 并将 UV 重新映射, 再将 Texture 进行合并, 盗模者二次编辑你的模型的成本就会大大增加.
简单的做法就是在你的模型上放一些表明这个模型是你的标识, 进行我上面说的处理. 盗模者将模型直接二次上传就会保留这些标识, 而他将这些标识去除成本又很大.
这是! 精神攻击!!!
Animation Controller (动画控制器)
有不少人会给模型添加"密码锁"这个功能, 进阶一些的会结合 VRChat 提供的 OSC 特性来解锁模型.
但我并不看好这种做法, 这只能避免盗模者将模型直接二次上传, 但无法阻止他们将模型资源提取出来直接获取到密码.
在早期盗模的工具不成熟, 不能很好地解析动画控制器, 但现在的工具已经可以很好地解析动画控制器, 所以这样做意义不大.
但使用工具生成的动画控制器一般都比较复杂, 也是能增加盗模者修改模型的成本.
相关资源
- 下载自制铭牌 sha256:
3118a076be2abd973287d0d37fa026eda5e344aee7867602ce8fdc23e541b976
夏堇_Natsu
制作的 lilycalInventory 的视频教程
如果你遇到了问题
你可以在上面的视频底下留言, 或加入我的 QQ 群 324617456 交流.
金主爸爸们
Author: Gizmo
Link: https://share.lumina.moe/posts/vrchat-anti-ripper/
License: CC BY-NC-SA 4.0