2D Su üst yüzey profili


9

Köşe parçası gölgelendirici ile su yüzey kalınlığının etkisini yaratmaya çalışıyorum.

Ben 3D oyun ortamındayım ama bu bir kaydırma görünümü yani "2D" görünümü. İşte fragman gölgeleyici kullanarak gerçek 2D'de böyle bir etki yaratmanın iyi bir öğreticisi.
Ama bu benim durumumda kullanılamaz sanırım. Şu an için sadece bir uçağım var, kırılma uyguluyordum.

refraksiyon

Ve su kalınlığı etkisini uygulamak istiyorum. Ama nasıl yapılacağını bilmiyorum.
Şu an için tepe noktası kullanarak bazı su deformasyonu / yer değiştirmesi yaratmaya çalışmıyorum, bu nokta değil.

Basit bir dörtlü ile mümkün olup olmadığını bilmiyorum belki böyle bir nesne kullanmalıyım.

sistem

İşte bazı örnekler.

1 2 4 Rayman

Bu etkinin nasıl yaratılacağı hakkında hiçbir fikrim yok.

Çok teşekkürler !

[ EDIT ] Efekt hakkında daha iyi bir referans olması için Rayman su efekti eklendi.


Su efektinizi şu anda nasıl yapıyorsunuz? Gönderinin ilk ekran görüntüsü sizinkiyse, sahneyi bozan bir gölgelendirici ile 2D dörtlü çiziyorsunuz gibi görünüyor. Bu doğruysa, neden bozuk bir 2D doku kullanmaya da dayanan öğreticideki talimatları uygulayamıyorsunuz?
Nathan Reed

Arka planı bozan bir köşe parçası gölgelendirici (arka plan Unity GrabPass işlevselliği tarafından yakalanır) ile bir 3D dörtlü var. Bir 2D doku kullanmak iyi bir fikir olduğunu düşünmüyorum, özelleştirilebilir parametrelerle daha genel bir şey düşünüyordum ama başka bir yolu yok gibi görünüyor ... ve daha yavaş olur mu?
MaT

Yanıtlar:


1

Gölgelendiricide ıslaklığı belirten bir değere sahip olun. 0'dan küçük hava, 1'den büyük su ve aralarında menisküs anlamına gelir.

İşte bazı sözde kod:

vec2 uv2 = bigWaves(uv); // modify the texture coords to create a wavy water effect
float wetness = (uv2.y - 0.1) * 100;

if( wetness<0.0 )
{
    gl_Fragment = texture2D(screen_texture,uv); // is air - no refraction or effect
}
else if( wetness>1.0 )
{
    vec2 uv3 = smallWaves(uv2); // modify the texture coords to create a ripply water effect
    gl_Fragment = texture2D(screen_texture,uv3); // is water - with refraction
}
else
{
    gl_Fragment = vec4(1,1,1,1); // solid white meniscus
}

Bu yapabildiğim en basit şey. Eğer ben olsaydım, menisküsün kenarlarını yumuşatmak için biraz daha karmaşık bir şey yapardım ve orada daha fazla kırılma uygulayabilirdim, ama ne söyleyemem çünkü estetik iterasyonlar alacaktı. Ayrıca, su örneğini renklendirir ve bulanıklaştırırdım. Ama hepsini sana bırakacağım.


Evet, iyi bir fikir! Bulanıklık ve renk tonu konusunda tamamen katılıyorum. Ayrıca bir derinlik (Y) gradyanı (belki başka bir derinlik (Z) gradyanı) ekliyorum. Menisküs bölgesine de farklı bir kırılma etkisi eklemeliyim ama şu an Rayman'da olduğu gibi bir dalgalanma etkisine sahip olmaya çalışıyorum. Ama nasıl olduğunu bilmiyorum. Belki de bu yinelenen etkiyi sağlamak için menisküs için farklı Dokular kullanmalıyım. Ne demek istediğimi biliyor musun bilmiyorum.
MaT
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.