View Categories

Python betikleme ile çeviri sonrası

7 dakika okuma

Bu sayfa, çeviri ve dışa aktarma arasında sahne değişikliklerini Python kullanarak nasıl kodlayacağınız hakkında bilgi vermektedir.

Genel Bakış #


V-Ray sahnesine erişim sağlayan Python API’si, V-Ray for Nuke çeviricisi tarafından çevrildikten sonra ve render edilmeden ve/veya .vrscene dosyasına dışa aktarılmadan önce V-Ray sahnesini değiştirmenize olanak tanır. V-Ray sahnesinin Nuke’taki temsilinden oldukça farklı olabileceğini unutmayın. Bu nedenle, V-Ray’in çeşitli Nuke yapılarını nasıl çevirdiği hakkında biraz bilgi gerekebilir. Bunu öğrenmenin en iyi yollarından biri  , V-Ray for Nuke tarafından dışa aktarılan .vrscene dosyalarını incelemektir  .

Sahne erişim API’si, V-Ray tarafından tanınmayan yapılar için özel çeviri sağlayarak veya orijinal Nuke sahnesini değiştirmeden render işleminden önce sahneyi değiştirerek V-Ray for Nuke çeviricisini genişletmenize olanak tanır.

Çalıştırılacak Python betiğini, Render Ayarları iletişim kutusunun VRayCommon sekmesindeki MEL/Python geri çağırma işlevleri bölümünde belirtebilirsiniz. Betik, sahne çevrildikten hemen sonra ve  .vrscene  dosyasına işlenmeden ve/veya dışa aktarılmadan önce çalıştırılır. Bir animasyon işlenirken, betik yalnızca bir kez, herhangi bir kare işlenmeden önce çalıştırılır.


Kullanıcı Arayüzü Yolu: ||VRayRenderer’ı Seçin|| > Özellikler Paneli > Çeviri Sonrası sekmesi

Kullanılabilir Python Fonksiyonları #


vray.utils modülünde aşağıdaki Python fonksiyonları mevcuttur   .

create(pluginType, pluginName) – Verilen ad ve türde bir eklenti oluşturur.

delete(pluginName) – Belirtilen ada sahip eklentiyi siler.

findByName(pattern) – Belirtilen türdeki tüm eklentilerin listesini döndürür. Pattern joker karakterler içerebilir.

findByType(pattern) – Belirtilen türdeki tüm eklentilerin listesini döndürür. Pattern joker karakterler içerebilir.

