Gönderen Konu: Nasıl hızlı blur eylenir şu hayatta?  (Okunma sayısı 18352 defa)

Nasıl hızlı blur eylenir şu hayatta?

« : 04.05.2009 14:48:10 »
Hızlı düğmeleri aç

horselogy

İleti: 64

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://horselogy.blogspot.com
Geçen gün (ilk defa) adobe premier ile çalışırken video'ya blur efekti verdiğimde performansı görünce şaşırdım. Zira bir yavaşlama bekliyordum videoda (4x kere blur ediyor du) ama hiç olmadı. Ben gimp ile büyükçe bir resme gaussian blur verdiğimde 1 saniyeliğine de olsa işlem çubuğu görüyor olduğumdan bu duruma şaşırdım. Özgür yazılım fetişim var ama yiğidi öldür hakkını yeme demişler :D neyse soruya gelelim

ben sadece şu şekilde olanı biliyorum (python, pixel komutu osurtmasyon) :

for x in width:
  for y in height:
    pixel(x,y) = (pixel(x-1,y) + pixel(x+1,y) + pixel(x,y-1) +pixel(y+1)) / 4

Bunun dışındaki blur teknikleri nelerdir? Hız için yapılan trick'ler nelerdir? gpu kullanmak? bölme çarpma işlemleri için bit shifting yapmak? asm ile yazmak?

Yoksa bana fark ettirmeden bir ara render mı etti premiere ?

Nasıl hızlı blur eylenir şu hayatta?

« Yanıtla #1 : 04.05.2009 16:41:42 »
Hızlı düğmeleri aç

spaztica

İleti: 1.493

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
premiere'de ekranda gördüğünle final render farklı, ekranda gördüğün anlık blur, biraz uydurma oluyor (gpu olabilir oradaki bak), ama render ettiğinde az bir işlem yapıyor ve data üzerine işliyor elbette. zaten yazmışsın, blur gibi efektlerde imaj/renk matrisi kullanmak en bilinen teknik. bunun dışında gaussian blur gibi metotlara bak istersen, wikipedia'da epey anlatılıyordu, yanlış hatırlamıyorsam.

Nasıl hızlı blur eylenir şu hayatta?

« Yanıtla #2 : 04.05.2009 16:49:02 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
blur için fake bir yöntem düşük çözünürlüklü bir resmi anti-aliasing ile resize etmektir. yani teoride 4x blur çekmek için 4 iterasyon ile yukarıda verdiğin formülü kullanmak yerine 4'er 4'er step atlayarak (hem X'de hem Y'de) alınan sample pixellerden oluşan 1/4x image 4x resize edilerek de blur efekti elde edilebilir. Çok kaliteli olur mu dersen bu tartışılır elbette ki ancak düşün ki 512x512'lik bir alanın var. Sen 4'er pixel atlayarak onu 128x128'lik bir texture'a çevirdin ve ekranda 512x512 pixel boyutunda duran bir yüzeye 3d bir API ile texture olarak kapladın. Al sana basit bir blur.
 
Gel gelelim bu kadar ötüp duruyorum, bu yöntemi camera focus efekti için kullanmayı deneyip Ragnor'la tüm Nightshift 2007 boyunca kasıp başarısız olmuştuk :) Gerçi renderToTexture rutinimiz ve blur elde etme çalışmıştı, orada bir sorun yoktu. Ancak transparency gibi konularda bir patladık pir patladık. Aynı sorunu Global Game Jam'de 2-3 saat gibi bir sürede aşmayı başarmıştık gerçi. Ne bela iş lan bu alpha channel :D

Nasıl hızlı blur eylenir şu hayatta?

« Yanıtla #3 : 05.05.2009 23:29:46 »
Hızlı düğmeleri aç

xcoder

İleti: 30

Çevrimdışı
  • *
  • Newbie
    • Profili Görüntüle
Alıntı yapılan: skate;20515
blur için fake bir yöntem düşük çözünürlüklü bir resmi anti-aliasing ile resize etmektir. yani teoride 4x blur çekmek için 4 iterasyon ile yukarıda verdiğin formülü kullanmak yerine 4'er 4'er step atlayarak (hem X'de hem Y'de) alınan sample pixellerden oluşan 1/4x image 4x resize edilerek de blur efekti elde edilebilir.
 
Fakat bu dediğini yapınca sanki keskin hatlar daha keskin görünür gibi geliyor.
Benim aklıma gelen en hızlı fake blur, dithering.
Yada izleyicilere biraz gözlerini kısarak bakmalarını rica edebiliriz. :P

Nasıl hızlı blur eylenir şu hayatta?

« Yanıtla #4 : 06.05.2009 00:59:25 »
Hızlı düğmeleri aç

spaztica

İleti: 1.493

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
izleyenlere hipermetrop gözlük dağıt, 5-10 numara, herşeyi blurred görürler. cpu-time=0... :)

Nasıl hızlı blur eylenir şu hayatta?

« Yanıtla #5 : 06.05.2009 12:43:14 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bu konuda birkaç test yaptım. OpenGL kullandım ve 4'er 4'er pixelleri atalayarak okumak suretiyle aynı boyutta iki quad'a texture kapladım. Biri 256x256, diğeri 64x64 boyutunda texture kullanmış oluyor.
 
Sonuç 1:

 

 

 
Bunlar istediğim kalitede olmayınca resize işlemini photoshopta bicubic filtreyle yapıp denedim ve çok daha iyi sonuçlar aldım. Yine 256x256 ve 64x64 boyutları söz konusu.
 

 

 

 
Elbette ki tam anlamıyla "blur" denemez ancak daha iyi bir sonuç.
 
Bunun avantajı nedir derseniz, evet yine bicubic filtre gibi hesaplamalar işin içine giriyor ancak resmi istenilen boyuta resize ederek istediğimiz kademede bluru hemen hemen aynı sürede çekebiliyoruz. Hatta hatta işin daha ilginç yönü daha çok blur çekmek için daha az CPU (duruma göre GPU) time harcıyoruz. Çünkü blur faktörünün artması için resmin boyutunun küçülmesi gerekiyor ve çıktıdaki toplam pixel sayısı azaldıkça işlem hızlanıyor. Texture kaplama hızı da daha küçük texturelar ile daha hızlı olduğu için genel olarak blur efektinin hız mantığını bu yöntemin terse çevirdiğini söylemek mümkün.

Nasıl hızlı blur eylenir şu hayatta?

« Yanıtla #6 : 06.05.2009 13:52:55 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Sanırım bu site epey bir işine yarayabilir.
 
http://incubator.quasimondo.com/