<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Blender 並不是唯一一款允許你為場景程式設計和自動化任務的3D軟體; 隨著每一個新版本的推出,Blender 正逐漸成為一個可靠的 CG 製作一體化解決方案,從使用油脂鉛筆的故事板到基於節點的合成。
事實上,你可以使用 Python 指令碼和一些額外的包來批次處理你的物件範例化,程式化地生成東西,設定你的渲染設定,甚至獲得你當前專案的自定義統計資料,這是非常棒的功能! 這是一種減輕繁瑣任務負擔的方式,同時也能讓開發者參與到這個創造性工具社群中,而不僅僅是美術人員。
截圖來自於 ShaderToy
超形方程是基於由 Johan Gielis 意圖作為 自然形狀的建模框架 而提出的。 二維超形方程是圓方程和橢圓方程的推廣
他們給出的二維超橢圓/超形的一般公式如下。
其中 r
和 phi
是極座標(表示半徑、角度)
n1
、n2
、n3
、m
都是實數。
a
和 b
是除 0 以外的實數。
m = 0
的話,結果就是圓,即 r = 1
增大 m
的話會增加形狀的旋轉對稱性。這通常適用於對於 n 個引數為其他值時的情況。這些曲線在角 2π/m
的圓上重複出現,這現象在下面大多數 m
為整數值的例子中尤為明顯。
當 n 保持相等但減小時,形狀將變得越來越緊湊。
如果 n1
略大於 n2
和 n3
,則會形成 膨脹 的形式。
下邊的例子有 n1 = 40
和 n2 = n3 = 10
。
多邊形 形狀是用非常大的 n1
值以及雖然值大但相等的 n2
和 n3
來實現的。
不對稱 形狀可以通過使用不同的 n
值來建立。下面的例子有 n1 = 60
, n2 = 55
和 n3 = 30
。
對於 m
的非整值,對於有理值其所生成的形狀仍然是封閉的。下面是 n1 = n2 = n3 = 0.3
的範例。角度需要從 0
擴充套件到 12π
。
由於 n1
的值小於 n2
和 n3
,因此形成了光滑的海星形狀。下面的例子有 m=5
和 n2 = n3 = 1.7
。
感興趣的朋友還可以嘗試其他不同的形狀
在給出了上面二維超形的定義後,
我們可以使用球形乘積(spherical product)擴充套件到 3D 使用。
有了以上的理論支援,我們就可以在 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超形建模的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45