View Categories

Gauss Sıçramaları

3 dakika okuma

giriiş #


Bu bölümde, Gauss Splatting’i ele alacağız. 3B Gauss Splatting, görüntülerden veya videolardan 3B bir sahne oluşturmak için kullanılan bir yöntemdir. Bir nesnenin her biri farklı bir açıdan çekilmiş birkaç fotoğrafını gerektirir. Gauss Splatting ile görüntüler, nesnenin ayrıntılı, üç boyutlu bir temsilini üretmek için harmanlanır. Sahneyi bir ağ koleksiyonu olarak göstermek yerine, Gauss splat sahneyi her noktasının 3B Gauss olduğu bir tür nokta bulutu olarak temsil eder.

Gauss dağılımları, sahneleriniz için gerçekçi bir ortam oluşturmanıza yardımcı olur.

Bu özellik henüz V-Ray GPU’da mevcut değil. 

Gaussian Splat Kullanımı #


3 boyutlu Gauss dağılımlarından oluşan bir bulutun ışın izlemesi, GeomGaussians adlı geometri kaynağı eklentisi aracılığıyla gerçekleştirilebilir .

Genişletilmiş Ortam olarak kullanılır #

Gauss dağılımlarının bir kullanım alanı, genellikle sahnenin fotoğraflarından veya videolarından oluşturulan bir ortamı temsil etmektir.

Geleneksel ortam haritalarına göre avantajları vardır; bunlar arasında doğru paralaks ve görüş açısına bağlı efektler ile Gauss dağılımlarının sahnedeki diğer nesneleri örtme yeteneği yer almaktadır.

Gaussian sıçramalarının V-Ray’de ortam olarak çalışabilmesi için, affect_matte_surfaces seçeneği etkinleştirilmeli ve casts_shadows seçeneği genellikle devre dışı bırakılmalıdır.

Daha fazla bilgi için bu örneğe bakın.

Diğer Mat Yüzeylerde #

Gaussian Splats’ın arka planın bir parçası olarak, yani arkalarında olsalar bile diğer mat nesnelerin üzerinde görünür şekilde oluşturulmasını sağlamak için, Gaussian splats parametrelerinden affect_matte_surfaces seçeneğini etkinleştirin .

Daha fazla bilgi için bu örneğe bakın.

Madde Nesneleri Olarak #

Gauss lekeleri aynı zamanda tutma (mat) nesneleri olarak da işlev görebilir; yani yansımalarda ve kırılmalarda doğru şekilde görünür ve sahnedeki diğer nesneleri gizler, ancak nihai görüntünün RGB ve alfa kanallarına katkıda bulunmazlar.

Bu işlem VRayObjectProperties eklentisi aracılığıyla gerçekleştirilebilir. Bir Gaussian splats nesnesine VRayObjectProperties atayın, matte_surface seçeneğini etkinleştirin ve alpha_contribution değerini -1.0 olarak ayarlayın. no_GI_on_other_mattes seçeneğinin etkinleştirildiğinden emin olun .

Bireysel Nesneler Olarak Kullanılır #

Gauss yansımaları, sahnedeki daha küçük bireysel nesneleri temsil etmek için de kullanılabilir. Bu durumda, affect_matte_surfaces seçeneği genellikle kapatılır ve casts_shadows seçeneği etkinleştirilir. İkincisi, Gauss yansımalarının sahnedeki diğer nesneler üzerinde uygun gölgeler oluşturabilmesi için gereklidir.

Aydınlatma ve yansımaların Gaussian splats nesnesine entegre edildiğini ve bu nedenle bu nesnelerin sahne aydınlatmasından etkilenmediğini unutmayın.

Daha fazla bilgi için örneklere bakın  .

Parametreler #

Aşağıdaki parametreler GeomGaussians eklentisinde yer almaktadır.


  • Dosya – Gaussian splats dosyasını yükler. Şu anda yalnızca .ply dosyaları  kabul edilmektedir.

  • flip_axis – 1 olarak ayarlandığında, X ekseni etrafında (-90) derecelik bir dönüş gerçekleştirir. 2 olarak ayarlandığında, Y ekseni etrafında 90 derecelik bir dönüş gerçekleştirir ve Y eksenini ters çevirir.

