Modsuz kamera ara sahneleri: ana kareler, enterpolasyon ve izleyici hileleri
Vanilla'da bir kamerayı hareket ettirmenin iki yolu: tik bazlı ışınlanma işlevi veya zaman çizelgesi kaydı. Her birinin ne işe yaradığı ve robotik görünmesini engelleyen yumuşatma.
Vanilla'da bir kamera nesnesi bulunmadığından, bir ara sahne iki yanılsamadan biridir.
Yöntem 1: Oyuncuyu her tikte ışınlama
Eski, evrensel yöntem. Oyuncuyu izleyici (spectator) moduna alın, sonra bir yol boyunca hareket ettirin:
gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0
bir işlev zincirinden her tikte bir tp. Her sürümde çalışır ve özel bir şeye ihtiyaç duymaz. Sorunların hepsi akıcılıkla ilgilidir:
- Saniyede 20 ana kare. On saniyelik bir çekim 200
tpsatırdır. - Doğrusal adımlar mekanik görünür. Gerçek kamera hareketleri yumuşak bir şekilde başlar ve biter.
- Dönüş kötü sarar. Yaw 170'ten -170'e gitmek 20 derecelik bir dönüşken, basit enterpolasyon 340 derece yanlış yöne döner. Adım atmadan önce açı farkını -180…180 aralığına normalleştirin.
Bu satırları oluşturmak bir ana kare aracının işidir; birkaç konum yerleştirirsiniz ve o, yumuşatma uygulanmış tik başına işlevi çıkarır.
Yumuşatma
Amatör ile izlenebilir arasındaki fark, enterpolasyon eğrisidir. İki ana kare arasında, 0'dan 1'e t ile:
linear t
ease-in-out t < 0.5 ? 2t² : 1 − 2(1−t)²
smoothstep t² × (3 − 2t)
smoothstep güvenli varsayılandır. Konum ve dönüşe birlikte uygulayın, aksi takdirde kamera dönmeyi bitirmeden varır.
Yöntem 2: zaman çizelgesi kaydı
Yeni sürümler, tüm çekimi yüzlerce ışınlanma yerine veri olarak tanımlayan bir zaman çizelgesi formatı ekler:
data/<namespace>/timeline/intro.json
Zamanları ve enterpolasyon modları olan ana kareler, tek bir komutla oynatılır. Avantajları:
- Çok daha küçük. İki yüz ışınlanma yerine altı ana kare.
- Enterpolasyon yereldir, bu nedenle manuel yumuşatma matematiği yoktur.
- Kare hızından bağımsız — yüklü bir sunucuda tik başına ışınlanmanın yaptığı gibi takılmaz.
Maliyeti ise yalnızca yeni sürümlerde bulunmasıdır, bu nedenle eski istemcileri hedefleyen bir Harita (Map) hala 1. yönteme ihtiyaç duyar.
Oyuncuyu yerinde tutmak
Her iki yöntem de iki şeyle mücadele eder:
- Oyuncu girişi. İzleyici (spectator) modu, oyuncunun çekim ortasında uçup gitmesine izin verir. Her tikte yeniden ışınlanma bunu geçersiz kılar, bu da kaba kuvvet yönteminin devam etmesinin bir nedenidir.
- Yüklü olmayan parçalar (chunk loading). Yüklü olmayan bir yere uçan bir kamera boşluk gösterir. Çekimden önce yolu
/forceloadve sonra kaldırın.
HUD'u gizleme
/gamerule doImmediateRespawn, izleyici (spectator) modu ve F1 sizi çoğu yola götürür. Temiz bir kare için, HUD kılavuzuna bakın, HUD sprite'larını boşaltan bir kaynak paketi, Oyuncu hiçbir şeye basmadan nişangahı ve hızlı erişim çubuğunu kaldırır.
Bir yol üzerine ana kareler yerleştirin ve Cutscene & Timeline Builders ile tik başına bir işlev veya bir zaman çizelgesi JSON'u dışa aktarın.