Etkileşimli GPU işleme modları, neredeyse tüm görevleri GPU’ya bırakır ve RTX veya CUDA’dan yararlanır. Grafik kartları daha fazla saf işlem gücüne sahiptir, ancak bu gücü yalnızca görevler paralel olduğunda ve işlemler tüm veriler için aynı olduğunda tam olarak kullanabilirler. Bu, bir GPU işleme motoru uygularken farklı bir programlama yaklaşımı gerektirir. CPU’dan diğer büyük fark ise genellikle kullanılabilir belleğin birkaç kat daha küçük olmasıdır. Bu, özellikle baştan GPU işleme için tasarlanmamışlarsa, çok büyük ve karmaşık sahneler için GPU’ların kullanılabilirliğini sınırlayabilir.
Mimari farklılıklar nedeniyle V-Ray GPU ayrı bir render motorudur ve bu nedenle V-Ray’e kıyasla biraz farklı sonuçlar verebilir. Ayrıca GPU’daki global aydınlatma kapatılamaz.
GPU cihazlarındaki CUDA motoru, minimum 5.2* işlem gücüne sahip NVIDIA kartları gerektirir.
macOS’ta RTX desteklenmiyor (V-Ray GPU, macOS altında CUDA CPU aygıtlarıyla çalışır).
* CUDA işlem yeteneği ve kart referansı
Örnek #
Aşağıdaki kod, VRayRenderer’ın renderMode özelliğini ayarlayarak her iki modu da etkinleştirmek için kullanılabilir:
vray.VRayRenderer() ile renderer olarak:
renderer.renderMode = 'interactiveCuda' # veya 'interactiveOptix'
renderer.load('retro.vrscene')
oluşturucu.startSync()
# ...
VRayInit init(NULL, true);
VRayRenderer oluşturucu;
renderer.setRenderMode(VRayRenderer::RENDER_MODE_INTERACTIVE_CUDA); // veya VRayRenderer::RENDER_MODE_INTERACTIVE_OPTIX
renderer.load("retro.vrscene");
oluşturucu.senkronizasyonubaşlat();
// ...
(VRayRenderer renderer = new VRayRenderer()) kullanarak {
renderer.RenderMode = RenderMode.INTERACTIVE_CUDA; // veya RenderMode.INTERACTIVE_OPTIX
renderer.Load("retro.vrscene");
oluşturucu.Senkronizasyonu Başlat();
// ...
}
var oluşturucu = vray.VRayRenderer();
renderer.renderMode = 'interactiveCuda'; // veya 'interactiveOptix'
renderer.load('retro.vrscene', function(err) {
Eğer (hata) varsa, hata fırlat;
oluşturucu.senkronizasyonubaşlat();
// ...
});
Parametreler #
V-Ray GPU motoru için seçenekler SettingsRTEngine bölümünde bulunur ve çoğu önceki derste açıklananlarla aynıdır. Ancak GPU’ya özgü birkaç seçenek de mevcuttur:
-
gpu_bundle_size – Birlikte işlenen ışın sayısını kontrol eder. Daha küçük değerler etkileşimi artırabilir. Bu değeri 512’nin üzerine çıkarmak önerilmez.
-
gpu_samples_per_pixel – Bir görüntü geçişi sırasında her piksel için izlenen ışın sayısı. Değer ne kadar yüksek olursa, görüntü oluşturmanın en başından itibaren o kadar pürüzsüz olur, ancak etkileşim önemli ölçüde azalabilir ve görüntü güncellemeleri daha uzun aralıklarla gelir. Bu değeri artırmak ayrıca, DR’de oluşturma sunucularından istemci makineye aktarılan veri miktarını da azaltır.
-
low_gpu_thread_priority – Ekranla bağlantılı GPU’lardaki yükü azaltmak için bunu etkinleştirin. Bu, işletim sistemi arayüzünün daha hızlı yanıt vermesini sağlamalıdır. gpu_samples_per_pixel=1 ve gpu_bundle_size=64 (veya daha az) ile en iyi sonucu verir.
-
opencl_resizeTextures – GPU için doku aktarım modu. İsteğe bağlı mipmapping’in yalnızca etkileşimli olmayan modda kullanılabildiğini unutmayın. (0: Tam boyutlu dokular; 1: Dokuları yeniden boyutlandırma; 2: İsteğe bağlı mipmapping)
-
opencl_textureFormat – GPU’daki dokular için format (0 – kanal başına 32 bit kayan nokta; 1 – kanal başına 16 bit yarım kayan nokta, varsayılan; 2 – kanal başına 8 bit)
-
coherent_tracing – Etkinleştirildiğinde, V-Ray GPU, GPU’larda işleme hızını artırmak için benzer yönlerde ikincil ışınlar (GI, yansıma, kırılma) oluşturur. Bu, ışığın etrafta yansıdığı iç mekan sahnelerinde en etkili olur. Dezavantajı ise, daha fazla örnek toplanana kadar görüntüde başlangıçta bazı bozulmalar olmasıdır.
-
enable_bucket_sampler – 1 olarak ayarlanırsa, V-Ray GPU, SettingsImageSampler’daki örnekleyici türünü kontrol eder ve örnekleyici türü “bucket” ise oradaki ayarları kullanır. Varsayılan değer (0=aşamalı örneklemeyi kullan) şeklindedir.
-
out_of_core – Doğru olduğunda, V-Ray GPU çekirdek dışı kod yolu kullanılacaktır.
GPU cihazlarının seçimi #
Aşağıdaki örnek, hangi cihazlarla render işlemi yapılacağını nasıl seçebileceğinizi göstermektedir. Bunu örneğin, ekran için kullanılan GPU’yu devre dışı bırakmak veya bir OpenGL görüntüleme alanını çalıştırmak için kullanabilirsiniz. Ayrıca, ana GPU üzerindeki yükü azaltmak için low_gpu_thread_priority parametresini de kullanabileceğinizi unutmayın. Varsayılan olarak, mevcut tüm cihazlar kullanılacaktır.
std::vector<int> seçildi;
std::vector<ComputeDeviceInfo> devices = renderer.getComputeDevicesCurrentEngine();
// Seçilen cihazların indekslerini içeren bir liste geçirmemiz gerekiyor.
for (int index = 0; index < devices.size(); ++index) {
eğer (devices[index].totalMemoryMB > 4000)
seçili.geri_it(indeks);
}
bool setDevicesOk = renderer.setComputeDevicesCurrentEngine(selected);
List<int> selected = new List<int>();
ComputeDeviceInfo[] devices = renderer.GetComputeDevicesCurrentEngine();
// Seçilen cihazların indekslerini içeren bir liste geçirmemiz gerekiyor.
for (int index = 0; index < devices.Length; ++index) {
eğer (devices[index].TotalMemoryMB > 4000)
seçili.Ekle(indeks);
}
bool setDevicesOk = renderer.SetComputeDevicesCurrentEngine(selected);
Seçilen değişken = [];
var devices = renderer.getComputeDevicesCUDA(); // veya getComputeDevicesOptix()
// Seçilen cihazların indekslerini içeren bir liste geçirmemiz gerekiyor.
for (var index = 0; index < devices.length; ++index) {
eğer (devices[index].totalMemoryMB > 4000)
seçili.push(index);
}
var setDevicesOk = renderer.setComputeDevicesCUDA(selected); // veya setComputeDevicesOptix(selected)
“Hibrit” işleme (CUDA) #
V-Ray GPU CUDA, işlemcinizi öykünülmüş bir CUDA aygıtı olarak kullanmanıza olanak tanır. Aygıt listesinin ilk sırasında “C++/CPU” olarak görünür ve varsayılan olarak devre dışıdır. İşleme hızınızı artırmak için etkinleştirebilirsiniz. Hatta herhangi bir GPU olmadan bile kullanabilirsiniz. Bazı durumlarda, bu aygıtta V-Ray GPU ile işleme, aynı aygıtta “normal” V-Ray ile işlemeye göre daha hızlı olabilir. Bunun nedeni, GPU için daha basit kod yapısıdır. “Hibrit” işleme yaparken elde ettiğiniz sonuçlar, bir grafik kartındaki V-Ray GPU’dan elde edilen sonuçlarla aynıdır. Başka bir deyişle, normal CPU V-Ray motorundan aynı potansiyel farklılıklara ve aynı sınırlamalara sahiptir.
