View Categories

Python ile Çevrilmiş V-Ray Sahnesine Erişim

10 dakika okuma

Bu sayfa, V-Ray sahne erişimi Python API’si hakkında bilgi vermektedir.

 

Genel Bakış #


V-Ray sahne erişim Python API’si, V-Ray for Maya ç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 Maya’daki temsilinden oldukça farklı olabileceğini unutmayın. Bu nedenle, V-Ray’in çeşitli Maya yapılarını nasıl çevirdiği hakkında biraz bilgi gerekebilir. V-Ray for Maya tarafından dışa aktarılan .vrscene dosyalarını incelemek en iyisi olacaktır.

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

Çeviri sonrası ç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. Şu anda, bir animasyon işlenirken, betik yalnızca bir kez, herhangi bir kare işlenmeden önce çalıştırılır.

Çeşitli komut dosyası erişim türleri hakkında daha fazla bilgi için Komut Dosyası Oluşturma sayfasına bakın.


 

Kullanıcı Arayüzü Yolu : ||Render Ayarları penceresi|| > Genel sekmesi MEL/Python geri çağırma işlevleri açılır menüsü

Kullanılabilir Python Fonksiyonları ve Sınıfları #


Tüm Python fonksiyonları ve sınıflarının bildirimleri (ve bazı durumlarda uygulamaları) C:\Program Files\Autodesk\Maya20xx\vray\scripts\vray klasöründe mevcuttur.

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 ada sahip 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)  – Maya 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)  – Maya 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 mevcut 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.

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ır.

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.

EklentiÇıktısı #

Bu sınıf, bir V-Ray eklentisinin çıkış parametresine yapılan bir referansı temsil eder. Bir eklenti başka bir eklentinin çıkış 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.

Dönüştür #

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

 

V-Ray Eklentisi Parametreleri Referansı #


V-Ray for Maya kurulumunda tüm V-Ray eklentilerinin listesini ve ilgili parametrelerini kısa açıklamalarıyla birlikte bulabilirsiniz:

C:\Program Files\Autodesk\Maya20xx\vray\PluginDoc

Burada Maya20xx, yüklü Maya sürümünü ifade etmektedir.

Örnekler #


 

Örnek: Sahnedeki tüm materyalleri gri renkle değiştirmek #

Bu örnek, sahnedeki tüm nesnelerin malzemelerini gri, dağınık bir malzeme ile değiştirir.

 

from vray.utils import *
# create a diffuse BRDF that will be used for override
diffuseBRDF=create(“BRDFDiffuse”, “_overrideBRDF”)
diffuseBRDF.set(“color”, Color(0.5, 0.5, 0.5))
# create a material for the BRDF; techically it’s possible to
# assign BRDFs directly to nodes, but going through materials is
# preferred.
diffuseMtl=create(“MtlSingleBRDF”, “_overrideMtl”)
diffuseMtl.set(“brdf”, diffuseBRDF)
nodes=findByType(“Node”) # Get all Node plugins
for node in nodes:
node.set(“material”, diffuseMtl)

 


Örnek: Hafifçe Döndürülmüş Dikdörtgen Şeklinde Bir Işık Oluşturma #

Bu örnek, hafifçe döndürülmüş bir yöne sahip dikdörtgen bir ışık oluşturur.

 

from vray.utils import *
import math
ry=math.radians(-90)
rx=math.radians(40)
# Create a matrix to rotate around the Y axis
rotYmat=Matrix(Vector(math.cos(ry), 0, -math.sin(ry)),
Vector(0, 1, 0),
Vector(math.sin(ry), 0, math.cos(ry)))
# Create a matrix to rotate around the X axis
rotXmat=Matrix(Vector(1, 0, 0),
Vector(0, math.cos(rx), -math.sin(rx)),
Vector(0, math.sin(rx), math.cos(rx)))
# Compose the final matrix
rotMat=rotYmat*rotXmat
# Create the rectangle light
light=create(“LightRectangle”, “newLight”)
light.set(‘transform’, Transform(rotMat, Vector(0, 2, 0)))

 


 

Ö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)

 

 


 

Örnek: Bir Eklenti Çıkışını Bağlayın #

Bu örnek, bir eklentiden belirli bir çıktıyı nasıl alacağınızı ve bunu başka bir eklentinin parametresine girdi olarak nasıl kullanacağınızı göstermektedir.

Öncelikle, sahnedeki bir nesnenin adını bildiğimizi varsayıyoruz. Önce materyalini, sonra materyalin BRDF’sini, ardından BRDF’nin difüz dokusunu alıyoruz. BRDF’nin difüz dokusunu başka bir renkle çarptığımız bir TexAColorOp doku eklentisi oluşturuyoruz. Çarptığımız ikinci renk de başka bir doku referansı olabilir. Son olarak, TexAColorOP’un ‘ürün’ çıktısını BRDF’nin difüz girdisi olarak kullanıyoruz. Herhangi bir eklentinin özel çıktısı aynı şekilde kullanılabilir.

from vray.utils import *
# Assuming an object pPlaneShape1@node has a VRayMtl assigned
# Get the material’s diffuse texture and pass it through a TexAColorOp
# Create a TexAColorOp plugin
# Multiply the texture by a color inside TexAColorOp
# Get the ‘product’ output from TexAColorOp and use it as the diffuse input in the VRayMtl
node = findByName(‘pPlaneShape1@node’)[0] # Find the node by name
node_mtl = node.get(‘material’) # Get the node’s material
node_brdf = node_mtl.get(‘brdf’) # Get the material’s brdf to reach the BRDFVRayMtl plugin
diffuseTex = node_brdf.get(‘diffuse’) # Get the diffuse texture of BRDFVRayMtl
colorOp = create(‘TexAColorOp’, ‘TexAColorOp1’) # Create a TexAColorOp texture
colorOp.set(‘color_a’, diffuseTex) # Set the VRayMtl’s diffuse texture as color_a
colorOp.set(‘color_b’, Color(1.0, 0.1, 0.1)) # Set a Color() as color_b
node_brdf.set(‘diffuse’, colorOp.output(‘product’)) # Set the ‘product’ output of TexAColorOp as the diffuse input of BRDFVRayMtl
# Similarly, we can get the ‘sum’ or any other output
# node_brdf.set(‘diffuse’, colorOp.output(‘sum’))

 

 


 

Tarafından desteklenmektedir BetterDocs

Bir yanıt yazın

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