Blender Python編程創(chuàng)建發(fā)光材質(zhì)示例詳解
前言
Blender 并不是唯一一款允許你為場景編程和自動化任務(wù)的3D軟件; 隨著每一個新版本的推出,Blender 正逐漸成為一個可靠的 CG 制作一體化解決方案,從使用油脂鉛筆的故事板到基于節(jié)點的合成。
事實上,你可以使用 Python 腳本和一些額外的包來批處理你的對象實例化,程序化地生成東西,配置你的渲染設(shè)置,甚至獲得你當(dāng)前項目的自定義統(tǒng)計數(shù)據(jù),這是非常棒的功能! 這是一種減輕繁瑣任務(wù)負擔(dān)的方式,同時也能讓開發(fā)者參與到這個創(chuàng)造性工具社區(qū)中,而不僅僅是美術(shù)人員。
正文
在 Blender 中,著色器通常是通過基于節(jié)點的圖形編輯器(可以在 “Shading” 選項卡中找到)來編輯的,它可以讓你根據(jù)想要構(gòu)建或多或少復(fù)雜的著色流程來鏈接和組合盡可能多的內(nèi)置節(jié)點。然而,在本文中,我們將制作一個超級簡單的著色器,只有一個節(jié)點,所以我們將在 Python 腳本 ?? 中做所有的事情。
創(chuàng)建完材質(zhì)之后會使用那些著色器,并應(yīng)用到你的 3D 幾何物體上。一個物體可能有幾個 材質(zhì)槽,例如,它可以為幾何的不同部分使用不同的著色器,但我們今天不會討論這種復(fù)雜的情況,我們將只考慮 每個物體一個材質(zhì)槽 的情形。
以 發(fā)光材質(zhì) 為例。你可以把它想象成一個有強度(strength
參數(shù))和顏色的大燈泡。它將使你的 3D 對象發(fā)光(所以你的對象將成為你場景中的光源,將與其余的網(wǎng)格交互!) ??
PS: 選擇 Shader 類型對于這個項目,我使用的 EEVEE 引擎,其也可以與著色器節(jié)點工作,即使它與 Cycles 引擎并不是所有節(jié)點類型都相同。
在 Python 腳本中創(chuàng)建一個著色器
為了完全通過腳本創(chuàng)建和分配一個著色器,我們必須:
- 使用
bpy.data
子模塊創(chuàng)建一個新的著色器資源 - “編輯” 這個著色器,就像我們使用著色器節(jié)點編輯器一樣: 我們將刪除一些節(jié)點,添加其他節(jié)點,設(shè)置它們的屬性并將它們鏈接在一起
- 對新創(chuàng)建材質(zhì)的引用進行檢索
- 最后,將其添加到我們對象的材質(zhì)數(shù)據(jù)(即槽)中
讓我們一步一步來做這件事。我們將從創(chuàng)建一個名為 create_emission_shader()
的新函數(shù)開始
它將接收一些 強度(Strength
) 和 顏色(Color
) 參數(shù),并使用這些參數(shù)來設(shè)置一個基本的 2 節(jié)點圖,其中有一個發(fā)光(Emission
)節(jié)點和一個輸出(Output
)節(jié)點。
我們的想法
- 從基本節(jié)點模板開始,清除所有初始節(jié)點
- 然后,可以添加我們的 發(fā)光 節(jié)點和 輸出 節(jié)點,通過更新其輸入字段的值來配置 發(fā)光 節(jié)點
- 并在兩個節(jié)點之間創(chuàng)建一個鏈接
具體代碼與注釋
創(chuàng)建發(fā)光材質(zhì)
def create_emission_shader(color, strength, mat_name): # create a new material resource (with its # associated shader) mat = bpy.data.materials.new(mat_name) # enable the node-graph edition mode mat.use_nodes = True # clear all starter nodes nodes = mat.node_tree.nodes nodes.clear() # add the Emission node node_emission = nodes.new(type="ShaderNodeEmission") # (input[0] is the color) node_emission.inputs[0].default_value = color # (input[1] is the strength) node_emission.inputs[1].default_value = strength # add the Output node node_output = nodes.new(type="ShaderNodeOutputMaterial") # link the two nodes links = mat.node_tree.links link = links.new(node_emission.outputs[0], node_output.inputs[0]) # return the material reference return mat
現(xiàn)在很容易使用這個方法來創(chuàng)建我們的材質(zhì)資源,并將它們應(yīng)用到我們的對象上。
例如,我們將需要一個白色的發(fā)光材質(zhì)為光環(huán),一個黃色的發(fā)光材質(zhì)為太陽,為每個行星創(chuàng)建一個隨機顏色的發(fā)光材質(zhì)(盡管我將添加更多的藍色,以更好的整體顏色平衡 ??):
具體調(diào)用代碼
# ... N_PLANETS = 6 ring_mat = create_emission_shader( (1, 1, 1, 1), 1, "RingMat" ) for n in range(N_PLANETS): # ... planet = create_sphere(r, d, "Planet-{:02d}".format(n)) planet.data.materials.append( create_emission_shader( (random(), random(), 1, 1), 2, "PlanetMat-{:02d}".format(n) ) ) # add the radius ring display ring = create_torus(d, "Radius-{:02d}".format(n)) ring.data.materials.append(ring_mat) # add the sun sphere sun = create_sphere(12, 0, "Sun") sun.data.materials.append( create_emission_shader( (1, 0.66, 0.08, 1), 10, "SunMat" ) )
如果你在 3D 視圖中將陰影模式改為 “rendering”,并刪除當(dāng)前場景中的所有對象,然后運行以上腳本,你會看到它們現(xiàn)在有了漂亮的發(fā)光材質(zhì)!
- 應(yīng)用材質(zhì)前
- 應(yīng)用材質(zhì)后
注意,在運行腳本后,你甚至可以進入 “Shading” 選項卡,選擇一個帶有著色器的對象并查看其著色器圖。
它看起來像預(yù)期的那樣: 兩個節(jié)點,一個 Emission
和一個 Output
,兩者之間的鏈接,以及一些Strength
和 Color
屬性的自定義值。
以上就是Blender Python編程創(chuàng)建發(fā)光材質(zhì)示例詳解的詳細內(nèi)容,更多關(guān)于Blender Python創(chuàng)建發(fā)光材質(zhì)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文教會你利用Python程序讀取Excel創(chuàng)建折線圖
不同類型的圖表有不同的功能,柱形圖主要用于對比數(shù)據(jù),折線圖主要用于展示數(shù)據(jù)變化的趨勢,散點圖主要用于判斷數(shù)據(jù)的相關(guān)性,下面這篇文章主要給大家介紹了關(guān)于如何通過一文教你利用Python程序讀取Excel創(chuàng)建折線圖的相關(guān)資料,需要的朋友可以參考下2022-11-11利用Python實現(xiàn)某OA系統(tǒng)的自動定位功能
這篇文章主要介紹了利用Python實現(xiàn)某OA系統(tǒng)的自動定位功能,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05Windows中使用wxPython和py2exe開發(fā)Python的GUI程序的實例教程
wxPython是一款集成了Python的圖形化類庫的工具,而py2exe是一款將Python程序轉(zhuǎn)換為exe可執(zhí)行文件的程序,二者搭配可以輕松地在Windows中創(chuàng)建圖形化程序,這里我們就來學(xué)習(xí)Windows中使用wxPython和py2exe開發(fā)Python的GUI程序的實例教程:2016-07-07python修改linux中文件(文件夾)的權(quán)限屬性操作
這篇文章主要介紹了python修改linux中文件(文件夾)的權(quán)限屬性操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Django修改app名稱和數(shù)據(jù)表遷移方案實現(xiàn)
這篇文章主要介紹了Django修改app名稱和數(shù)據(jù)表遷移方案實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09