Unity插件Paint in 3d pro是如何实现Runtime Undo和Redo的

目录

神作,不用多解释

P3dStateManager,和

P3dPaintableTexture

开源或者被开源的世界

HitScene.cs

InputManager.cs

看看文档

看看例子

看看代码实现


神作,不用多解释

学习这个项目,不但能让你掌握基础的3d实战知识,还能了解框架,了解Editor扩展开发,了解C#语法

“当然,好处多多,难道一个坏处都没有,应该就是上手门槛挺高吧”

国内这种资源也很容易获得

要做一个画画工具,或者APP

Undo是最基本

这里稍微分析一下如何实现:(然而并没有分析)

这是Pro版本,和几年前普通的Paint in 3d也完全不可比

几年前还只能Editor Undo,不能runtime回退

不过当年的Hist—manager还是做得挺巧妙,今天我们一起来看下Pro版本的History如何做的呢》》???

现在的Paint in 3d pro版本除了内核换成gpu绘制,架构大改之外,还加了很多功能和很多例子:

其中一个例子就是In Game的Undo和Redo

看了一下,调用方法很简单

P3dStateManager.UndoAll();

主要依赖

P3dStateManager,和

P3dPaintableTexture

P3dStateManager 本身并没有多少代码,也不是核心。。。。。。

至于,具体回退+Redo的分析和实现,之后想起再说吧,谢谢阅读

开源或者被开源的世界

回滚和历史草的关键还是一开始那个图

主要的绘制实现,以及回滚绘制的实现,还是通过上面P3dPaintable Texture这个类(组件)

其中Undo有3个选项

1 是 None, 这有点废话;

2 是Texture,反正选了没有用,应该是要特别指定;

3 是记录本地操作命令(有点像帧同步),

“”极像或者100%相同都是严重问题,回滚按2下,能回退一次,也只能回退一次,之后回滚按多少下也没作用,只有第一次有效(嗨,你个帧同步)“”

总之就是有各种bug(嗨,你个软件开发),不过还好有源码

后来发现,还是自己造成的bug

用了imgui和paint3d冲突,其实ugui也冲突,只是人家的框架有封装

HitScene.cs

InputManager.cs

至于怎么判断是否点击在ui上,避免2d和3d的冲突,可参考:

https://blog.csdn.net/avi9111/article/details/116568250?spm=1001.2014.3001.5502

开源最大的作用不是分享,不是共享,不是灵活,不是集思广益,真正的开源的作用是修bug

一个人修,或一个团队修还真修不好;

还真的需要一个天才做架构,然后一堆搬砖基于开源修bug,和改善流程,虽然我不想承认自己是搬砖的

也唯有这样才能把一个产品做好

而扑街的产品遍地都是,高达99%都是平庸的产品

但又因为开源,使得整个软件“世界”都是平的,总有上千上万个产品

所以能形成一个好的开源生态,至少能出现上千个好产品

这就是开源神作的本质

看看文档

看看例子

注意的就是默认绘制颜色是白色,shader texture默认白色,会感觉没效果,改下颜色就好了,也不需要怎么配置,就能做出3d绘制的效果,基于Paint IN 3d pro这个插件

 

看看代码实现

