二維圖片轉(zhuǎn) 3D 模型的技術(shù)不少,但能用你畫的草圖實(shí)時(shí)生成骨骼綁定的 3D 模型見過嗎?像這樣,順著已有的圖片描了幾筆,立馬就得到了三維模型:
▲ 兩倍速
一共描了五次輪廓就得到了一只完整的 3D 貓模型,還綁定了骨骼:
看,可以像這樣活動骨架關(guān)節(jié),隨時(shí)來一段鬼畜貓:
對比現(xiàn)有的很多自動生骨架建模方法,這一方法并不是在整個(gè)網(wǎng)格模型構(gòu)建完成后,采用算法處理并提取骨架。而是基于草圖,實(shí)時(shí)進(jìn)行形狀建模和骨架創(chuàng)建。
并且,實(shí)驗(yàn)也證明這一新方法的學(xué)習(xí)成本更低,不同經(jīng)驗(yàn)的專業(yè)人員都能快速上手。這項(xiàng)研究來自浙江大學(xué),相關(guān)論文發(fā)布在 Computers & Graphics 上,代碼現(xiàn)已開源:
從草圖中創(chuàng)建動態(tài)骨架
要實(shí)時(shí)地從草圖中創(chuàng)建動態(tài)骨架,研究者主要分為三步來實(shí)現(xiàn):
第一步是提取局部骨架。首先是從原始草圖中進(jìn)行簡單的多邊形采集,不過手繪圖像難免會因?yàn)槭侄痘虍嫾紗栴}出現(xiàn)線條的斷裂、不平滑等問題(也就是計(jì)算機(jī)圖像問題中常說的噪音)。
所以,需要將原始線條均勻地離散小段直線來平滑這些噪音,再用 DP(Douglas-Peucker)算法找到一個(gè)最接近形狀的簡化多邊形。
對于得到的簡化多邊形,通過連續(xù)向內(nèi)偏移的輪廓線將多邊形劃分為單調(diào)的區(qū)域,提取得到一種直線骨架:
將上面得到的直線骨架中包含的不必要的頂點(diǎn)和邊緣刪掉,并折疊小于特定閾值的短骨架邊緣,將直線骨架進(jìn)行簡化。全部變化流程如下:
第二步,連接子骨架。研究團(tuán)隊(duì)以交互式的成對方式連接子骨架。當(dāng)用戶創(chuàng)建一個(gè)新的子部件或移動一個(gè)現(xiàn)有的子部件時(shí),立即檢查當(dāng)前子部件是否與其他子部件相交。如果相交,就把當(dāng)前子部分的骨架與被交的子部分的骨架連接起來:
這符合用戶交互式地逐個(gè)創(chuàng)建三維模型的真實(shí)場景:新的子部件被連接到現(xiàn)有的子部件上,同時(shí),新的子骨架被連接到相應(yīng)的子骨架上。
第三步、全局骨架細(xì)化。在上一步中,當(dāng)兩個(gè)或多個(gè)子骨架連接到父骨架的類似位置時(shí),常常會生成多余的短骨。因此,這一步中首先要進(jìn)行曲線簡化、關(guān)節(jié)合并、分支修剪和邊緣折疊。
其次,為了控制模型不同部位的骨架的復(fù)雜性,研究者將 3D 模型旋轉(zhuǎn)到 XY 平面,把子形狀和分支從三維空間映射到二維空間:
然后通過在二維空間運(yùn)行 BoundedDP 算法,將簡化后的分支重新映射到其原來的三維位置。
▲ BoundedDP 算法步驟
最終,一個(gè)最開始是手繪草圖的圖像,就變成一個(gè)綁定了骨骼的 3D 模型了:
算法速度更快,安裝即玩
研究者首先對比了本文提出的骨骼模型生成算法與已有方法的執(zhí)行時(shí)間,可以看到,其速度優(yōu)于大多數(shù)方法:
研究者還請來了 12 位經(jīng)驗(yàn)各異的用戶來使用 MonsterMash2、RigMesh3,以及本文提出的系統(tǒng)來創(chuàng)建 3D 模型。可以看到,使用本文提出的系統(tǒng)創(chuàng)建得到的模型精度最高,但花費(fèi)時(shí)間卻較少:
在開源文件中,研究者提供了一個(gè) exe 的可執(zhí)行文件,安裝即玩。如果要進(jìn)行測試,要先安裝 Qt、 OpenCV、 Boost、 Libigl (Tetgen、 Triangle、 CGAL、 Eigen) ,并根據(jù)庫的安裝路徑修改相關(guān)文件。目前的測試環(huán)境則是這兩種:
話不多說,去找張狗的圖片試試能不能搞個(gè)鬼畜狗模型了 。
論文:
https://arxiv.org/abs/2110.05805
下載鏈接:
https://github.com/jingma-git/RealSkel
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。