91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Blender?Python編程實現程序化建模生成超形

發布時間:2022-08-09 16:45:49 來源:億速云 閱讀:275 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么使用Blender Python編程實現程序化建模生成超形”,在日常操作中,相信很多人在怎么使用Blender Python編程實現程序化建模生成超形問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Blender Python編程實現程序化建模生成超形”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

正文

Blender 并不是唯一一款允許你為場景編程和自動化任務的3D軟件; 隨著每一個新版本的推出,Blender 正逐漸成為一個可靠的 CG 制作一體化解決方案,從使用油脂鉛筆的故事板到基于節點的合成。

事實上,你可以使用 Python 腳本和一些額外的包來批處理你的對象實例化,程序化地生成東西,配置你的渲染設置,甚至獲得你當前項目的自定義統計數據,這是非常棒的功能! 這是一種減輕繁瑣任務負擔的方式,同時也能讓開發者參與到這個創造性工具社區中,而不僅僅是美術人員。

什么是超形(Supershapes, Superformula)

截圖來自于 ShaderToy

怎么使用Blender?Python編程實現程序化建模生成超形

二維超形

超形方程是基于由 Johan Gielis 意圖作為 自然形狀的建模框架 而提出的。 二維超形方程是圓方程和橢圓方程的推廣

怎么使用Blender?Python編程實現程序化建模生成超形

他們給出的二維超橢圓/超形的一般公式如下。

怎么使用Blender?Python編程實現程序化建模生成超形

其中 rphi 是極坐標(表示半徑、角度)

怎么使用Blender?Python編程實現程序化建模生成超形

n1n2n3m 都是實數。

ab 是除 0 以外的實數。

m = 0 的話,結果就是圓,即 r = 1

怎么使用Blender?Python編程實現程序化建模生成超形

n1 = n2 = n3 = 1

增大 m 的話會增加形狀的旋轉對稱性。這通常適用于對于 n 個參數為其他值時的情況。這些曲線在角 2π/m 的圓上重復出現,這現象在下面大多數 m 為整數值的例子中尤為明顯。

怎么使用Blender?Python編程實現程序化建模生成超形

n1 = n2 = n3 = 0.3

當 n 保持相等但減小時,形狀將變得越來越緊湊。

怎么使用Blender?Python編程實現程序化建模生成超形

其他特別情況

例子 1

如果 n1 略大于 n2n3,則會形成 膨脹 的形式。

下邊的例子有 n1 = 40n2 = n3 = 10

怎么使用Blender?Python編程實現程序化建模生成超形

例子 2

多邊形 形狀是用非常大的 n1 值以及雖然值大但相等的 n2n3來實現的。

怎么使用Blender?Python編程實現程序化建模生成超形

例子 3

不對稱 形狀可以通過使用不同的 n 值來創建。下面的例子有 n1 = 60, n2 = 55n3 = 30

怎么使用Blender?Python編程實現程序化建模生成超形

例子 4

對于 m 的非整值,對于有理值其所生成的形狀仍然是封閉的。下面是 n1 = n2 = n3 = 0.3 的示例。角度需要從 0 擴展到 12π

怎么使用Blender?Python編程實現程序化建模生成超形

例子 5

由于 n1 的值小于 n2n3,因此形成了光滑的海星形狀。下面的例子有 m=5n2 = n3 = 1.7

怎么使用Blender?Python編程實現程序化建模生成超形

奇異的形狀

感興趣的朋友還可以嘗試其他不同的形狀

怎么使用Blender?Python編程實現程序化建模生成超形

三維超形

在給出了上面二維超形的定義后,

怎么使用Blender?Python編程實現程序化建模生成超形

我們可以使用球形乘積(spherical product)擴展到 3D 使用。

怎么使用Blender?Python編程實現程序化建模生成超形

Blender 生成超形