– Olduğu Gibi
– YZ Ekseni Üzerinde Döndür
– XZ Ekseni Üzerinde Döndür + Y Ekseni Üzerinde Çevir

  • scale  – Gauss eğrilerinin ölçeklerini büyütür ve küçültür. Örneğe bakın .

  • affect_camera – Gauss eğrilerinin kamera tarafından görülebilir olup olmayacağını belirtir. Örneğe bakın .

  • affect_shadows – etkinleştirildiğinde, Gauss yansımaları ışıklardan gelen gölgeleri engeller. Devre dışı bırakıldığında, Gauss yansımaları gölge ve GI ışınlarına karşı şeffaf hale gelir. Gauss yansımalarını ortam veya tek tek nesneler olarak kullanırken bu seçeneğin kapatılması önerilir. Örneğe bakın .

  • affect_reflections  – Gauss eğrilerinin yansımalarda görünür olup olmayacağını belirtir. Örneğe bakın .

  • affect_refractions  – Gauss yansımalarının kırılmalarda görünür olup olmayacağını belirtir. Örneğe bakın .

  • affect_matte_surfaces  – etkinleştirildiğinde, Gauss lekeleri mat yüzeylerin arka planının bir parçası olarak görünür. Bu özelliği, ortam olarak kullanılan Gauss lekeleri için etkinleştirmeniz ve tek tek nesneler olarak kullanılan Gauss lekeleri için devre dışı bırakmanız önerilir. Örneğe bakın .

  • rgb_color_space – Gaussian splats dosyasındaki verilerin renk uzayını belirtir.

– Varsayılan
– sRGB
– ACEScg
– RAW

  • Yoğunluk  – Gauss sıçraması için Renk çarpanını artırır veya azaltır.

  • Renk  – sıçrama efekti için bir filtre rengi belirtir. Varsayılan olarak, Renk beyazdır ve sıçrama efektini etkilemez. Örneğe bakın .


Örnek: ölçek #

Bu örnekte Gaussian Splat’in tek bir nesne olarak nasıl kullanıldığı gösterilmektedir – bu sahnedeki pembe flamingo yüzen nesne. Ölçek parametresi kullanılarak sahnedeki diğer nesneler gibi ölçeklendirilebilir.

ölçek = 0,5

ölçek = 1

ölçek = 1,5


Örnek: affect_camera #

Gaussian Splat nesnesi, sahnedeki diğer geometri nesneleri gibi, affect_camera seçeneği kullanılarak kameradan gizlenebilir .

affect_camera kapalı

affect_camera açık


Örnek: affect_reflections #

`affect_reflections` seçeneği, Gaussian Splat nesnesinin sahnedeki diğer nesnelere yansıyıp yansımayacağını kontrol eder.

affect_reflections kapalı

affect_reflections açık


Örnek: affect_refractions #

`affect_refractions` seçeneği , Gaussian Splat nesnesinin sahnedeki kırılma özelliklerine sahip diğer nesneler tarafından görülmesini sağlar.

 affect_refractions kapalı

 affect_refractions açık


Örnek: affect_shadows #

Bu örnek, pembe flamingonun affect_shadows seçeneği etkinleştirildiğinde nasıl gölgeler oluşturabildiğini ve etkinleştirilmediğinde ışığı engellemediğini göstermektedir.

affect_shadows kapalı

affect_shadows açık


Örnek: affect_matte_surfaces #

Bu örnekte, Gaussian Splat ortam olarak kullanılmıştır. Görüntüde düzleme gölge düşüren soldaki bina, bir Cosmos nesnesidir (ağ modeli).

`affect_matte_surfaces` seçeneği etkinleştirildiğinde , Gaussian Splat arka plan olarak kabul edilir ve yansıtıcı nesneden gölgeler alır.

 affect_matte_surfaces kapalı

 affect_matte_surfaces açık


Örnek: renk #

Her bir renderda kutu içinde gösterilen renk, orijinal Gaussian Splat difüz rengi için filtre olarak kullanılır.

Kod Örneği #


Aşağıdaki API ile bir entegratör, Gauss verilerini bir dosyadan veya GeomGaussians eklentisinden okuyabilir ve sınırlayıcı kutu, nokta bulutu veya başka bir yöntem kullanarak modelin önizlemesini oluşturabilir.

Bu örnekte kullanılan .vrscene dosyası , kurulum dizininizdeki /scenes/geom klasöründe bulunabilir .

# Python 2.7 ile uyumluluk.

from __future__ import print_function

# Vray paylaşımlı nesnesini içeren dizin şu olmalıdır:

# PYTHONPATH ortam değişkeninde bulunur.

# VRAY_SDK/python dizininden vray modülünü içe aktarmayı deneyin, eğer PYTHONPATH'te yoksa.

import sys, os

VRAY_SDK = os.environ.get('VRAY_SDK')

VRAY_SDK ise:

sys.path.append(os.path.join(VRAY_SDK, 'python'))

vray'i içe aktar

SCENE_PATH = os.path.join(VRAY_SDK, 'scenes', 'geom')

