isHarryh / Ark-Pets

Arknights Desktop Pets | 明日方舟桌宠
https://arkpets.harryh.cn
GNU General Public License v3.0
519 stars 33 forks source link

[Bug] 小人边界裁剪问题与一些建议 #4

Closed Misaka2298 closed 1 year ago

Misaka2298 commented 2 years ago

这些在B站私信发过了,不过Github的issue界面突然可以打开了,就再发一遍吧

问题

建议

Misaka2298 commented 2 years ago

小人重叠闪烁 和 小人陷进任务栏这两个已经有人提交过issue了,我这里就不再重复了

ChuJiani commented 2 years ago

bug1 应该是裁切问题 建议5 应该比较难搞,因为作者目前使用的都是已有动作,如果增加爬墙功能大概需要额外设计,spine 动画设计起来又比较麻烦,干员骨架不同需要单独设计,大工程(

isHarryh commented 2 years ago

bug1 确是剪裁问题

isHarryh commented 2 years ago

建议1/2/4将被优先采纳。 建议5你的意思是已经有人做过了?但我其实不知道(

ChuJiani commented 2 years ago

建议5你的意思是已经有人做过了?但我其实不知道(

shimeji 是一个像素风的桌宠软件(源码演示+简易教程),基于帧播放进行而非实时渲染,允许自定义模型(当然也是要自己绘制 / 生成的连续图片)。

isHarryh commented 2 years ago

建议5你的意思是已经有人做过了?但我其实不知道(

shimeji 是一个像素风的桌宠软件(源码演示+简易教程),基于帧播放进行而非实时渲染,允许自定义模型(当然也是要自己绘制 / 生成的连续图片)。

Okay

isHarryh commented 1 year ago

建议1:小人在按下Win+D返回桌面后会消失,如果可行的话或许可以让小人的窗口一直显示在最上方

建议1所述特性已于 4954639d623608dfd0443790e786176d57ff2212 中加入。

isHarryh commented 1 year ago

建议2:在选择小人模型的界面添加中文索引(滚轮一个一个猜干员英文名缩写实在是太折磨人了)

建议2所属特性已于 95e6a1ace8d047ac51314e7d5572ce4169fa9f84 中加入。

isHarryh commented 1 year ago

凯尔希的M3水晶有一个角不显示

经过本人十几个小时的调教, 该问题已于 4aa567ba9695db9f2904c46e3eea4f8cc65531c6 中得到显著缓解。复盘如下:

问题主因
ArkPets所采取的窗口/画布大小是固定的,这导致有一些比较“大”的小人或动画在渲染时会被裁切掉溢出画布的部分。

解决思路
动态窗口调整:适时地监视画布渲染的结果,对渲染结果进行分析,如果发生溢出或存在溢出风险,则拓展画布和窗口的大小;拓展大小后,若溢出的情况不再存在,则缩小画布和窗口到合适的大小。该解决方案的稳定性尚待探究,因为频繁调整画布和窗口的大小可能会导致渲染不同步,由此发生窗口抖动或画布异常拉伸。

isHarryh commented 1 year ago

凯尔希的M3水晶有一个角不显示

经过本人十几个小时的调教, 该问题已于 4aa567ba9695db9f2904c46e3eea4f8cc65531c6 中得到显著缓解。复盘如下:

问题主因
ArkPets所采取的窗口/画布大小是固定的,这导致有一些比较“大”的小人或动画在渲染时会被裁切掉溢出画布的部分。

解决思路
动态窗口调整:适时地监视画布渲染的结果,对渲染结果进行分析,如果发生溢出或存在溢出风险,则拓展画布和窗口的大小;拓展大小后,若溢出的情况不再存在,则缩小画布和窗口到合适的大小。该解决方案的稳定性尚待探究,因为频繁调整画布和窗口的大小可能会导致渲染不同步,由此发生窗口抖动或画布异常拉伸。

此修复引起的窗口抖动和画布异常拉伸过于明显,且反复尝试后未找到缓解方法。现在折中一下,退而求其次, 不再使用动态窗口调整,而改为窗口预调整 (99423d46b1037a4e13578ffee30f1d3b8f9cf56d) 具体如下:

解决思路 窗口预调整:在桌宠启动时,正式上屏渲染前,遍历人物所有动画的部分关键帧。每次遍历后对渲染结果进行分析,最终找到一个最合适的窗口大小,使得大部分动画不会溢出。然后上屏渲染,上屏后不再进行动态监测。

经测试此解决方案工作情况良好,无特殊异样,性能友好。

isHarryh commented 1 year ago

建议4:开机自启动

建议4所述特性已于 b6ef359dcae258cea9fab2fd9bac3fd199bc3ef6 实现。现在启动器不会在启动单个桌宠后立即关闭,可以多次启动桌宠。

isHarryh commented 1 year ago

建议3:增加跨桌面功能(我有两个显示器,但是小人只能在其中一个显示器上显示)

建议3所述的对多显示屏的支持,已于 5d024f911c033d6c94dba3c57652d11cfd83db5f 实现。现在桌宠可以进入主显示屏上下侧和左右侧的扩展屏中。

至此,本议题的所有内容历时 7 个月已经全部处理完毕。感谢一路陪伴。

MegaSteelX commented 1 year ago

2.1.0版本,模型“伊莎玛拉,‘腐化之心’”仍然存在切换形态后裁切错误的问题。 @isHarryh

isHarryh commented 1 year ago

2.1.0版本,模型“伊莎玛拉,‘腐化之心’”仍然存在切换形态后裁切错误的问题。 @isHarryh

上述优化只能使得“大部分动画不会溢出”,因为在“窗口过大”和“动画溢出”中需要进行权衡,其具体原因不再赘述。此番操作后确实有少数模型还是会溢出,并不是什么异常现象,但后续会酌情调整。

isHarryh commented 7 months ago

在先前的版本中,窗口尺寸初始化是通过对 动画的中间时刻帧 进行采样渲染,并计算最大外接矩形边界得到的。同一模型的不同动画的最大外接矩形不同,因此在裁切到第一个动画的外接矩形边界之后,后续动画如果溢出了该边界,便会对该边界进行一定长度的扩张。

3.1.0 版本针对桌宠动画溢出边界的问题做出如下改进:

  1. 只采样中间时刻帧的话只有一帧被采样,现在会间隔若干帧来进行多次采样来提升精确度。用户可以在启动器选项页面调整相关设置来控制精确度(即采样间隔帧数)。
  2. 不同动画的所有采样会进行叠加渲染,最后再计算整体的外接矩形边界,避免了先裁切再扩张导致的信息损失。
  3. 有别于之前一个模型只有一种窗口尺寸的设定,现在如果是多形态的角色模型,就会对每个形态分别进行窗口尺寸的初始化,这样在运行时切换形态便会自动进行窗口尺寸更改,避免了窗口无意义的过大化。