V-Ray Interactive, render işlemi başladıktan sonra sahne tanımındaki değişiklikleri ele alır ve görüntüyü anında yeniden render ederek görüntü kalitesini kademeli olarak iyileştirir. Bu nedenle, sahnenin sık sık değiştirildiği ve görsel geri bildirimin gerekli olduğu kullanım durumları için bu render modu tercih edilir. Üretim moduna göre biraz daha az verimlidir, bu nedenle son render işlemleri ve özellikle dağıtılmış render işlemleri için üretim modu tercih edilir.
Etkileşimli motor (dahili olarak RTEngine olarak adlandırılır) GPU ve CPU işlemeyi destekler. GPU işleme bir sonraki bölümde ele alınacaktır. VRayRenderer nesnesi oluşturulurken varsayılan olarak etkileşimli CPU modu kullanılır. Kamera yakınlaştırmasını değiştiren kısa bir örnek:
# the default mode is Interactive (CPU)
with vray.VRayRenderer() as renderer:
renderer.load('cornell_new.vrscene')
# get the camera plugin instance
cam = renderer.classes.RenderView.getInstanceOrCreate()
renderer.startSync()
for i in range(5):
# FoV is in radians. Reduce it a bit to zoom in.
cam.fov = cam.fov - 0.1
# let it render for a few seconds
renderer.waitForRenderEnd(10000)
VRayInit init(NULL, true);
VRayRenderer renderer; // the default mode is Interactive (CPU)
renderer.load("cornell_new.vrscene");
// get the camera plugin instance
RenderView cam = renderer.getInstanceOrCreate<RenderView>();
renderer.startSync();
for (int i = 0; i < 5; ++i) {
// FoV is in radians. Reduce it a bit to zoom in.
cam.set_fov(cam.get_fov() - 0.1f);
// let it render for a few seconds
renderer.waitForRenderEnd(10000);
}
// the default mode is Interactive (CPU)
using (VRayRenderer renderer = new VRayRenderer())
{
renderer.Load("cornell_new.vrscene");
// get the camera plugin instance
RenderView cam = renderer.GetInstanceOrCreate<RenderView>();
renderer.StartSync();
for (int i = 0; i < 5; ++i) {
// FoV is in radians. Reduce it a bit to zoom in.
cam.Fov = cam.Fov - 0.1;
// let it render for a few seconds
renderer.WaitForRenderEnd(10000);
}
}
var renderer = vray.VRayRenderer(); // the default mode is Interactive (CPU)
renderer.load('cornell_new.vrscene', function(err) {
if (err) throw err;
// get the camera plugin instance
var cam = renderer.classes.RenderView.getInstanceOrCreate();
renderer.startSync(); // blocking Node.js, but ok for a small scene
for (int i = 0; i < 5; ++i) {
// FoV is in radians. Reduce it a bit to zoom in.
cam.fov = cam.fov - 0.1;
// let it render for a few seconds
renderer.waitForRenderEnd(10000);
}
renderer.close();
});
Tekrar belirtmek gerekirse, örnek kodda bazı olayları göz ardı ediyoruz ve bunları Olaylar dersinde ele alacağız .
Değişiklikleri kaydetme #
Varsayılan davranış, nesne ekleme, silme veya parametre değişikliği gibi sahne değişikliklerini hemen uygulamaktır. Bu, etkileşimli RTEngine’in örneklemeyi durdurmasına, sahneyi değiştirmesine, eski örneklerini ve şimdiye kadarki görüntüsünü atmasına ve tekrar örneklemeye başlamasına neden olur. Bu, hızlı test kodları için uygundur, ancak aynı anda birden fazla nesne ve özelliklerini oluşturan bir kodunuz varsa, bu oldukça verimsiz olabilir. Bunu, autoCommit VRayRenderer özelliğiyle devre dışı bırakabilirsiniz. Bunu istediğiniz zaman değiştirebilirsiniz. Otomatik kaydetmeyi devre dışı bıraktığınızda, birikmiş değişikliklerinizi uygulamak için commit() işlevini manuel olarak çağırmanız gerekir. Bu şekilde, verimli değişiklik grupları oluşturabilirsiniz.
V-Ray ekibi, çeşitli sahne değişikliklerinin doğrudan çalışmasını sağlamaya çalışır, ancak RTEngine’in bazı dahili verileri güncellemesi gerektiğini algılayamadığı ve değişikliğin görüntüde görünmeyebileceği durumlar vardır. Bu nadirdir, ancak böyle bir sorunla karşılaşırsanız, değişikliğin görünür hale gelip gelmediğini görmek için render motorunu durdurup yeniden başlatmayı deneyin. Görünmüyorsa, sorun başka bir yerdedir. Ancak çalışıyorsa, yeniden başlatmayı önlemek için geçici bir çözüm olarak ilgili eklentileri yeniden oluşturmak ve yeniden bağlamak için kodunuzu değiştirmeniz gerekebilir.
with vray.VRayRenderer() as renderer:
renderer.load('cornell_new.vrscene')
# Disable automatic applying of changes. Default value is true.
# This makes it possible to apply long list of changes at once instead of restarting the renderer on each of them
renderer.autoCommit = False
renderer.startSync()
# Create a LightOmni plugin instance (NOT applied immediately)
light = renderer.classes.LightOmni()
# Set light properties.
light.color = vray.AColor(0, 0, 1)
light.intensity = 60000
light.shadowRadius = 40.0
# Wait until rendering has finished or 5s have elapsed.
renderer.waitForRenderEnd(5000)
# Update field of view value (NOT applied immediately)
renderer.plugins.renderView.fov = 1.5
# Remove a node from the scene (NOT applied immediately)
del renderer.plugins['Sphere0Shape1@node']
# Apply all 3 changes at once.
renderer.commit()
# Wait for rendering to end.
renderer.waitForRenderEnd()
VRayInit init(NULL, true);
VRayRenderer renderer;
renderer.load("cornell_new.vrscene");
// Disable automatic applying of changes. Default value is true.
// This makes it possible to apply long list of changes at once instead of restarting the renderer on each of them
renderer.setAutoCommit(false);
renderer.startSync();
// Create a LightOmni plugin instance (NOT applied immediately)
LightOmni light = renderer.newPlugin<LightOmni>();
// Set light properties.
light.set_color(AColor(0.0, 0.0, 1.0));
light.set_intensity(60000);
light.set_shadowRadius(40.0);
// Wait until rendering has finished or 5s have elapsed.
renderer.waitForRenderEnd(5000);
// Update field of view value (NOT applied immediately)
renderer.getInstanceOrCreate<RenderView>().set_fov(1.5);
// Remove a node from the scene (NOT applied immediately)
renderer.deletePlugin("Sphere0Shape1@node");
// Apply all 3 changes at once.
renderer.commit();
// Wait for rendering to end.
renderer.waitForRenderEnd();
Son koşullar #
Etkileşimli görüntülemenin durması ve karenin tamamlanmış sayılması için üç olası koşul vardır. Bunların hepsi VRayRenderer yöntemleri/özellikleri aracılığıyla ayarlanır:
-
Zaman (VRayRenderer’daki interactiveTimeout ayarlayıcısı)
-
Örnekleme geçişlerinin sayısı (VRayRenderer’daki interactiveSampleLevel ayarlayıcısı)
-
Elde edilen gürültü seviyesi, diğer adıyla gürültü eşiği (VRayRenderer’daki interactiveNoiseThreshold ayarlayıcısı)
Bu koşullardan herhangi biri karşılandığında, render işlemi durur. Her biri, asla gerçekleşmemesi için 0 değeriyle sonsuza ayarlanabilir. VRayRenderer nesnesinin, bir sonlandırma koşulu karşılandığında render işleminin oturumunu kapatmasını engelleyen keepInteractiveRunning adlı bir bayrağı vardır . Bu bayrak ayarlanmışsa (varsayılan olarak ayarlanmamıştır), örnekleme duracak ve render işlemi boşta kalacaktır (‘RENDERING_AWAITING_CHANGES’ olarak adlandırılan render durumu), ancak herhangi bir sahne değişikliğinde tekrar örneklemeye başlayacaktır. Aksi takdirde, render işlemini tekrar başlatmanız ve başlatılmasını beklemeniz gerekecektir.
Örnekleme işlemi, pause() yöntemiyle manuel olarak da duraklatılabilir. Bu, işlem kaynaklarınızı serbest bırakır ancak belleğinizi etkilemez. Duraklatıldığında sahne değişiklikleriyle işleme devam edilmez, yalnızca resume() yöntemiyle devam ettirilebilir.
with vray.VRayRenderer() as renderer:
renderer.load('cornell_new.vrscene')
# Don't quit interactive rendering even if timeout or noise threshold are reached. Default value is False.
renderer.keepInteractiveRunning = True
# Maximum paths per pixel for interactive mode. Set a low sample level to complete rendering faster.
# The default value is unlimited. We have to call this *after* loading the scene.
renderer.setInteractiveSampleLevel(5)
# Increase noise threshold so that the rendering completes sooner.
renderer.setInteractiveNoiseThreshold(0.1)
renderer.startSync()
# Wait until rendering has finished or 5s have elapsed.
renderer.waitForRenderEnd(5000)
# Update field of view value
renderer.plugins.renderView.fov = 1.5
# Wait for rendering to end.
renderer.waitForRenderEnd()
VRayInit init(NULL, true);
VRayRenderer renderer;
renderer.load("cornell_new.vrscene");
// Don't quit Interactive rendering even if timeout or noise threshold are reached. Default value is false.
renderer.setKeepInteractiveRunning(true);
// Maximum paths per pixel for interactive mode. Set a low sample level to complete rendering faster.
// The default value is unlimited. We have to call this *after* loading the scene.
renderer.setInteractiveSampleLevel(5);
// Increase noise threshold so that the rendering completes sooner.
renderer.setInteractiveNoiseThreshold(0.1f);
renderer.startSync();
// Wait until rendering has finished or 5s have elapsed.
renderer.waitForRenderEnd(5000);
// Update field of view value
renderer.getInstanceOrCreate<RenderView>().set_fov(1.5);
// Wait for rendering to end.
renderer.waitForRenderEnd();
Parametreler #
Etkileşimli motor seçenekleri SettingsRTEngine bölümünde bulunabilir . “cpu_*” olarak adlandırılanlar hariç, diğer seçenekler Etkileşimli GPU için de geçerlidir:
-
trace_depth – Kullanımdan kaldırıldı, bunun yerine SettingsOptions::mtl_maxDepth kullanın . Yansımalar ve kırılmalar için hesaplanacak maksimum sekme sayısını temsil eder.
-
gi_depth – Kaba kuvvet dolaylı aydınlatma için yansıma sayısı. Diğer GI ayarları (örneğin GI’nin etkin veya devre dışı olup olmadığı) SettingsGI eklentisinden alınır .
-
cpu_bundle_size – Birlikte işlenen ışın sayısını kontrol eder. Daha küçük değerler etkileşimi artırabilir. Geçerli bir nedeniniz yoksa bu değeri değiştirmeniz önerilmez.
-
cpu_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, GI ile oluşturmanın en başından itibaren görüntü 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.
-
Tutarlı izleme – GI/yansımalar/kırılmalar vb.nin tutarlı izlenmesini etkinleştirmek için True değerini seçin. Varsayılan değer false’tur.
-
Stereo modu – Yan yana stereo görüntülemeyi etkinleştirmek için True değerini girin. Varsayılan değer false’tur.
-
stereo_eye_distance – Stereo mod için iki kamera arasındaki mesafe.
-
stereo_focus – Odaklama modu (0 – yok, 1 – döndürme, 2 – eğme)
-
progressive_samples_per_pixel – Etkinleştirildiğinde, V-Ray Interactive görüntüyü daha düşük bir cpu/gpu_samples_per_pixel değeriyle işlemeye başlar ve ardından kademeli olarak artırır. Bu, daha iyi etkileşim için daha hızlı ilk görüntü güncellemeleri sağlar.
-
Alt örnekleme – Alt örneklemeyi kullanmak için sıfırdan farklı bir değer, aksi halde 0. N değeri, her boyutta 1/(2^N) başlangıç çözünürlüğü anlamına gelir. Etkinleştirildiğinde, V-Ray Interactive ilk önizlemeyi hızlandırmak için görüntüyü daha düşük bir çözünürlükte işlemeye başlar. Daha sonra görüntü nihai çözünürlüğünde işlenir.
-
disable_render_elements – Eğer true ise, V-Ray Interactive yalnızca RGBA üretir. Varsayılan değer false’tur, ancak render öğeleri yine de açıkça eklenmelidir.
-
max_render_time – Görüntüyü iyileştirme için maksimum süreyi (dakika cinsinden) belirtir (0 = sonsuz). Bu, oluşturucu nesnesinin yapıcı metodu aracılığıyla ayarlanır.
-
max_sample_level – Görüntüyü iyileştirmek için piksel başına maksimum örnek sayısını belirtir (0 = sonsuz). Bu seçenek, farklı render’lar için tutarlı kalite sağlamak istediğinizde kullanışlıdır. Bu, render nesnesinin yapıcı metodu aracılığıyla ayarlanır.
-
noise_threshold – Bir pikselin iyileştirilmesinin ne zaman durdurulacağını belirleyen bir eşik değeri. Daha yüksek değerler görüntüde daha fazla gürültüye izin verir. Daha düşük değerler gürültüyü azaltmaya çalışır. 0,0 değeri eşiği devre dışı bırakır ve örnekleme gürültüyle sınırlı değildir. Önerilen değer aralığı 0,2-0,001’dir. Bu, oluşturucu nesnesinin yapıcı metodu aracılığıyla ayarlanır.
-
max_draw_interval – Kısmi görüntü güncellemeleri arasındaki maksimum süre (milisaniye cinsinden). Bu varsayılan olarak devre dışıdır (0’a ayarlanmıştır). Etkinleştirildiğinde, görüntü güncellemeleri en fazla bu zaman aralığında gerçekleşir, ancak çerçevenin yalnızca bir kısmı yeni örnekler içerir.
-
min_draw_interval – Görüntü güncellemeleri arasındaki minimum süre (milisaniye cinsinden). Bu varsayılan olarak devre dışıdır (0’a ayarlanmıştır). Etkinleştirildiğinde, bu aralık dolmadan önce görüntü güncellemeleri yayınlanmayacaktır. Bu, işlem yükünü azaltmaya yardımcı olabilir.
-
interactive – Etkileşimli modda yalnızca üretim ortamına özgü bazı özellikleri devre dışı bırakmak için kullanılan bayrak. Varsayılan değer false’tur.
Etkileşimli modda SettingsImageSampler’ın dikkate alınmadığını unutmayın .
Geri bildirim hızı #
Yukarıdaki ayarlardan bazıları, görüntü güncellemelerinin ulaşma hızını artırmak için kullanılabilir; ancak bu, düşük kalite veya kısmi görüntü kalitesi pahasına gerçekleşir:
-
En hızlı ilk sonuç için, alt örneklemeyi etkinleştirin . Bu size bloklu bir görüntü verecektir, ancak kullanıcı çok kısa sürede bir sonuç görecektir.
-
Alt örnekleme aşamasından sonra, cpu_samples_per_pixel parametresi tüm görüntünün ne sıklıkla güncelleneceğini tanımlar. Çoğu durumda bunu 1 olarak ayarlamak yeterli olacaktır. Daha büyük değerler biraz daha hızlı bir sonuca yol açabilir.
-
Bir uzlaşma olarak, daha büyük bir değer ayarlayabilir, ancak kullanıcının değişiklik yapma ve örnekleme işlemini kesme olasılığının daha yüksek olduğu başlangıçta sık güncellemeler olmasını sağlamak için progressive_samples_per_pixel’i de etkinleştirebilirsiniz.
-
max_draw_interval parametresi, piksel başına 1 örnekleme yapıldığında bile güncellemelerin uzun sürdüğü yoğun sahneler ve yüksek çözünürlükler için kullanılabilir.
-
Öte yandan, sahne çok aydınlıksa ve işlem donanımı güçlü ise, min_draw_interval ile çok fazla güncellemeden ve bunların getirdiği ek yükten kaçınabilirsiniz .
