Burada, App SDK ve V-Ray dinamik kütüphanelerinin doğru şekilde nasıl bağlanıp yükleneceğini ele alacağız.
Windows için .dll dosyaları olarak adlandırdığımız şeyleri , Linux ve macOS için lib.so veya lib*.dylib olarak düşünün .
Çeşitli aşamalarda yüklenmesi gereken dört DLL dosyası veya grubu bulunmaktadır:
-
Ciltleme kütüphanesi
-
Ana SDK kütüphanesi – VRaySDKLibrary.dll
-
Görüntü işleme çekirdeği – vray.dll (aynı dizinde birkaç üçüncü taraf bağımlılık DLL’si ile birlikte)
-
plugins/ alt dizinindeki V-Ray render eklenti kütüphaneleri
Çoğu durumda bu işlem yalnızca tek bir kod satırı ile yapılır, ancak API ek ayarlar aracılığıyla özel dosya düzenlerine olanak tanır.
C++ #
Bağlantı DLL’si bulunmamaktadır çünkü bağlantı yalnızca başlık dosyalarından oluşmaktadır. Aşağıdaki alt bölümlerde açıklanan ana SDK kütüphanesini bağlamanın iki yolu vardır:
Derleme sırasında VRaySDKLibrary’yi bağlayın. #
Bu durumda, Windows’ta derleme yaparken VRaySDKLibrary.lib içe aktarma kütüphanesini, Linux/macOS’ta ise -lVRaySDKLibrary bağlayıcı anahtarını kullanmanız gerekir. Uygulamayı çalıştırmadan önce, dinamik kütüphanelerin yüklenmesi için VRaySDKLibrary dinamik kütüphanesinin sistem yollarında bulunması gerekir: Windows’ta PATH, Linux’ta LD_LIBRARY_PATH, macOS’ta DYLD_LIBRARY_PATH. Ek önişlemci makroları tanımlamanıza gerek yoktur.
Çalışma zamanında VRaySDKLibrary’yi bağlayın #
Sistem arama yollarını değiştirmekten kaçınmak için kütüphaneyi çalışma zamanında dinamik olarak yükleyebilirsiniz. Kaynak dosyalarınızdan yalnızca birinin vraysdk.hpp dosyasını dahil etmeden önce VRAY_RUNTIME_LOAD_PRIMARY makrosunu tanımlaması gerekir . Geri kalan kaynakların ise başlık dosyasını dahil etmeden önce VRAY_RUNTIME_LOAD_SECONDARY makrosunu tanımlaması gerekir . VRAY_RUNTIME_LOAD_PRIMARY kaynak dosyası, uygulamanın ömrü boyunca geçerli olacak bir VRayInit örneği oluşturmalıdır. Bu örnek, dosya adı da dahil olmak üzere VRaySDKLibrary.dll’ye giden isteğe bağlı bir yol alır.
VRayInit’in çalışma zamanı yükleme sürümü, hataları teşhis etmek için getSDKLibraryErrorString() yöntemini de sağlar.
.Açık #
.Net bağlaması, uygulamanızın referans vermesi gereken iki derlemede uygulanır: VRaySDK.Net.dll ve VRaySDK.Net.Plugins.dll . Somut Eklenti sınıflarına ihtiyacınız yoksa ikinci derleme atlanabilir, ancak genellikle gereklidir.
Python #
Python bağlayıcısı, Windows’ta vray.pyd veya Linux ve macOS’ta vray.so dosyasında uygulanmıştır . Bu dosya ya site-packages dizininize kurulmalı ya da konumu PYTHONPATH ortam değişkenine eklenmelidir.
Node.js #
Node.js bağlantısı VRay.node ikili dosyasında uygulanmıştır, ancak birkaç yardımcı fonksiyon ekleyen vray.js betiği aracılığıyla yüklenmelidir .
VRaySDKLibrary çalışma zamanı yükleme: .Net, Python, Node.js #
VRaySDKLibrary.dll sistem PATH’inde yoksa, statik bir yöntem kullanarak arama yoluna ekleyebilirsiniz. Bunu, diğer Uygulama SDK yöntemlerini çağırmadan önce yapmanız gerekir.
.Açık
Globals.SetSDKLibraryPath(search_path) kullanın .
Python ve Node.js
Vray modülünü içe aktardığınızda veya çağırdığınızda, VRaySDKLibrary.dll dosyasını yüklemeye çalışacaktır. Bu işlem başarısız olabilir. Arama yolunu belirtmek ve VRaySDKLibrary.dll dosyasının yeniden yüklenmesini zorlamak için `vray.setSDKLibraryPath(search_path)` işlevini çağırabilirsiniz . İşlev başarılı olduğunda ‘true’ değerini döndürür. `vray.getSDKLibraryErrorString()` işlevini çağırarak daha ayrıntılı bilgi alabilirsiniz .
V-Ray motoru #
Orijinal App SDK bin dizinindeki vray.dll ve diğer DLL’leri içeren dizinin sistem kütüphane arama yolunda (Windows’ta PATH, Linux’ta LD_LIBRARY_PATH, DYLD_LIBRARY_PATH) olması gerekir. VRAY_PATH ortam değişkeni alternatif bir konuma ayarlanabilir.
ÖNEMLİ : VRAY_PATH değişkeni, kullanıcının sisteminde başka bir V-Ray kurulumundan (örneğin V-Ray Standalone) ayarlanmış olabilir. Boş olacağına güvenmeyin! Uyumsuz DLL’lerin yüklenmesi nedeniyle çökmelere neden olabilir. Ayrıca PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH’in sistemdeki diğer V-Ray yollarını içermediğinden veya kendi yolunuzun en başta olduğundan emin olmalısınız.
Render eklentilerinin yüklenmesi şu şekilde gerçekleşir: 1. İsteğe bağlı RendererOptions::pluginLibraryPath parametresinden noktalı virgülle ayrılmış yollar içeren bir dize oluşturulur – bu genellikle boştur, ancak varsayılan değerlerin geçersiz kılınmasına olanak tanır. 2. VRAY_PATH ortam değişkeninin değeri “/plugins” ile eklenir ve bu listeye eklenir. Değişken ayarlanmamışsa, bunun yerine VRaySDKLibrary’nin yolu eklenir (yine “/plugins” ile). 3. Yol listesi, eklenti sınıflarını vray_*.dll veya libvray_*.so’dan yüklemek için V-Ray eklenti yöneticisine iletilir.
Özel V-Ray eklentileri #
Üçüncü taraf V-Ray render eklentileriniz (dokular, geometri veya herhangi bir şey) varsa, bunları ya aynı eklenti dizinine kopyalamalı ya da yukarıda açıklandığı gibi dizinlerini RendererOptions::pluginLibraryPath parametresine eklemelisiniz. Dosya adları, şablon vray_*.dll veya libvray_*.so ile eşleşmelidir .
GPU motoru #
RendererOptions ::pluginLibraryPath parametresi, rt_cuda.dll/so ve rt_opencl.dll/so kütüphaneleri vray.dll ve VRaySDKLibrary.dll’nin yanında varsayılan konumlarında bulunmuyorsa, bu kütüphaneleri içeren bir yola isteğe bağlı olarak ayarlanabilir.
C/C++ Çalışma Zamanı #
SDK’yı dağıttığınız yerde ilgili çalışma ortamının veya uyumlu bir çalışma ortamının mevcut olduğundan emin olmalısınız. Şu anda Uygulama SDK’sı şu şekilde oluşturulmaktadır:
-
Windows’ta Visual Studio 2017 çalışma zamanı (vcruntime140.dll, msvcp140.dll)
-
Linux üzerinde glibc 2.17
-
macOS SDK 10.9 (macOS x64)
-
macOS SDK 11.1 (macOS evrensel, macOS 10.14 ve üzeri sürümleri destekler)
Normal kullanım örneği #
# The directory containing the vray shared object - vray.pyd/so - should be present in the PYTHONPATH environment variable
import vray
renderer = vray.VRayRenderer()
// VRaySDK.Net.dll has a reference in the current .csproj
using VRay;
class Program {
static void Main(string[] args) {
VRayRenderer renderer = new VRayRenderer();
}
}
// vray.js is in node_modules with the rest of the files from the App SDK package
var vray = require('vray');
var renderer = vray.VRayRenderer();
Gelişmiş kullanım örneği #
// main.cpp
#define VRAY_RUNTIME_LOAD_PRIMARY
#include "vraysdk.hpp"
void main() {
// These paths are optional. Only pass them if it is necessary for your project
// You have to call this before any other API methods
VRay::VRayInit init("C:/some/path/VRaySDKLibrary.dll", true); // vray.dll should be here or on the OS path
VRay::RendererOptions options;
options.pluginLibraryPath = "C:/some/other/path";
VRay::VRayRenderer renderer(options);
}
------------------------
// other.cpp
#define VRAY_RUNTIME_LOAD_SECONDARY
#include "vraysdk.hpp"
// vray.js is in node_modules with the rest of the files from the App SDK package
var vray = require('vray');
// These paths are optional. Only pass them if it is necessary for your project
// You have to call this before any other API methods
vray.setSDKLibraryPath("/some/path"); // vray.dll should be here or on the OS path
var renderer = vray.VRayRenderer({ "pluginLibraryPath": "/some/other/path" });
Gereksiz DLL’leri kaldırma #
Uygulamanızın kurulum boyutunu küçültmek için ikili dosyalar klasörünü temizlemek isteyebilirsiniz. Eğer bu özelliklere asla ihtiyaç duymayacağınızdan eminseniz, oradaki bazı dosyaları silebilirsiniz:
-
plugins/vray_*.dll dosyalarının bazıları büyük ve potansiyel olarak kullanılmamaktadır: MtlMDL (üst dizindeki libvraymdl ve libvrayfreeimage ile birlikte), mtlvrmat, ptexbaker, phxshader (field3dio_vray ve openvdbio_vray ile birlikte), BRDFScanned, GeomBifrost, SphericalHarmonics, TexXSI, vrsceneloader (bu, sahneleri yerleştirmek için bir eklentidir, normal sahne yükleme işleviyle karıştırmayın).
-
GPU renderlamayı desteklemeyecekseniz rt_cuda.dll ve/veya rt_opencl.dll dosyalarını silebilirsiniz . vray_gpu_device_select uygulaması da GPU seçimi içindir.
-
bin /osl* ve bin/libosl* dosyaları yalnızca OSL materyalleri için gereklidir.
