Aracılığıyla paylaş


Kamera

Yerel ve uzaktan işlenen içeriğin sorunsuz bir şekilde birleştirilebildiğini emin olmak için, çeşitli kamera özelliklerinin sunucu ve istemci arasında eşitlenmiş durumda kalması gerekir. En önemlisi kamera dönüşümü ve projeksiyonu. Örneğin, yerel olarak işlenen içerik, en son uzak çerçevenin işlendiği aynı kamera dönüşümünü ve projeksiyonunu kullanmalıdır.

Local and remote camera

Yukarıdaki görüntüde, yerel kamera sunucu tarafından gönderilen uzak çerçeveye göre hareket etti. Sonuç olarak, yerel içeriğin uzak çerçeveyle aynı perspektiften işlenmesi gerekir ve son olarak ortaya çıkan görüntü yerel kamera alanına yeniden oluşturulur ve bu, geç aşama yeniden oluşturmada ayrıntılı olarak açıklanmıştır.

Uzak ve yerel işleme arasındaki gecikme, bu ayarların herhangi bir değişikliğinin gecikmeli olarak uygulandığı anlamına gelir. Bu nedenle, herhangi bir yeni değer hemen aynı çerçevede kullanılamaz.

Yakın ve uzak düzlem uzaklıkları kamera ayarlarından ayarlanabilir. HoloLens 2'de kalan dönüşüm ve projeksiyon verileri donanım tarafından tanımlanır. Masaüstü benzetimi kullanılırken, işlevinin Update girişi aracılığıyla ayarlanırlar.

Değiştirilen değerler, onlarla birlikte işlenen ilk uzak çerçeve gelir gelmez yerel olarak kullanılabilir. HoloLens 2'de, işleme için kullanılacak veriler holografik çerçeve tarafından diğer holografik uygulamalardaki gibi sağlanır. Masaüstü benzetiminde bunlar işlevin çıkışı Update aracılığıyla alınır.

Kamera ayarları

Kamera ayarlarında aşağıdaki özellikler değiştirilebilir:

Yakın ve uzak düzlem:

Geçersiz aralık ayarlanmadığından emin olmak için NearPlane ve FarPlane özellikleri salt okunur olur ve aralığı değiştirmek için SetNearAndFarPlane ayrı bir işlev bulunur. Bu veriler, çerçevenin sonunda sunucuya gönderilir. Bu değerleri ayarlarken NearPlane,FarPlane değerinden daha küçük olmalıdır. Aksi takdirde bir hata oluşur.

Önemli

Unity'de ana kamera yakın ve uzak düzlemlerde değiştirilirken bu otomatik olarak işlenir.

EnableDepth:

Bazen hata ayıklama amacıyla uzak görüntünün derinlik arabellek yazmasını devre dışı bırakmak yararlı olabilir. Derinliğin devre dışı bırakılması sunucunun derinlik verileri göndermesini de durdurarak bant genişliğini azaltır.

Bahşiş

Unity'de, düzenleyici kullanıcı arabiriminde bu özelliği değiştirmek için kullanılabilen EnableDepthComponent adlı bir hata ayıklama bileşeni sağlanır.

InverseDepth:

Dekont

Bu ayar yalnızca olarak ayarlandıysa EnableDepthtrueönemlidir. Aksi takdirde bu ayarın hiçbir etkisi olmaz.

Derinlik arabellekleri normalde [0; kayan nokta aralığında z değerlerini kaydeder; 1], 0 ile yakın düzlem derinliğini ve 1 uzak düzlem derinliğini ifade ediyor. Bu aralığı ters çevirmek ve [1 aralığındaki derinlik değerlerini kaydetmek de mümkündür; 0], yani yakın düzlem derinliği 1 olur ve uzak düzlem derinliği 0 olur. Genel olarak, ikincisi kayan nokta duyarlığının doğrusal olmayan z aralığında dağılımını geliştirir.

Uyarı

Yaygın bir yaklaşım, kamera nesnelerindeki yakın düzlem ve uzak düzlem değerlerini tersine çevirmektir. Azure Uzaktan İşleme için bu işlem üzerinde CameraSettingsdenenirken bir hatayla başarısız olur.

Azure Uzaktan İşleme API'sinin, yerel derinlik arabelleğine uzak derinliği doğru bir şekilde oluşturmak için yerel işleyicinizin derinlik arabelleği kuralı hakkında bilgi edinmesi gerekir. Derinlik arabelleği aralığınız [0; 1] bu bayrağı olarak falsebırakın. [1) ile ters derinlik arabelleği kullanıyorsanız; 0] aralığı, bayrağını InverseDepth olarak trueayarlayın.

Dekont

Unity için, doğru ayar tarafından zaten uygulanmıştır RenderingConnection , bu nedenle el ile müdahaleye gerek yoktur.

Kamera ayarlarını değiştirmek aşağıdaki gibi yapılabilir:

void ChangeCameraSetting(RenderingSession session)
{
    CameraSettings settings = session.Connection.CameraSettings;

    settings.SetNearAndFarPlane(0.1f, 20.0f);
    settings.EnableDepth = false;
    settings.InverseDepth = false;
}
void ChangeCameraSetting(ApiHandle<RenderingSession> session)
{
    ApiHandle<CameraSettings> settings = session->Connection()->GetCameraSettings();

    settings->SetNearAndFarPlane(0.1f, 20.0f);
    settings->SetEnableDepth(false);
    settings->SetInverseDepth(false);
}

API belgeleri

Sonraki adımlar