很多,罄竹难书,自己看源码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
3D绘制允许你在游戏和编辑器中绘制场景中的所有对象。 记住这不是一个贴花系统,所以你的游戏不会因为你画了多少而延迟。相反,您的FPS将保持不变,即使您将对象绘制一百万次! 看看:WebGL演示|论坛线程 ▶一致的性能 即使你画了很多,在3D中画的速度还是很快的原因是因为颜料被烘焙成物体的纹理。你的对象已经有纹理了,为什么不使用它们呢?代码也不会产生垃圾(0 gc alloc),所以您不必担心随机延迟峰值。 ▶闪电快速绘画 烤漆成纹理听起来很慢,但是画图代码是在GPU上100%完成的,这使得它的速度非常快。绘制代码也经过了大量优化,以通过将绘制操作组合在一起来最小化状态更改。 ▶完整的c#源代码 就像我的所有资产一样,我提供了完整的c#源代码——没有什么隐藏在.dll中。代码的组织和注释也很好,所以如果需要,可以很容易地进行更改。 ▶长期支持 就像我所有的资产,我提供长期的支持,不会在你购买后就消失。我也提供定期的免费更新基于伟大的功能从客户的要求。 ▶蒙皮绘画 在3D绘制允许您绘制动画对象与伟大的性能。看看WebGL的演示,看看僵尸油漆看起来有多棒。 ▶无缝紫外线绘画 如果你有一个复杂的网格,它是常见的接缝时绘画,甚至当使用专业的绘画软件。3D绘画解决 了这个问题,包括“缝线固定”工具。3D绘画也使多个对象之间的绘画无缝连接,即使它们有不同的比例。 ▶易于使用 就像我的所有资产一样,我尽量保持界面简单。在几分钟之内,你就可以在游戏中添加绘画功能,并根据你的需要调整简单而强大的设置。 ▶团队基础绘画 3D绘画具有易于使用的基于团队的绘画功能。你可以指定一个特定的颜色给一个特定的团队,并计算每个团队在你的场景中画了多少像素! ▶Multi-Texture绘画 如果你有一个复杂的材质和着色器,有多个纹理一起工作,那么没问题。3D绘画允许你创建画笔,在同一时间绘制多个纹理,并给予每个画笔独特的设置。 ▶完整的物质支持 3D绘制不仅支持绘制所有的材质和着色器与统一,但所有你的定制的!使用直观的检查器,您可以轻松地选择您想要绘制的材质和纹理。 ▶在游戏&编辑器 3D绘画从一开始就被设计来支持游戏和编辑器中的绘画。这允许您在编辑器中快速调整纹理,然后在游戏中使用完全相同的特性绘制它们。 ▶混合模式 你不局限于画普通的反照率纹理。3D绘画有一系列的混合模式和设置,允许你画任何类型的纹理你喜欢。例如,添加混合照明纹理,RGB隔离阿尔法混合切割纹理,和更多。
Paint in 3D 绘制所有物体 - 在游戏内和编辑器里。所有功能已经过深度优化,在WebGL、移动端、VR 以及更多平台用起来都非常好用! ? 容易使用 - 学习如何使用 Paint in 3D,让众多教程场景来手把手帮你过一遍每个功能。然后你还可以看看如何将多个功能结合在一起的演示场景,创建一些更有趣的东西。 ? 长期支持 - Paint in 3D 经过超过 5 年的定期更新,现在已经具有大量功能。感谢迄今为止一直支持其开发的每一个人! ? 所有渲染管线 - 此资源支持标准管线,以及 LWRP、HDRP 和 URP。请参阅文档了解如何在它们之间切换。 ? 随地可用 - Painy in 3D 一开始就被设计来用于尽多的设备和平台。它在台式、移动端、VR 上等更多都运行得很好!假如遇上任何性能问题,你可以调整许多设置来提升性能,而且其视觉效果影响极小。 ? 包含了完整源代码 - 如果你是程序员,随时可以根据爱好代码进行调整,它可轻松地被修改。 ? 光速绘制 - 通过使用GPU 加速,你的物体将以难以置信的速度被绘制。代码还经过深度优化来防止 GC 分配,和将所有绘制操作一起批次完成。 ? 在游戏内和编辑器中绘制 - Paint in 3D 是被设计来既可以用于游戏内,也可用于编辑器中,以便你想创建自己的纹理。如果你是程序员的话,你还可以直接从 C# 中使用它。 ? 稳定的性能 - 跟贴图系统不同,Paint in 3D 是一个纹理绘制解决方案。这意味着你可以绘制你的物体上百万次,还是无帧率丢失,让你创作难以想象的游戏。 ?自动保存和加载 - Paint in 3D 带有一个简易使用的系统,可自动恢复你的绘制进度。如果你需要更高级的控制的话,你可以使用简单的 C# API 来手动控制。 ?蒙皮网格绘制 – Paint in 3D 让你能够以高性能绘制动态物体。查看 WebGL 演示,了解到僵尸绘制是多好看和绘制是如何一瞬间完成。 ?画笔修改器 - 为你的画笔添加修改器,让它们变得活跃起来。它们可随机改变位置、旋转、不透明度、纹理,以及更多! ? 无缝UV 绘制 - 正在用复杂的 UV 来绘制复杂的网格?没问题,Paint in 3D 能流畅无缝地在 UV 缝合上进行绘制,即使它们在不同的物体上,或甚至它们的缩放度不同! ? 撤消和重做系统 - Paint in 3D 中包括了完整的撤销 + 重做支持来为游戏内和编辑器内的绘制。在游戏内,绘制可以设置为使用全纹理快照来达到快速切换,也可以绘制动作重放来降低内存使用。撤消和重做能分别在全局、或在个别物体上进行,还可以用 UI 按钮或 C# AAPI 触发。 ? 绘制遮罩 - 使用任何自定义纹理形状来轻松地将 3D 绘制遮罩添加到场景中。这将会自动防止所有新增的绘制在指定区域中出现,为你带来了油印效果。 ? 智能镜像系统 - Paint in 3D 自带强大的镜像功能,让你同时绘制物体的两面。如果你用文字来绘制贴图的话 ,它们通常会倒后出现,Paint in 3D 能更正它! ? 绘制任何着色器 - Paint in 3D 让你绘制各种着色器和材质,包括你的自定义。只需直接选择你想绘制的纹理和你想使用的混合模式,然后你就能开始了! ? 多纹理绘制 - PBR 材料往往需要你同时绘制反照率 + 金属性 + AO 地图。这在 Paint in 3D 里很容易设置,甚至还可以将其自定义为任何其他类型的复杂材质。 ? 颜色计数 – Paint in 3D 自带简易使用的系统来计算某个指定的颜色占了多少像素。这在团队合作绘制游戏时非常合适,能让你看到谁绘制的最多。 ?LOD 绘制 - 假如你需要绘制高多边形网格的话,你可以通过应用低多边形网格绘制来加速过程,并且仍然使用高多边形网格来可视化绘制! ? VR支持 - 所有功能都在VR中都很好用,而且 Paint in 3D 还附带了几个专为利用这些来设计的演示场景。如果你没有 VR 头盔的话, 不用担心,这些演示场景也可以与鼠标一起使用! ? 贴图绘制 - 使用此绘制工具来用你喜欢的纹理在物体表面上绘制。你能全面调控颜色、角度,甚至还有背面绘制和角度限制等这些高级设置。非常适合于汽车贴图、血溅 ,和更多! ? 实时绘制 - 应用了之后还需要移动贴图和其他绘制吗?实时绘制功能让你可以轻松地将绘制附加到任何变换中,给予你全面控制。 ? 动态绘制 - 轻松地绘制动态贴图,就跟文字一样。此绘制模式兼容你在 UI 或相机中绘制的东西,包括复杂的纹理、角色、3D 物体等。 ? 粒子碰撞绘制 - 使用此功能来用粒子绘制物体。这能让你做出逼真的喷漆涂鸦、烟熏等等! ?物理碰撞绘制 - 留下绘制并将你的碰撞影响带到下一个关卡中。这非常适用于添加凹痕、抓痕、 血溅,等等! ? 球形绘制 - 使用此 绘制工具来绘制球体半径中的每个像素。 ? 三边平面绘制 - 使用此绘制工具在复杂几何体上绘制无缝纹理。这能与球形和贴图绘制一起使用。 ? 孔形绘制 - 使用减性混合模式在物体上绘制孔。这能与球形和贴图绘制一起使用。 ? 法线绘制 - 使用法线混合模式绘制法线贴图。这可以让你将凹痕、抓痕 和其他细节添加到物体中。 ? 模糊绘制 - 使用模糊混合模式来将纹理中的像素模糊化。这可以让你将法线贴图平滑化 、抹去尖锐的线条等等! ? 间介绘制 - 使用此混合模式在 2 个 3D 点之间绘制第一个表面。这非常适合激光光束特效,还有更多! ? 贯通绘制 - 使用此混合模式在两个 3D 点之间绘制所有像素。这适合于非常强烈的激光光束特效,来贯穿一切。 ? 渐变绘制 - 使用此工具的任何混合模式,渐变绘制你的纹理中的所有像素。这非常适合随着时间逐渐淡化的特效,例如能量盾、雪中的足迹,以及更多! ? 泼溅贴图绘制 - 此绘制工具可让你用泼溅贴图将瓷片纹理绘制在物体上。
Paint in 3D 绘制所有物体 - 在游戏内和编辑器里都可使用。所有功能已经过深度优化,在WebGL、移动端、VR 以及更多平台用起来都非常好用! 容易使用 - 学习如何使用 Paint in 3D,让众多教程场景来手把手帮你过一遍每个功能。然后你还可以看看如何将多个功能结合在一起的演示场景,创建一些更有趣的东西。 长期支持 - Paint in 3D 经过超过 5 年的定期更新,现在已经具有大量功能。感谢至今一直支持我们开发的所有人! 所有渲染管线 - 此资源支持标准管线,以及 LWRP、HDRP 和 URP。请参阅文档了解如何在它们之间切换。 随地可用 - Painy in 3D 一开始就被设计来用于尽多的设备和平台。它在桌面、移动端、VR 上等各个平台上都表现优秀!假如遇上任何性能问题,你可以调整许多设置来提升性能,而且其视觉效果影响极小。 包含了完整源代码 - 如果你是程序员,随时可以根据爱好代码进行调整,它可轻松地被修改。 光速绘制 - 通过使用GPU 加速,你的物体将以难以置信的速度被绘制。代码还经过深度优化来防止 GC 分配,和将所有绘制操作一起批次完成。 在游戏内和编辑器中绘制 - Paint in 3D 是被设计来既可以用于游戏内,也可用于编辑器中,以便你想创建自己的纹理。如果你是程序员的话,你还可以直接从 C# 中使用它。 稳定的性能 - 跟贴图系统不同,Paint in 3D 是一个纹理绘制解决方案。这意味着你可以绘制你的物体上百万次,还是无帧率丢失,让你创作难以想象的游戏。 自动保存和加载 - Paint in 3D 带有一个简易使用的系统,可自动恢复你的绘制进度。如果你需要更高级的控制的话,你可以使用简单的 C# API 来手动控制。 蒙皮网格绘制 – Paint in 3D 让你能够以高性能绘制动态物体。查看 WebGL 演示,了解僵尸喷涂的极佳效果和绘制过程的方便快速。 画笔修改器 - 为你的画笔添加修改器,让它们变得活跃起来。它们可随机改变位置、旋转、不透明度、纹理,以及更多! 无缝 UV 绘制 - 正在用复杂的 UV 来绘制复杂的网格?没问题,Paint in 3D 能流畅无缝地在 UV 缝合上进行绘制,即使它们在不同的物体上,或甚至它们的缩放度不同! 撤消和重做系统 - Paint in 3D 中包括了完整的撤销 + 重做支持来为游戏内和编辑器内的绘制。在游戏内,绘制可以设置为使用全纹理快照来达到快速切换,也可以绘制动作重放来降低内存使用。撤消和重做能分别在全局、或在个别物体上进行,还可以用 UI 按钮或 C# AAPI 触发。 绘制遮罩 - 使用任何自定义纹理形状来轻松地将 3D 绘制遮罩添加到场景中。这将会自动防止所有新增的绘制在指定区域中出现,为你带来了油印效果。 智能镜像系统 - Paint in 3D 自带强大的镜像功能,让你同时绘制物体的两面。如果你用文字来绘制贴图的话 ,它们通常会倒后出现,Paint in 3D 能更正它! 绘制任何着色器 - Paint in 3D 让你绘制各种着色器和材质,包括你的自定义。只需直接选择你想绘制的纹理和你想使用的混合模式,然后你就能开始了! 多纹理绘制 - PBR 材料往往需要你同时绘制反照率 + 金属性 + AO 地图。这在 Paint in 3D 里很容易设置,甚至还可以将其自定义为任何其他类型的复杂材质。 颜色计数 – Paint in 3D 自带简易使用的系统来计算某个指定的颜色占了多少像素。这在团队合作绘制游戏时非常合适,能让你看到谁绘制的最多。 LOD 绘制 - 假如你需要绘制高多边形网格的话,你可以通过应用低多边形网格绘制来加速过程,并且仍然使用高多边形网格来可视化绘制! VR支持 - 所有功能都在VR中都很好用,而且 Paint in 3D 还附带了几个专为利用这些来设计的演示场景。如果你没有 VR 头盔的话, 不用担心,这些演示场景也可以与鼠标一起使用! 贴图绘制 - 使用此绘制工具来用你喜欢的纹理在物体表面上绘制。你能全面调控颜色、角度,甚至还有背面绘制和角度限制等这些高级设置。非常适合于汽车贴图、血溅 ,和更多! 实时绘制 - 应用了之后还需要移动贴图和其他绘制吗?实时绘制功能让你可以轻松地将绘制附加到任何变换中,给予你全面控制。 动态绘制 - 轻松地绘制动态贴图,就跟文字一样。此绘制模式兼容你在 UI 或相机中绘制的东西,包括复杂的纹理、角色、3D 物体等。 粒子碰撞绘制 - 使用此功能来用粒子绘制物体。这能让你做出逼真的喷漆涂鸦、烟熏等等! 物理碰撞绘制 - 留下绘制并将你的碰撞影响带到下一个关卡中。这非常适用于添加凹痕、抓痕、 血溅,等等! 球形绘制 - 使用此 绘制工具来绘制球体半径中的每个像素。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值