# Göreceli sahne kaynaklarını yükleyebilmek için işlem çalışma dizinini SCENE_PATH olarak değiştirin.

os.chdir(SCENE_PATH)

# Varsayılan seçeneklerle bir VRayRenderer örneği oluşturun.

# `with` bloğundan sonra oluşturucu otomatik olarak kapatılır.

vray.VRayRenderer() ile renderer olarak:

# Basit bir günlük kaydı geri çağırma işlevi kaydedin. Hata ayıklama için her zaman faydalıdır.

def dumpMsg(renderer, message, level, instant):

if level == vray.LOGLEVEL_ERROR:

print("[HATA]", mesaj)

elif level == vray.LOGLEVEL_WARNING:

print("[Uyarı]", mesaj)

elif level == vray.LOGLEVEL_INFO:

print("[bilgi]", mesaj)

# Test amaçlı olarak yorum satırını kaldırın, ancak gerçek kodda bunları göz ardı etmek isteyebilirsiniz.

#else: print("[debug]", message)

renderer.setOnLogMessage(dumpMsg)

# Sahneyi dosyadan yükle.

renderer.load("gaussians_flowers.vrscene")

Aşağıdaki API ile Gauss verileri okunabilir ve modelin önizlemesi yapılabilir.

# Sınır kutusu, nokta bulutu veya başka bir yöntem kullanılarak oluşturulabilir

previewBoundingBox, positions, colors = vray.GeomUtils.readGaussianData(renderer.plugins["flowers"])

numPrimitives = len(positions)

for i in range(numPrimitives):

konum = pozisyonlar[i]

renk = renkler[i]

# Oluşturma işlemine başla.

oluşturucu.startSync()

# Oluşturma işleminin bitmesini bekleyin.

oluşturucu.bekleRenderSonu()

#define VRAY_RUNTIME_LOAD_PRIMARY

#include "vraysdk.hpp"

#include "utils.h"

VRay ad alanını kullanarak;

std ad alanını kullanarak;

const char* BASE_PATH = getenv("VRAY_SDK");

string SCENE_PATH = (BASE_PATH ? string(BASE_PATH) : string(".")) + PATH_DELIMITER + "scenes" + PATH_DELIMITER + "geom";

int main(int argc, char* argv[]) {

// Göreceli sahne kaynaklarını yükleyebilmek için işlem çalışma dizinini SCENE_PATH olarak değiştirin.

changeCurrentDir(SCENE_PATH.c_str());

// V-Ray SDK kütüphanesini yükle.

VRayInit init(NULL, true);

// Varsayılan seçeneklerle bir VRayRenderer örneği oluşturun.

// Geçerli kapsamın sonunda oluşturucu otomatik olarak kapatılır.

VRayRenderer oluşturucu;

// Her zaman konsol günlüğü tutmanız önerilir.

renderer.setOnLogMessage(logMessage);

// Sahneyi dosyadan yükle

renderer.load("gaussians_flowers.vrscene");

Aşağıdaki API ile Gauss verileri okunabilir ve modelin önizlemesi yapılabilir.

// Sınır kutusu, nokta bulutu veya başka bir yöntem kullanılarak oluşturulabilir.

GaussianReadData okumaVerisi;

GeomUtils::readGaussianData(renderer.getPlugin("flowers"), readData);

Box previewBoundingBox = readData.getPreviewBoundingBox();

const unsigned numPrimitives = readData.getGaussianPrimitivesCount();

for (unsigned i = 0; i < numPrimitives; i++) {

Vektör konumu = readData.getPosition(i);

Renk rengi = readData.getAverageColor(i);

}

// Oluşturma işlemine başla.

oluşturucu.senkronizasyonubaşlat();

// Oluşturma işleminin bitmesini bekleyin.

renderer.waitForRenderEnd();

0 döndür;

}

Sistem kullanılarak;

System.IO kullanarak;

VRay kullanarak;

Statik VRay.Proxy kullanılıyor;

sınıf Programı

{

statik void Main(string[] args)

{

string SCENE_PATH = Path.Combine(Environment.GetEnvironmentVariable("VRAY_SDK"), "scenes", "geom");

// Göreceli sahne kaynaklarını yükleyebilmek için işlem çalışma dizinini SCENE_PATH olarak değiştirin.

Directory.SetCurrentDirectory(SCENE_PATH);

// Varsayılan seçeneklerle bir VRayRenderer örneği oluşturun.

// `using` bloğundan sonra oluşturucu otomatik olarak kapatılır.

(VRayRenderer renderer = new VRayRenderer()) kullanarak

{

// Herhangi bir türdeki günlük mesajı için bir dinleyici ekleyin.

renderer.LogMessage += new EventHandler<MessageEventArgs>((source, e) =>

{

// Test amaçlı olarak if koşulunu kaldırabilirsiniz, ancak gerçek kodda Debug'ı göz ardı etmek isteyebilirsiniz.

eğer (e.LogLevel != LogLevelType.Debug)

{

Console.WriteLine(String.Format("[{0}] {1}", e.LogLevel.ToString(), e.Message));

}

});

// Sahneyi dosyadan yükle.

renderer.Load("gaussians_flowers.vrscene");

// Aşağıdaki API ile oluşturulan dağılım dönüşümleri ve topoloji okunabilir.

// ve çeşitli biçimlere (noktalar, sınırlayıcı kutu, düşük poligonlu model vb.) önizleme olarak uygulanır.

GeomUtils.GaussianReadData readData = GeomUtils.ReadGaussianData(renderer.GetPlugin("flowers"));

Box previewBoundingBox = readData.GetPreviewBoundingBox();

uzun numPrimitives = readData.GetGaussianPrimitivesCount();

for (long i = 0; i < numPrimitives; i++)

{

Vektör konumu = readData.GetPosition(i);

Renk rengi = readData.GetAverageColor(i);

}

// Oluşturma işlemine başla.

oluşturucu.Senkronizasyonu Başlat();

// Oluşturma işleminin bitmesini bekleyin.

oluşturucu.RenderSonundaBekle();

}

}

}

var path = require("path");

var vray = require(path.join(process.env.VRAY_SDK, "node", "vray"));

var SCENE_PATH = path.join(process.env.VRAY_SDK, "scenes", "geom");

// Göreceli sahne kaynaklarını yükleyebilmek için işlem çalışma dizinini SCENE_PATH olarak değiştirin.

işlem.chdir(SCENE_PATH);

// Varsayılan seçeneklerle bir VRayRenderer örneği oluşturun.

var oluşturucu = vray.VRayRenderer();

// Her zaman bir konsol günlük kaydı geri çağırma işlevine sahip olmanız önerilir.

renderer.on("logMessage", function(message, level, instant) {

if (level == vray.LOGLEVEL_ERROR)

console.log("[HATA] ", mesaj);

aksi takdirde eğer (seviye == vray.LOGLEVEL_WARNING)

console.log("[Uyarı] ", message);

aksi takdirde eğer (seviye == vray.LOGLEVEL_INFO)

console.log("[bilgi] ", mesaj);

// Test amaçlı olarak yorum satırını kaldırın, ancak gerçek kodda bunları göz ardı etmek isteyebilirsiniz.

//else console.log("[debug] ", message);

});

// Sahneyi dosyadan eşzamansız olarak yükle.

renderer.load("gaussians_flowers.vrscene", function(err) {

Eğer (hata) varsa, hata fırlat;

Aşağıdaki API ile Gauss verileri okunabilir ve modelin önizlemesi yapılabilir.

// Sınır kutusu, nokta bulutu veya başka bir yöntem kullanılarak oluşturulabilir.

var readData = vray.GeomUtils.readGaussianDataSync(renderer.plugins["flowers"]);

var previewBoundingBox = readData.bbox;

var numPrimitives = readData.positions.count;

for (var i = 0; i < numPrimitives; i++) {

var konum = readData.positions.getVector(i);

var color = readData.colors.getColor(i);

}

// Oluşturma işlemine başla.

oluşturucu.başlat(işlev(hata) {

Eğer (hata) varsa, hata fırlat;

// Oluşturma işleminin bitmesini bekleyin.

renderer.waitForRenderEnd(function() {

// Oluşturucuyu kapatır.

// Kaynakları tükendiği için kapatıldıktan sonra oluşturucu nesnesi kullanılamaz hale gelir.

// Serbest bırakılıyor. Çöp toplama için serbest bırakılmalıdır.

oluşturucu.kapat();

});

});

});

Notlar #


  • Gauss dağılımları, V-Ray’de siyah bir arka plan üzerinde oluşturulmuş gibi varsayılarak çalışır. Doğru render için, sahne arka planı siyah olmalı ve aydınlatma için kullanılan tüm kubbe ışıkları görünmez olarak ayarlanmalıdır.

  • Birden fazla Gaussian splat dosyasını yükleyebilir ve bunların uzaydaki konumlarına bağlı olarak birbirlerine göre doğru şekilde işlenmesini sağlayabilirsiniz; ancak kesişen Gaussian splat’lar belirsiz veya yanlış sonuçlar üretebilir. Tek bir nokta bulutu için tasarlandıkları için kesiştirilmeleri önerilmez.

Tarafından desteklenmektedir BetterDocs

Bir yanıt yazın

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