getPluginParams(plugin, getValues= False , onlyExisting= False – Verilen eklenti için mevcut tüm parametrelerin bir listesini döndürür. getValues ​​True ise, her parametrenin değeri de döndürülür. onlyExisting True ise, yalnızca V-Ray sahnesinde gerçekten ayarlanmış parametreler döndürülür; aksi takdirde tüm eklenti parametreleri döndürülür ve V-Ray sahnesinde ayarlanmamış olanlar varsayılan değerleriyle listelenir.

getTypeParams(pluginType) – Belirtilen eklenti türü için tüm parametrelerin listesini döndürür.

exportTexture(textureName) – Nuke sahnesinden dokuyu dışa aktarır ve dışa aktarılan eklentiyi döndürür. Bu işlev, sahne çevrilirken doku dışa aktarılmamışsa yararlı olabilir.

exportMaterial(materialName) – Nuke sahnesinden materyali dışa aktarır ve dışa aktarılan eklentiyi döndürür. Bu işlev, sahne çevrilirken materyal dışa aktarılmamışsa yararlı olabilir.

addSceneContent(scenefile, prefix=””) – Verilen .vrscene dosyasındaki tüm eklentileri yükler ve mevcut sahneye ekler. İsteğe bağlı olarak, her eklentinin adına eklenecek bir önek belirtebilirsiniz. Sahne dosyası, sahnenin geri kalanından farklı yeni bir ad alanında yüklenir – sahnede aynı ada sahip eklentiler varsa, bunlar ayrı eklentiler olarak kalır.

appendSceneContent(scenefile, prefix=””) – Verilen .vrscene dosyasındaki tüm eklentileri yükler ve isteğe bağlı bir önekle birlikte geçerli sahneye ekler. Eklentiler, en son yüklenen sahnenin ad alanına eklenir; bu nedenle, aynı adlara sahip mevcut eklentiler varsa, parametrelerine ait veriler mevcut eklentilere eklenir. Bu, aynı animasyonlu sekansdan birden fazla .vrscene dosyasını yüklemek için kullanılabilir . Sahne dosyalarını belirtmek için joker karakterler kullanılabilir.

Kullanılabilir Python Sınıfları #


vray.utils modülünde aşağıdaki Python sınıfları mevcuttur.

Eklenti #

Bu sınıf, sahnedeki bir V-Ray eklentisinin bir örneğini temsil eder.

duplicate(self, newName) – Aynı türde ve aynı parametrelere sahip yeni bir eklenti örneği döndürür.

get(self, paramName) – Bir parametrenin değerini döndürür.

has(self, paramName) – Eklenti örneğinin bu ada sahip bir parametresi olup olmadığını kontrol eder.

name(self) – Eklenti örneğinin adını döndürür.

params(self, getValues= False , onlyExisting=  False  – Bu eklenti için mevcut tüm parametrelerin bir listesini döndürür.  getValues ​​True ise, her parametrenin değeri de döndürülür. onlyExisting True ise, yalnızca V-Ray sahnesinde gerçekten ayarlanmış parametreler döndürülür; aksi takdirde tüm eklenti parametreleri döndürülür ve V-Ray sahnesinde ayarlanmamış olanlar varsayılan değerleriyle listelenir.

output(self, paramName) – Diğer eklentilerin parametreleri için değer olarak ayarlanabilen bir eklenti çıktı parametresine referans döndürür.

set(self, paramName, value) – Bir parametrenin değerini ayarlar.

type(self) – Eklenti örneğinin türünü alın.

Eklenti Parametre Değerlerini Temsil Eden Sınıflar #

Sahnedeki V-Ray eklentilerinin parametreleri basit sayılar veya daha karmaşık veri tipleri olabilir. Basit değerler doğrudan işlenebilirken, karmaşık tipler özel bir Python sınıfı ile temsil edilir.

PluginOutput sınıfı, bir V-Ray eklentisinin çıktı parametresine referansı temsil eder. Bir eklenti başka bir eklentinin çıktı parametresine bağlandığında kullanılır.

AColor Bu sınıf, dört bileşenli bir renk değerini (kırmızı, yeşil, mavi, alfa) temsil eder.

Renk Bu sınıf, üç bileşenli bir renk değerini (kırmızı, yeşil, mavi) temsil eder.

Vektör Bu sınıf, 3 boyutlu uzayda üç bileşenli bir vektörü veya noktayı temsil eder.

Matris Bu sınıf 3×3’lük bir matrisi temsil eder.

Transform Bu sınıf, 3 boyutlu uzayda 3×4’lük bir dönüşümü temsil eder.

Örnekler #


Örnek: Bir malzemenin rengini değiştirmek ve bir düğümü taşımak #

Bu örnek komut dosyası, sahnedeki ilk düğümün malzemesinin rengini değiştirir (orijinal malzemenin Lambert olduğunu varsayarak) ve düğümü bir birim yukarı taşır.

from vray.utils import *
l=findByType(“Node”) # Get all Node plugins
p=l[0].get(“material”) # Get the material of the first node
brdf=p.get(“brdf”) # Get the BRDF for the material
brdf.set(“color_tex”, Color(1.0, 0.0, 0.0)) # Set the BRDF color to red
t=l[0].get(“transform”) # Get the transformation for the first node
t.offs+=Vector(0.0, 1.0, 0.0) # Add one unit up
l[0].set(“transform”, t) # Set the new transformation


Örnek: Mesh’leri Alt Bölme Yüzeylerine Dönüştürme #

Bu örnek, sahnedeki tüm normal ağları alt bölüm yüzeylerine nasıl dönüştüreceğinizi gösterir.

from vray.utils import *
def smooth(geom, maxSubdivs = None, edgeLength = None):
subdiv = create(‘GeomStaticSmoothedMesh’, geom.name() + ‘@subdivGeometry’) # Create a smoothed mesh plugin
subdiv.set(‘mesh’, geom) # Set the base geometry for the subdivision to be the original mesh plugin
nodes = findByType(‘Node’) # Get a list of all nodes
for node in nodes:
if node.get(‘geometry’) == geom: # If a node references the original geometry…
node.set(‘geometry’, subdiv) # …replace it with the subdivided one
if maxSubdivs is not None: # Set the max. subdivs if specified
subdiv.set(‘use_globals’, False)
subdiv.set(‘max_subdivs’, maxSubdivs)
if edgeLength is not None: # Set the max. edge length if specified
subdiv.set(‘use_globals’, False)
subdiv.set(‘edge_length’, edgeLength)
p = findByType(‘GeomStaticMesh’) # Find all mesh plugins
for geom in p: # Replace each mesh plugin with a smoothed one
smooth(geom)


Örnek: Sarmal Oluşturmak İçin İlk Düğümün Oluşturulması #

Bu örnek, sahnedeki ilk düğümü bir sarmal oluşturacak şekilde birkaç kez tekrarlar.

from vray.utils import *
import math
geomNodes = findByType(‘Node’) # Get all Node plugins
sp = geomNodes[0] # The first node
geom = sp.get(‘geometry’) # The geometry of the first node
r = 12 # helix radius
n = 20 # number of objects per helix turn
m = 3 # number of helix turns
h = 0.5 # height difference between objects on the helix
for i in range(n * m):
d = sp.duplicate(‘sphereNode’ + str(i)) # Create a copy of the first scene node
tr = d.get(‘transform’) # Get the transformation matrix
tr.offs += Vector(r * math.cos(i * 2 * 3.14159 / n), i * h, r * math.sin(i * 2 * 3.14159 / n)) # Add an offset according to the helix formula
d.set(‘transform’, tr) # Set the new transformation


Örnek: Malzemelerin Dışa Aktarılması ve Değiştirilmesi #

Bu örnek, çeşitli dokuları ve malzemeleri dışa aktarır ve bir nesnenin malzemesini değiştirir.

from vray.utils import *
lambert = exportMaterial(‘lambert1’) # Export lambert1 material
checker = exportTexture(‘checker1’) # Export checker1 texture
cloth = exportTexture(‘cloth1’) # Export cloth1 texture
brdf = lambert.get(‘brdf’) # Get the ‘lambert1@material’ plugin
brdf.set(‘transparency_tex’, checker.output(‘color’)) # Set the transparency_tex parameter of the brdf
brdf.set(‘color_tex’, cloth) # Set the color_tex parameter of the brdf
planeNode = Plugin(‘pPlaneShape1@node’) # Get the plane node
planeNode.set(‘material’, lambert) # Set the material of the plane


Örnek: Birkaç Sahnenin İçeriğini Birleştirme #

Bu örnek, çeşitli sahnelerin içeriklerini bir araya getiriyor ve yeni oluşturulan eklentilerden bazılarını kullanıyor.

from vray.utils import *
addSceneContent(‘blinn.vrscene’, ‘basic_’) # Create all plugins in this scene file and prepend ‘basic_’ to the names of all plugins
addSceneContent(‘vraymtl.vrscene’) # Create all plugins in this scene file and use the original names
blinn = Plugin(‘basic_blinn1@material’) # Get the blinn material from the first added scene
vraymtl = Plugin(‘VRayMtl1@material’) # Get the V-Ray material from the second added scene
nodes = findByType(‘Node’) # Find all nodes in the scene
# Change the materials of some of the nodes
nodes[0].set(‘material’, blinn)
nodes[1].set(‘material’, vraymtl)


Örnek: Parametrelerin Değiştirilmesi #

Bu örnek, daha karmaşık bir parametrenin değerinin nasıl değiştirileceğini göstermektedir. Örneğin,  SettingsLightLinker  eklentisinin ignored_lights parametresi, çeşitli alt eklenti listelerinden oluşan bir listedir. Her listedeki ilk eklenti bir ışık eklentisidir ve geri kalan eklentiler geometri düğümleridir. Parametre şu şekilde değiştirilebilir:

from vray.utils import *
lightLinker = findByType(‘SettingsLightLinker’)[0] # Get the SettingsLightLinker plugin
directLight = findByType(‘MayaLightDirect’)[0] # Get the first directional light
spotLight = findByType(‘LightSpot’)[0] # Get the first spot light
nodes = findByType(‘Node’) # Get all geometry nodes in the scene
param = [[directLight, nodes[0], nodes[1]], [spotLight, nodes[2]]] # Just create a list of lists
lightLinker.set(“ignored_lights”, param)

Tarafından desteklenmektedir BetterDocs

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir