Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity 2D Işıklandırma: Normal Map ile Derinlik Katın

Paylaşan: Unity Eğitim 10 October 2025 8 dakika okuma 54 görüntülenme

2D oyunlar, genellikle düz ve iki boyutlu görsellerle karakterize edilir. Ancak günümüz teknolojisi, bu düzlüğe dinamik ışıklandırma ve gölgeleme efektleri ekleyerek derinlik ve atmosfer katmamıza olanak tanıyor. Unity'nin 2D Işıklandırma sistemi ve normal map'ler, bu dönüşümün merkezinde yer alıyor. Bu makalede, Unity 2D Işıklandırma sistemini normal map'lerle birlikte nasıl kullanacağınızı, oyunlarınıza nasıl gerçekçi bir dokunuş katacağınızı adım adım inceleyeceğiz.

Unity'de 2D Işıklandırma ve Normal Map Temelleri

Unity, 2D oyunlar için özel olarak tasarlanmış bir ışıklandırma sistemine sahiptir. Bu sistem, sahnenize dinamik ışıklar eklemenize ve bu ışıkların sprite'lar üzerindeki etkileşimini kontrol etmenize olanak tanır. Ancak gerçek derinliği ve detayı elde etmek için normal map'lere ihtiyacımız var.

2D Işıklandırma Nedir?

Unity'deki 2D Işıklar (Light 2D bileşeni), 2D oyun dünyanıza ışık kaynakları eklemenizi sağlar. Bu ışıklar, renk, yoğunluk, düşüş (falloff) ve belirli bir alanı etkileme gibi özelliklere sahiptir. Unity'nin 2D Render Pipeline'ı (URP'nin bir parçası olarak gelen 2D Renderer), bu ışıkların sprite'lar ve diğer 2D objeler üzerindeki etkileşimini hesaplar.

Normal Map Nedir?

Normal map'ler, bir dokunun yüzey detaylarını (girintiler, çıkıntılar) simüle etmek için kullanılan özel bir doku türüdür. Geleneksel olarak 3D oyunlarda yüksek poligonlu modellerin detaylarını düşük poligonlu modellere aktarmak için kullanılırken, 2D dünyasında da sprite'larınıza hacim ve derinlik hissi katmak için harika bir araçtır. Normal map'ler, genellikle mor ve mavi tonlarında görünen renk kodlu pikseller içerir. Bu renkler, her pikselin yüzey normalinin (yani yüzeye dik olan hayali vektörün) yönünü temsil eder. Bir ışık kaynağı bu normal map'li sprite'a çarptığında, Unity, ışığın bu hayali yüzey detayları üzerinden nasıl yansıdığını hesaplayarak gölgeler ve vurgular oluşturur, böylece sprite'ın düz olmaktan çıkıp üç boyutlu bir görünüme kavuşmasını sağlar.

Unity'de Normal Map Kullanımına Başlangıç

Unity 2D Işıklandırma sistemini normal map'lerle kullanabilmek için bazı ön koşullar vardır:

  1. Universal Render Pipeline (URP) Kurulumu: Projenizin URP kullanıyor olması ve URP ayarları altında bir 2D Renderer eklentisinin bulunması gerekir. Bunu Edit > Project Settings > Graphics veya Project Settings > Quality altındaki Render Pipeline Asset'inizi seçerek kontrol edebilirsiniz.
  2. Sprite'a Normal Map Ekleme: Kullanmak istediğiniz sprite'ın doku (texture) import ayarlarında, Texture TypeSprite (2D and UI) olarak ayarladığınızdan emin olun. Ardından Generate Physics Shape seçeneğinin altında Normal Map kutucuğunu işaretleyin ve ilgili normal map dokusunu (eğer ayrı bir dosya ise) buraya sürükleyip bırakın. Eğer normal map'iniz yoksa, Unity'nin kendisi sprite'ınızdan otomatik olarak bir normal map oluşturabilir (From Grayscale seçeneği ile), ancak bu her zaman en iyi sonucu vermeyebilir.

Gelişmiş 2D Işıklandırma Teknikleri

Temelleri anladıktan sonra, Unity 2D Işıklandırma sistemini daha etkili kullanabiliriz.

Farklı 2D Işık Tipleri

Unity'de çeşitli Light 2D tipleri bulunur:

  • Point Light: Belirli bir noktadan her yöne eşit yayılan ışık (meşale, lamba gibi).
  • Spot Light: Belirli bir koni şeklinde yayılan ve yönü kontrol edilebilen ışık (el feneri gibi).
  • Freeform Light: Kenarları ve şekli serbestçe ayarlanabilen, karmaşık ışık alanları oluşturmak için ideal.
  • Area Light: Belirli bir dikdörtgen alanından yayılan ışık (pencere ışığı gibi).
  • Parametric Light: Önceden tanımlanmış geometrik şekiller (daire, kare gibi) kullanarak ışık alanı oluşturan ışık.

Her ışık tipinin kendine özgü ayarları (Color, Intensity, Falloff, Light Order vb.) vardır. Bu ayarları kullanarak sahnenize istediğiniz atmosferi katabilirsiniz.

Blend Stilleri ve Katmanlar

Birden fazla ışık kullanırken, ışıkların birbirleriyle nasıl etkileşime gireceğini belirlemek için Blend Style'ları kullanabilirsiniz. Unity, varsayılan olarak Additive (ışıklar birbirini ekler) ve Multiply (ışıklar birbirini çarparak karartır) gibi stiller sunar. Kendi özel blend stillerinizi de oluşturabilirsiniz. Ayrıca, Light Layer'ları kullanarak belirli ışıkların yalnızca belirli sprite'ları etkilemesini sağlayabilirsiniz. Bu, sahnenizi daha düzenli hale getirir ve performans optimizasyonuna yardımcı olur.

Pratik İpuçları ve En İyi Uygulamalar

1. Normal Map Oluşturma ve Optimize Etme

Normal map'leri elle çizmek zor olabilir. Bunun yerine, Photoshop veya GIMP gibi görüntü düzenleme yazılımlarındaki eklentileri (örneğin, Nvidia Normal Map Filter) veya online araçları (örneğin, NormalMap-Online) kullanabilirsiniz. Sprite'ınızın orijinal dokusundan başlayarak, ona bir derinlik katmanı ekleyerek veya otomatik olarak normal map'ler oluşturarak işinizi kolaylaştırabilirsiniz. Daha iyi performans için normal map'lerinizin çözünürlüğünü sprite'ınızla orantılı tutmaya özen gösterin.

2. Dinamik Gölgeler için Shadow Caster 2D

Unity 2D Işıklandırma sistemi sadece ışıklarla sınırlı değildir, aynı zamanda dinamik gölgeler de oluşturabilir. Bir objenin gölge oluşturmasını istiyorsanız, o objeye bir Shadow Caster 2D bileşeni eklemeniz gerekir. Bu bileşen, objenin şekline göre gölge düşürmesini sağlar. Özellikle hareketli objeler için dinamik gölgeler, oyununuza büyük bir görsel zenginlik katar.

3. Işıkların Katmanlarını ve Sırasını Yönetin

Karmaşık sahnelerde çok sayıda 2D ışık kullanmak, görsel karmaşaya yol açabilir. Light Order ve Blend Style ayarlarını kullanarak ışıkların hangi sırada ve nasıl birleşeceğini belirleyin. Işıkları mantıksal gruplara ayırarak (örneğin, 'Ortam Işıkları', 'Dinamik Işıklar') yönetimini kolaylaştırın. Örneğin, uzaktaki bir meşalenin ışığı ile karakterin elindeki fenerin ışığının farklı katmanlarda olmasını sağlayabilirsiniz.

Küçük Bir Kod Bloğu Örneği: Dinamik Işık Rengini Değiştirme

Bir Light 2D bileşeninin rengini kod ile değiştirmek, oyununuzda dinamik olaylar yaratmak için harika bir yoldur:

using UnityEngine; 
using UnityEngine.Experimental.Rendering.Universal;

public class DynamicLightColor : MonoBehaviour
{
    public Light2D targetLight;
    public Color startColor = Color.blue;
    public Color endColor = Color.red;
    public float colorChangeSpeed = 1f;

    private float _time;

    void Update()
    {
        if (targetLight == null)
        {
            Debug.LogWarning("Target Light2D not assigned!");
            return;
        }

        _time += Time.deltaTime * colorChangeSpeed;
        targetLight.color = Color.Lerp(startColor, endColor, Mathf.PingPong(_time, 1));
    }
}

Bu kod, atanan Light2D bileşeninin rengini belirli bir hızda iki renk arasında yumuşak bir geçişle değiştirir. Bu sayede Unity 2D Işıklandırma sistemini kod ile kontrol edebilirsiniz.

Yaygın Hatalar ve Çözümleri

  • Normal Map'in Görünmemesi veya Etki Etmemesi:
    • Çözüm: Sprite'ınızın import ayarlarında Texture Type'ın Sprite (2D and UI) olduğundan ve Normal Map kutucuğunun işaretli olup doğru normal map'in atandığından emin olun. Ayrıca, URP'nin 2D Renderer eklentisinin doğru yapılandırıldığından emin olun.
  • Işıkların Hiçbir Etki Yaratmaması:
    • Çözüm: Projenizin URP kullandığından ve URP asset'inizde 2D Renderer'ın eklendiğinden emin olun. Light 2D bileşeninin Blend Style'ının doğru ayarlandığını ve ışıkların sprite'ın bulunduğu katmanı etkilediğini kontrol edin. Sprite'ınızın Material'ının Sprite-Lit-Default veya benzeri bir ışıklandırmayı destekleyen bir materyal olduğundan emin olun.
  • Performans Sorunları:
    • Çözüm: Çok fazla Light 2D bileşeni veya çok büyük/yüksek çözünürlüklü normal map'ler performansı olumsuz etkileyebilir. Gereksiz ışıkları kaldırın, ışıkların etkileşim alanlarını küçültün ve normal map çözünürlüklerini optimize edin. Pixel Light Count gibi URP ayarlarını gözden geçirin.
  • Gölgelerin Çalışmaması:
    • Çözüm: Gölge düşürmesini istediğiniz objelerde Shadow Caster 2D bileşeninin olduğundan ve doğru ayarlandığından emin olun. Işıklarınızın gölge oluşturma ayarlarını (Cast Shadows) kontrol edin.

Performans ve Optimizasyon Notları

Unity 2D Işıklandırma, görsel olarak zengin sahneler yaratırken performansı da göz önünde bulundurmayı gerektirir:

  • Işık Sayısı: Mümkün olduğunca az dinamik ışık kullanmaya çalışın. Sabit (statik) ışıklar için baked ışıklandırma yöntemlerini araştırın (ancak 2D Renderer'da baked ışıklandırma seçenekleri daha sınırlıdır).
  • Işık Alanları: Her ışığın etkilediği alanı mümkün olduğunca küçük tutun. Falloff ayarlarını kullanarak ışığın etkisini kademeli olarak azaltın.
  • Normal Map Çözünürlüğü: Sprite'larınızın boyutuna uygun çözünürlükte normal map'ler kullanın. Çok yüksek çözünürlüklü normal map'ler gereksiz yere bellek ve işlemci gücü tüketebilir.
  • Sprite Atlas: Normal map'leri de içeren sprite'ları Sprite Atlas'larda toplamak, çizim çağrısı (draw call) sayısını azaltarak performansı artırabilir.

Sonuç

Unity 2D Işıklandırma sistemi ve normal map'ler, 2D oyunlarınıza çarpıcı bir derinlik ve görsel çekicilik katmanın güçlü bir yoludur. Bu araçları doğru bir şekilde kullanarak, oyuncularınızı içine çeken atmosferik ve dinamik 2D dünyalar yaratabilirsiniz. Denemekten çekinmeyin, farklı ışık tipleri ve normal map'lerle oynayarak kendi benzersiz tarzınızı keşfedin. Unutmayın, iyi bir Unity 2D Işıklandırma, oyununuzun genel kalitesini önemli ölçüde artırabilir!

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!