Hello,大家好我是梅森Mason,相信大家都用過3D列印吧!但是有經驗的人一定知道,3D列印最花時間的環節,除了實際列印之外,也很花時間的莫過於繪製3D圖吧,就算使用Tinkercad或是123D等等已經很厲害的軟體,也要費一番功夫。不過在AI快速發展之下,OpenAI陸續推出了幾款3D模型生成器,非常神奇!

Shap — E是什麼?跟Point-E有關嗎?

舊版Point-E與新板Shap-E生成模型對照(取自designboom)
舊版Point-E與新板Shap-E生成模型對照(取自designboom)

OpenAI在去年底推出了名為Point-E的3D模型產生器,可是其是採用RGB 點狀雲技術,所以生成的3D模型效果較差,相當粗糙(如上圖),但在近期OpenAI又推出了一個名為Shap-E的3D模型產生器,是使用「NeRF神經輻射場」技術所產生3D模型的服務,其技術與Google Earth的衛星影像產生3D效果相同,非常強大。在開始之前,讓我們來欣賞幾個官方產生出的3D模型GIF動圖吧!

官方產生出的3D模型GIF(取自Shap-E GitHub官網)
官方產生出的3D模型GIF(取自Shap-E GitHub官網)

看起來是不是很有趣呢!讓我們開始吧!

!!!硬體要求!!!

NVIDIA顯卡(取自cc0)
NVIDIA顯卡(取自cc0)

在下載以及使用之前請先特別注意,電腦配有「NVIDIA」顯卡的建議讀者們再使用,因為繪製3D圖會需要使用到極大量的運算資源,如果只配有普通CPU的電腦經過測試很常會發生當機的情況,請特別注意!

不過如果硬體設備較陽春的讀者也沒關係,這個網站可以體驗,不過只能產生用Shap-E產生的3D模型GIF動圖而已,僅能過過乾癮,如果真的想要擁有屬於自己的3D模型就來去光華商場升級裝備吧!

Shap-E生成3D模型模擬器(取自Hugging Face Shap-E模擬器)
Shap-E生成3D模型模擬器(取自Hugging Face Shap-E模擬器)

可以使用由Prompt產生的「Text to 3D」模式和由圖片產生的「Image to 3D」模式,不過比起桌面版的Shap-E,這個模擬器能調整的參數很少,加上失敗率偏高,還是遜色許多,因此不再多贅述

Let’s get started!

首先,我們要把Shap-E和Visual Studio Code先安裝到電腦,方便之後的編輯。 ●安裝Visual Studio Code

Visual Studio Code下載頁面(取自Visual Studio Code官網)
Visual Studio Code下載頁面(取自Visual Studio Code官網)

首先點擊這裡連到Visual Studio Code官方的下載頁面,選擇對應版本下載安裝

●安裝Shap-E Shap-E安裝的步驟較複雜,在經過梅森長時間爬文之後,發現這篇文章的教學相對完整,跳過開頭到第二部分「2、配置环境」開始一步一步安裝,最後選擇用「Visual Studio Code」開啟程式

參數調整!

如果下載及安裝順利,打開「sample_text_to_3d.ipynb」後,最後應該會出現以下6區程式碼

import torch

from shap_e.diffusion.sample import sample_latents
from shap_e.diffusion.gaussian_diffusion import diffusion_from_config
from shap_e.models.download import load_model, load_config
from shap_e.util.notebooks import create_pan_cameras, decode_latent_images, gif_widget
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
xm = load_model('transmitter', device=device)
model = load_model('text300M', device=device)
diffusion = diffusion_from_config(load_config('diffusion'))
batch_size = 4
guidance_scale = 15.0
prompt = "a shark"

latents = sample_latents(
batch_size=batch_size,
model=model,
diffusion=diffusion,
guidance_scale=guidance_scale,
model_kwargs=dict(texts=[prompt] * batch_size),
progress=True,
clip_denoised=True,
use_fp16=True,
use_karras=True,
karras_steps=64,
sigma_min=1e-3,
sigma_max=160,
s_churn=0,
)
render_mode = 'nerf' # you can change this to 'stf'
size = 64 # this is the size of the renders; higher values take longer to render.

cameras = create_pan_cameras(size, device)
for i, latent in enumerate(latents):
images = decode_latent_images(xm, latent, cameras, rendering_mode=render_mode)
display(gif_widget(images))
# Example of saving the latents as meshes.
from shap_e.util.notebooks import decode_latent_mesh

for i, latent in enumerate(latents):
t = decode_latent_mesh(xm, latent).tri_mesh()
with open(f'example_mesh_{i}.ply', 'wb') as f:
t.write_ply(f)
with open(f'example_mesh_{i}.obj', 'w') as f:
t.write_obj(f)

接著移到第4區程式碼,會看到以下程式,目前可以在像是「batch_size」做成品尺寸的調整、在「guidance_scale」做比例的調整,還有修改最重要的「prompt」,讓程式產生指定外型的模型

batch_size = 4
guidance_scale = 15.0
prompt = "a shark"

latents = sample_latents(
batch_size=batch_size,
model=model,
diffusion=diffusion,
guidance_scale=guidance_scale,
model_kwargs=dict(texts=[prompt] * batch_size),
progress=True,
clip_denoised=True,
use_fp16=True,
use_karras=True,
karras_steps=64,
sigma_min=1e-3,
sigma_max=160,
s_churn=0,
)

開始產生3D模型!

點擊上方的「Run All」之後,就會開始執行所有cell(執行時間會根據電腦效能有所不同)

等待所有cell執行完之後,回到資料夾,應該會看到編號0到3的模型

如何查看3D模型

打開Tinkercad,登入後開啟新3D專案,點選右上角匯入,按ctrl選取四個.obj的模型

匯入模型(取自Tinkercad官網)
匯入模型(取自Tinkercad官網)

就可以看到成品啦!是不是很酷呢?

結語

這個服務雖然產生出的模型品質可能還是較低,但是已經是AI生成3D模型的一大步,也意味著這個服務非常有發展的空間,值得我們深入研究。 而產生的模型也可以經過一些線上的優化工具來優化模型,或是用Tinkercad做一些延伸的應用或專案喔!像是梅森就用了這四隻鯊魚做了一個簡單的小筆筒,大家可以參考看看喔!

SHARK筆筒(取自Tinkercad官網)
SHARK筆筒(取自Tinkercad官網)

最後,作者希望各位讀者能夠延伸出更多更酷的功能和專案,與我分享。也由衷希望這項工具能成為您的一大幫手!

希望這些文章能給各位讀者大大幫助,歡迎幫我按個拍手、順便按個follow,您就能收到新文章的通知、留個言給我鼓勵或把本文分享給您的親朋好友,讓更多人知道喔!

By 那個成天泡在電腦裡的梅森 on June 23, 2023.

Canonical link