Görüntülerle sahte bulanıklık yapmak mümkün mü?


9

Bir android oyunu için libGDX kullanıyorum; anlayabildiğim kadarıyla, bulanıklaştırma için bir API yok.

Wikipedia'da okumak, her pikselin RGB değerlerini tüm bitişik değerlerin ortalamasına ayarlayarak bulanıklığın oluştuğu anlaşılıyor. Bu, libGDX'te kolayca mümkün görünmüyor - piksel verilerini ayarlama.

Yani sorum basit:

Sadece görüntüleri kullanarak sahte (iyi) bir bulanıklık mümkün mü?

Potansiyel olarak birden fazla (sayı, şeffaflık, tür) görüntüyü kaplayabilirim; ama böyle ikna edici bir bulanıklık yaratabilir miyim?

"Hayır" demeye cazip geldim ama belki başka biri de benzer bir şey başardı. Netlik için, bulanıklık benzeri bir efekt oluşturmak için HERHANGİ bir görüntünün üstünde oluşturabildiğim 1+ genel görüntü kümesi istiyorum.


iyi soru! Ben de aynı şeyi düşündüm!
Daniel, Reinstate Monica'ya

@DantheMan hangi platformda?
ashes999

Unity3d veya CG gölgeleme dili.
Daniel, Reinstate Monica'ya

Saydam görüntülerin üst üste bindirilmesini önerirsiniz. Onları hafifçe dengelerseniz, bulanıklığı elde etmek için pikselleri ortalayacaksınız
Jeff

1
@ ashes999, bulanık görünmelerini sağlamak için şeylerin üzerine yerleştirilebilen bir "sihirli görüntü" arıyorsanız, bu mevcut değildir. Alfa harmanlama (kaplama) uzaktan bulanıklaştırma ile aynı şey değildir, üzgünüm.
Nathan Reed

Yanıtlar:


7

Görüntüleri ekleyerek karıştırabilir ve bunları sabit bir değerle çarpabiliyorsanız, bir bulanıklaştırma yapabilirsiniz. Bir mahalledeki piksellerin ortalamasını almak yerine, görüntünün birkaç kopyasının birbirinden az sayıda pikselle yer değiştirmesi gerekir. Veya daha genel olarak, ağırlıkları kontrol ederek bir Gauss bulanıklığı veya her türlü bulanıklığı yapabilirsiniz - yani görüntünün yer değiştiren her kopyasını geri kalanına eklenirken bir sabitle çarpabilirsiniz.

Algoritmik olarak şöyle görünecektir:

clear output_image to 0
foreach offset, weight in filter_kernel:
    output_image += input_image * weight, shifted by offset

Bulanıklaştırma yapmanın standart yöntemiyle aynı ofsetleri ve ağırlıkları kullanırsınız. Örneğin, bir Gauss bulanıklığı için ağırlıkların nasıl oluşturulacağı konusunda Web'de birçok makale bulunmaktadır.


+1 güzel cevap. Benim durumumda, eklemeli yeteneğim yok.
ashes999

0

Bulanıklaştırma pahalı bir işlem olabilir, belki farklı bir yaklaşım işe yarayabilir, örneğin:

  1. Görüntünün birden fazla kopyasını birkaç farklı yönde bulanıklaştırın (örn. 45 derecenin katları), ardından çalışma zamanında en yakın eşleşen görüntüyü görüntüleyin. Bu, bellek kullanımı pahasına en yüksek performansı sunacaktır.
  2. Kenar yumuşatma / yumuşatma ile görüntüyü küçültün ve tam boyuta getirin. Genellikle bu, çok az performans etkisi olan grafik donanımı ile yapılabilir.

Çalışmayacak, çünkü dinamik olmalı, yani ekranın tam kurulumunu önceden bilmiyorum.
ashes999
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.