Behind the Paper: OffsetCrust

一靠打磨,二靠活着,三靠等待。

感谢大家,尤其感谢辛老师和我自己。

两年半。两年靠活着打磨,半年靠活着等待。工作量确实不小,是很多个住实验室的夜晚,一边接辅导员夺命连环 call 一边熬出来的结果。

几次超大版本迭代,从辛老师的 insight,到自己努力追赶老师的思想,再到最后靠自己的一点灵光一闪,才终于把完整 paper 写出来。写完最后一个版本的那一刻,我才终于放过了我自己(完美主义要不得,天知道写成这个样子我是如何折磨我自己的🤦)

感谢匿名审稿人们的耐心,两年半里提了一堆意见,陪我一起改。我也从一开始的宁死不从,到最后认真地一条一条修改、答复。尤其是他们挑出第二个版本里的证明小错误时,我也只能:“说得对啊,说得真好啊!” 于是这才 push 着自己彻底重写出了第三个大版本,也就是最终版的雏形。现在整体一看,这个版本确实挺好的,我还挺满意的。

唯一的遗憾是,三投三拒 siggraph journal only(没错,头铁的我次次选),最后自己先怕了才转战tvcg,没再头铁地继续刷tog。可审稿人竟然还是没变,仍然在一路追杀,到这最后我才终于读懂了审稿意见的内涵。有经验了,下次再战吧。

总结:本人失败经验极其丰富,虽然也收获颇丰。现在深刻认识到,人生的第一要义是先活着...


备忘:OffsetCrust Insight 雏形

以下是我个人整理的,2024年1月拿到的辛老师的 insight,同时也是 paper 第一个版本主要逻辑

Power 距离定义为:

dist(x,p)=xp2wp\mathrm{dist}(x,p)=\|x-p\|^2-w_p

令:

q=p+ϵnq=p+\epsilon n

其中 nn 为单位法向量。若 xx 位于 ppqq 的 power bisector 上,则有:

xp2wp=xq2wq\|x-p\|^2-w_p=\|x-q\|^2-w_q

因此:

xp2xq2=wpwq(x22xp+p2)(x22xq+q2)=wpwq2x(qp)+p2q2=wpwq\begin{aligned} \|x-p\|^2-\|x-q\|^2 &=w_p-w_q \\ (\|x\|^2-2x^\top p+\|p\|^2) - (\|x\|^2-2x^\top q+\|q\|^2) &=w_p-w_q \\ 2x^\top(q-p)+\|p\|^2-\|q\|^2 &=w_p-w_q \end{aligned}

代入 q=p+ϵnq=p+\epsilon n,得到:

wpwq=2x(ϵn)+p2p+ϵn2=2ϵxn(2ϵpn+ϵ2)=2ϵ(xp)nϵ2\begin{aligned} w_p-w_q &=2x^\top(\epsilon n)+\|p\|^2-\|p+\epsilon n\|^2 \\ &=2\epsilon x^\top n-\left(2\epsilon p^\top n+\epsilon^2\right) \\ &=2\epsilon (x-p)^\top n-\epsilon^2 \end{aligned}

令:

d=(xp)nd=(x-p)^\top n

xxpp 沿法向 nn 的有符号距离,则:

wpwq=2ϵdϵ2\boxed{ w_p-w_q=2\epsilon d-\epsilon^2 }

也即:

wdiff=2ϵdϵ2\boxed{ w_{\mathrm{diff}}=2\epsilon d-\epsilon^2 }

也就是说,计算一个形状的 offset 时,可以先在原始表面上采样得到点云 PP,再将每个采样点 pp 沿法向偏移一小段距离 ϵ\epsilon,得到对应点 q=p+ϵnq=p+\epsilon n,从而构造另一组点云 QQ

随后,为 PP 中的点赋予权重 wdiffw_{\mathrm{diff}},为 QQ 中的点赋予权重 00。构造对应的 Power Diagram 后,提取 PPQQ 的 power cells 之间的公共面片,即可得到距离原始曲面为 dd 的 offset surface。

核心是:

wdiff=2ϵdϵ2w_{\mathrm{diff}}=2\epsilon d-\epsilon^2

也就是把 offset surface 的构造,转化为 power weight 的选择。