" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Blender Python編程實(shí)現(xiàn)程序化建模生成超形示例詳解

 更新時(shí)間:2022年08月07日 15:12:55   作者:ShaderJoy  
這篇文章主要為大家介紹了Blender Python編程實(shí)現(xiàn)程序化建模生成超形示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

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

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

什么是超形(Supershapes, Superformula)

截圖來自于 ShaderToy

二維超形

超形方程是基于由 Johan Gielis 意圖作為 自然形狀的建??蚣?/strong> 而提出的。 二維超形方程是圓方程和橢圓方程的推廣

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

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

n1、n2n3、m 都是實(shí)數(shù)。

ab 是除 0 以外的實(shí)數(shù)。

m = 0 的話,結(jié)果就是圓,即 r = 1

n1 = n2 = n3 = 1

增大 m 的話會(huì)增加形狀的旋轉(zhuǎn)對(duì)稱性。這通常適用于對(duì)于 n 個(gè)參數(shù)為其他值時(shí)的情況。這些曲線在角 2π/m 的圓上重復(fù)出現(xiàn),這現(xiàn)象在下面大多數(shù) m 為整數(shù)值的例子中尤為明顯。

n1 = n2 = n3 = 0.3

當(dāng) n 保持相等但減小時(shí),形狀將變得越來越緊湊。

其他特別情況

例子 1

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

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

例子 2

多邊形 形狀是用非常大的 n1 值以及雖然值大但相等的 n2n3來實(shí)現(xiàn)的。

例子 3

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

例子 4

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

例子 5

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

奇異的形狀

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

三維超形

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

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

Blender 生成超形

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

詳細(xì)代碼和注釋如下

import bpy
import math
# mesh 數(shù)組(點(diǎn)、面、邊)
verts = []
faces = []
edges = []
#3D supershape 參數(shù)
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)
# 套用公式,填充頂點(diǎn)數(shù)組
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
# ------------------------------------------------------------------------------- 
# 填充面數(shù)組
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
# 創(chuàng)建 mesh 和 object
mymesh = bpy.data.meshes.new("supershape")
myobject = bpy.data.objects.new("supershape",mymesh)
# 設(shè)置 mesh 的 location
myobject.location = bpy.context.scene.cursor.location # *
bpy.context.scene.collection.objects.link(myobject) # *
# 從 python 數(shù)據(jù)創(chuàng)建 mesh
mymesh.from_pydata(verts,edges,faces)
mymesh.update(calc_edges=True)
# 設(shè)置 object 為編輯模式
bpy.context.view_layer.objects.active = myobject # *
bpy.ops.object.mode_set(mode='EDIT')
# 移除重復(fù)的頂點(diǎn)
bpy.ops.mesh.remove_doubles() 
# 重新計(jì)算法線
bpy.ops.mesh.normals_make_consistent(inside=False)
bpy.ops.object.mode_set(mode='OBJECT')
# 新建細(xì)分修改器(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

通過以上代碼,我們就可以輕松生成如下形狀,不用費(fèi)力得進(jìn)行 “雕刻”

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

以上就是Blender Python編程實(shí)現(xiàn)程序化建模生成超形示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Blender Python超形建模的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)B站UP主小助手詳解開發(fā)流程

    Python實(shí)現(xiàn)B站UP主小助手詳解開發(fā)流程

    功能是不是還挺豐富的,從寫第一行代碼到完成也就花了兩天不到的時(shí)間,這也證明了使用python開發(fā)的高效率,下面來說說這些功能開發(fā)中我遇到了哪些問題,我又是如何解決的
    2022-02-02
  • python  dataprep庫(kù)簡(jiǎn)化加速數(shù)據(jù)科學(xué)操作

    python  dataprep庫(kù)簡(jiǎn)化加速數(shù)據(jù)科學(xué)操作

    這篇文章主要為大家介紹了python  dataprep庫(kù)簡(jiǎn)化加速數(shù)據(jù)科學(xué)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • python psutil 模塊概述及使用示例

    python psutil 模塊概述及使用示例

    psutil是一個(gè)跨平臺(tái)的Python庫(kù),用于系統(tǒng)監(jiān)控、性能分析和進(jìn)程管理,它提供了豐富的API,可用于獲取系統(tǒng)的CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等資源的使用情況,以及進(jìn)行進(jìn)程管理,psutil支持Linux、Windows、macOS等主流操作系統(tǒng)
    2024-11-11
  • 修改默認(rèn)的pip版本為對(duì)應(yīng)python2.7的方法

    修改默認(rèn)的pip版本為對(duì)應(yīng)python2.7的方法

    今天小編就為大家分享一篇修改默認(rèn)的pip版本為對(duì)應(yīng)python2.7的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • C站最全Python標(biāo)準(zhǔn)庫(kù)總結(jié),你想要的都在這里

    C站最全Python標(biāo)準(zhǔn)庫(kù)總結(jié),你想要的都在這里

    這篇文章主要介紹了C站最全的Python標(biāo)準(zhǔn)庫(kù),總共包含10個(gè)類型,希望能對(duì)大家有幫助,看完不虧系列
    2021-07-07
  • Python深入學(xué)習(xí)之閉包

    Python深入學(xué)習(xí)之閉包

    這篇文章主要介紹了Python深入學(xué)習(xí)之閉包,閉包(closure)是函數(shù)式編程的重要的語(yǔ)法結(jié)構(gòu),Python也支持這一特性,本文就這一特性做了講解,需要的朋友可以參考下
    2014-08-08
  • python db類用法說明

    python db類用法說明

    這篇文章主要介紹了python db類用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python接口自動(dòng)化之ConfigParser配置文件的使用詳解

    python接口自動(dòng)化之ConfigParser配置文件的使用詳解

    這篇文章主要介紹了python接口自動(dòng)化之ConfigParser配置文件的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺析Python是如何實(shí)現(xiàn)集合的

    淺析Python是如何實(shí)現(xiàn)集合的

    之前我們介紹過字典的實(shí)現(xiàn)原理,它底層是基于哈希表實(shí)現(xiàn)的,而集合也是如此。本次我們來聊一下 Python 的集合是怎么實(shí)現(xiàn)的,希望對(duì)大家有所幫助
    2022-12-12
  • 一文詳解python如何將編寫的模塊打包上傳至pypi

    一文詳解python如何將編寫的模塊打包上傳至pypi

    我們此前花了很大功夫?qū)懥艘粋€(gè)極其簡(jiǎn)單的web框架myWeb,想要給別人用的時(shí)候,需要讓別人拷貝源代碼才行,這太low了,所以本篇文章會(huì)介紹如何將自己寫的模塊打包上傳至pypi,以便讓需要的人通過pip進(jìn)行安裝,感興趣的同學(xué)可以參考閱讀
    2023-05-05

最新評(píng)論

遂溪县| 仪陇县| 汽车| 尼勒克县| 灵寿县| 西畴县| 奉新县| 阿坝县| 郯城县| 连山| 邓州市| 法库县| 金昌市| 洛南县| 周口市| 孟连| 怀仁县| 贺兰县| 芮城县| 东乌| 广丰县| 永福县| 弥勒县| 高陵县| 镇安县| 吴忠市| 江油市| 雅安市| 土默特右旗| 乌兰察布市| 安阳县| 铜山县| 隆子县| 修武县| 大厂| 泸水县| 鲁甸县| 泸州市| 广宁县| 阳曲县| 玉屏|