diff --git a/README.md b/README.md index 228feba1..1dd77b63 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,179 @@ -# iFactory.Cutting.Unity +# iFactory 切削应用仿真 -iFactory生态的切削仿真应用 \ No newline at end of file +![](https://img.shields.io/badge/Unity-2022.3.14f1-green) + +![](https://img.shields.io/badge/Build-0.03-blue) + +![](https://img.shields.io/badge/Code-Eclair-yellow) + +![Clip_20240123_030034.png](ReadMe%2FClip_20240123_030034.png) + +通过直接在模型上绘制,对平面甚至任意表面进行切削仿真 + +支持多种笔刷,可通过Mod自定义笔刷 +支持多少模型,可通过Mod自定义模型 +**原生支持Mod**,可以实现任何功能,例如: +* 接入真实切削机 +* 模拟切削过程 +* 导出切削命令数据 + +## 操作方式 +* 按住`鼠标中键`进行视角旋转 +* 按住`鼠标中键`和`Shift`进行视角移动 +* 滑动`鼠标滚轮`进行视角缩放 +* 选择笔刷后按住`鼠标左键`进行绘制,不按下则为预览 +几乎所有操作都为命令,可在用户界面右侧撤销和重做命令 + + +支持线上创意工坊,用于可通过Web浏览Mod并订阅,该应用会自动下载并安装Mod + +## 类库:[iFactory-Cutting](http://server.bitfall.icu:3000/root/iFactory.Cutting.git) + +全平台应用支持 + +可能仅支持Window +- [X] Windows +- [ ] Android +- [ ] IOS (花钱买IOS开发者才行) +- [ ] Linux(我想没有支持的需要) + +## 当前需求 +上面提出了一个需求:**我们需要一个仿真切削应用,用于快速模拟并展示切削结果和过程** + +不仅需要切削,还需要对成品材料进行反推,即**通过切削结果反推切削过程** + +很明显,这个问题一开始涉及到了各种几何和计算机图形的问题,再经过各种尝试后,我们得到了相对最佳的解决方案: + +基于自定义着色器`Alpha Clip`对绘制部分进行裁剪(指创建遮罩)实现模拟切削的效果 +通过对模型直接绘制,计算出绘制的点,并通过`Alpha Clip`着色器对模型进行裁剪,实现切削效果 + +不仅仅需要出厂自带的模型和笔刷,我们还需要支持自定义笔刷和自定义模型,这就是`Mod支持` + +我们的客户可能会有各种各样的需求 +* 当客户无法自行实现时 +* 或我们有新想法时 +* 或有用户想分享创意时 + +客户就需要创建工单,我们对工单进行处理,并发布到线上,这就是`创意工坊` + +为什么需要`Mod`和`创意工坊`? + +你也不想每次有更新都要重新下载安装吧,而且我们也不想每次都要重新发布吧 + +你也不想每次都下几个G的资源吧,而且我们也不想每个小更改都需要打包吧 + +## 当前问题 + +### 在平面上绘制的一个圆,中间的部分不会被裁剪 +这不会涉及到物理,确实会出现一些与物理不符的情况,但是这是一个切削仿真,而不是物理仿真 + +试试洪水填充和扫描线填充相对于至少`1024 x 1024`px的图像来说性能消耗巨高 +#### 为什么? +因为本质上就是画了一个圆环而不是圆圈,要圆圈得用`点笔刷`绘制一个半径足够的圆 + + +#### 如何解决? +使用`Void笔刷`绘制圆,将应该裁剪的部分手动填充,`Void笔刷`不会被记录到导出的切削数据中 + +### 为什么还没实现反推? +这个需要`AI`,需要`GPT`,需要`GPT4`,需要`DALL·E` + +这个要💰,很多的💰,一个月25$的哪种 + +![Clip_20240123_031845.png](ReadMe%2FClip_20240123_031845.png) + + +## 运行配置 +**CPU:** `Intelli 10400F`及以上 + +**GPU:** `GTX1050`及以上 + +**RAM:** `16G DDR4`及以上 + +**剩余储存空间:** `2GB`或以上 + +**操作系统:** 仅限于64位`Windows 10`,`Windows 11`或以上 +## 更新日志 +### 2024年1月23日 提交0.0.3版本至`Gitea`,并更新版本号为`Eclair` +- 添加了`3`款内置笔刷 +- 添加了`2`款内置模型 +- 添加了`运行时检查器`,可以查看和编辑笔刷或其他数据的值 +- 添加了文件系统,可以`保存`,`加载`和`另存为` +- 添加了相片模式,可以`隐藏UI`,渲染功能正在进行中 +- 添加了命令模式,支持`撤销`和`重做`到指定步骤 +- 添加了导出数据,直接`复制到剪贴板`,对于太长的数据不会显示在用户界面上 +- 添加了Mod管理,可以`动态编译脚本`和`加载笔刷`或模型等资产 +- 增强了Mod管理,可以`动态安装`,`启用`与`禁用`Mod,支持卸载资源,但卸载`插件类Mod`出于于C#本身的`AppDomain`限制,暂时无法实现 +### 2023年12月3日及以前 +尝试基于`Godot`创建基于`CSG`的切削应用,但是 +- 性能非常拉,10G笔刷就能卡爆,移动端直接一个步骤卡死 +- 不支持热更新和资源管理,一个发布就是几个G,一个小补丁都需要重新下载 +- 非常复杂的图形API,需要自己实现各种各样的图形API +- 非常模糊的文档,例如对模型表面进行绘制需要自己实现太多的底层 +- 甚至连基本的`UI动态缩放`都没有,适配1080P就是1080P,适配2160P就是2160P,模糊得很 +- 没有`UI Toolkit`这种现成的UI库,自带的UI库是上个世纪的产物 +- 一个小改动都需要重新绑定,几乎等于重新配置`Rig` +- too more `issue` and `bug` +## 下载地址 +### Unity版 [下载](http://server.bitfall.icu:3000/root/iFactory.Cutting.Unity/releases) +## 功能清单 +- [x] 命令模式 + - [x] 显示步骤 + - [x] 撤销 + - [x] 重做 +- [x] 多笔刷 + - [x] 空笔刷,用于查看模型 + - [x] 点笔刷(圆),用于绘制点或自由绘制 + - [x] 线笔刷,用于绘制线段,支持snap点以实现grid + - [ ] 文字笔刷,用于绘制文字 + - [x] 程序点笔刷,可进行采样和手动输入点的坐标和半径 + - [ ] 程序线笔刷,手动属于半径,线段组进行绘制 +- [x] 所有笔刷可预览 +- [x] 运行时检查器 + - [x] 查看数据 + - [x] 编辑数据 + - [x] 支持多种数据类型 + - [x] int + - [x] float + - [x] float3 + - [x] 支持动态调用`MethodInfo` +- [x] Mod支持 + - [x] 启动时从`Mods`文件夹加载 + - [x] 外部加载 + - [x] 启用与禁用 + - [ ] 依赖管理 +- [ ] 创意工坊 + - [ ] 上传Mod + - [ ] 下载Mod + - [ ] 订阅Mod + - [ ] 自动更新 +## Bug清单 +- [ ] 绘制圆环后,中间的部分不会被裁剪 +- [ ] 通过各种方式更改Mod后可能会阻塞Mod线程 +## 安装方式与相关依赖 +直接解压下载好的`zip`并运行`iFactory-Cutting.exe`即可 +## 如何自行编译 +外部依赖库挺多的,功能可以用Mod添加,不建议直接更改并编译源码 +![Clip_20240123_034839.png](ReadMe%2FClip_20240123_034839.png) + +## 如何创建Mod +参考类库:[iFactory-Cutting.Mod.Examples](http://server.bitfall.icu:3000/root/iFactory.Cutting.Mod.Examples.git) + +Api文档:等待创建gitbook +### 脚本类Mod +1. 创建一个`C#`类库项目 +2. 引用[BITKit](http://server.bitfall.icu:3000/root/BITKit.git) +3. 引用[iFactory-Cutting](http://server.bitfall.icu:3000/root/iFactory.Cutting.git) +4. 创建一个类并继承`MyMod` +5. 根据基类的注释,重写对应的方法 +6. 在软件中点击屏幕左上角的`Mod`按钮,选择`加载`,选择`.cs`文件并加载 +### 资源类Mod +这个需要用到编辑器,需要了解`YooAsset`的原理 +1. 点击最上面工具栏菜单的`YooAsset/AssetBundle Collector` +2. 在左侧创建新的`Package`,然后收集需要的资源 +3. 这里面的步骤需要自行了解`YooAsset`的收集与打包 +4. 在打包完成后,同样的,创建一个`脚本类Mod` +5. 重写`PackageName`方法,值为`Package`的名字 +6. 在软件中点击屏幕左上角的`Mod`按钮,选择`加载`,选择`.cs`文件并加载 +### 解决Mod依赖 +等待更新中... diff --git a/ReadMe/Clip_20240123_030034.png b/ReadMe/Clip_20240123_030034.png new file mode 100644 index 00000000..c799df2b Binary files /dev/null and b/ReadMe/Clip_20240123_030034.png differ diff --git a/ReadMe/Clip_20240123_031845.png b/ReadMe/Clip_20240123_031845.png new file mode 100644 index 00000000..fbce34b3 Binary files /dev/null and b/ReadMe/Clip_20240123_031845.png differ diff --git a/ReadMe/Clip_20240123_034839.png b/ReadMe/Clip_20240123_034839.png new file mode 100644 index 00000000..4581b8d2 Binary files /dev/null and b/ReadMe/Clip_20240123_034839.png differ