有了以上的理論支持,我們就可以在 Blender 里面開始編寫 Python 代碼了,原理并不難,我們只需要套用上面的三維超形公式,然后定義我們自己的參數即可。

詳細代碼和注釋如下

import bpy
import math
# mesh 數組(點、面、邊)
verts = []
faces = []
edges = []
#3D supershape 參數
m = 14.23
a = -0.06
b = 2.78
n1 = 0.5
n2 = -.48
n3 = 1.5
scale = 3
Unum = 50
Vnum = 50
Uinc = math.pi / (Unum/2)
Vinc = (math.pi/2)/(Vnum/2)
# 套用公式,填充頂點數組
theta = -math.pi
for i in range (0, Unum + 1):
   phi = -math.pi/2
   r1 = 1/(((abs(math.cos(m*theta/4)/a))**n2+(abs(math.sin(m*theta/4)/b))**n3)**n1)
   for j in range(0,Vnum + 1):
       r2 = 1/(((abs(math.cos(m*phi/4)/a))**n2+(abs(math.sin(m*phi/4)/b))**n3)**n1)
       x = scale * (r1 * math.cos(theta) * r2 * math.cos(phi))
       y = scale * (r1 * math.sin(theta) * r2 * math.cos(phi))
       z = scale * (r2 * math.sin(phi))
       vert = (x,y,z) 
       verts.append(vert)
       #增加 phi
       phi = phi + Vinc
   #增加 theta
   theta = theta + Uinc
# ------------------------------------------------------------------------------- 
# 填充面數組
count = 0
for i in range (0, (Vnum + 1) *(Unum)):
    if count < Vnum:
        A = i
        B = i+1
        C = (i+(Vnum+1))+1
        D = (i+(Vnum+1))
        face = (A,B,C,D)
        faces.append(face)
        count = count + 1
    else:
        count = 0
# 創建 mesh 和 object
mymesh = bpy.data.meshes.new("supershape")
myobject = bpy.data.objects.new("supershape",mymesh)
# 設置 mesh 的 location
myobject.location = bpy.context.scene.cursor.location # *
bpy.context.scene.collection.objects.link(myobject) # *
# 從 python 數據創建 mesh
mymesh.from_pydata(verts,edges,faces)
mymesh.update(calc_edges=True)
# 設置 object 為編輯模式
bpy.context.view_layer.objects.active = myobject # *
bpy.ops.object.mode_set(mode='EDIT')
# 移除重復的頂點
bpy.ops.mesh.remove_doubles() 
# 重新計算法線
bpy.ops.mesh.normals_make_consistent(inside=False)
bpy.ops.object.mode_set(mode='OBJECT')
# 新建細分修改器(subdivide modifier)
myobject.modifiers.new("subd", type='SUBSURF')
myobject.modifiers['subd'].levels = 3
# 平滑 mesh
mypolys = mymesh.polygons
for p in mypolys:
    p.use_smooth = True

通過以上代碼,我們就可以輕松生成如下形狀,不用費力得進行 “雕刻”

怎么使用Blender?Python編程實現程序化建模生成超形

還可以自行修改參數,比如 “咻得一下” 就可以得到以下形狀,是不是很簡單~

怎么使用Blender?Python編程實現程序化建模生成超形

到此,關于“怎么使用Blender Python編程實現程序化建模生成超形”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

涞水县| 常宁市| 宜城市| 井陉县| 舒兰市| 临安市| 高淳县| 忻州市| 宜兰县| 安岳县| 清丰县| 柏乡县| 沾益县| 肇源县| 宁强县| 彭泽县| 沙湾县| 同江市| 龙口市| 鄯善县| 长治市| 团风县| 丹寨县| 鄂托克旗| 当阳市| 礼泉县| 庆阳市| 买车| 汾西县| 天镇县| 保德县| 天祝| 高邮市| 信阳市| 辽源市| 沁水县| 斗六市| 雷州市| 抚松县| 秦安县| 缙云县|