Görsel efekt (VFX) artistler, oyunlarda ve diğer interaktif deneyimlerde büyüleyici görseller yaratmak için sorumludur. Bunu başarmak için, çeşitli araçlar ve teknikler kullanırlar. Bu araçlardan biri, Yüksek Seviyeli Gölgelendirme Dili (HLSL)'dir.

HLSL Nedir?
HLSL, Microsoft tarafından geliştirilmiş bir programlama dilidir. DirectX API (Application Programming Interface - Uygulama Programlama Arayüzü) ile birlikte kullanılır ve oyunlarda ve diğer 3D uygulamalarda gerçekçi görseller oluşturmak için kullanılır. HLSL, piksel shader’lar, vertex shader’lar ve geometri shader’lar gibi çeşitli türde shader’lar yazmak için kullanılabilir.
Hangi API için kullanılırlar?
- HLSL (High-Level Shader Language): Microsoft tarafından DirectX için geliştirilmiştir. DirectX, Windows işletim sistemlerinde oyun ve diğer 3 boyutlu uygulamalar için kullanılan bir grafik API’dır.

Syntax (Dilbilgisi) Farklılıkları
- Genel olarak her ikisi de C benzeri bir syntax’a sahiptir fakat bazı anahtar kelimelerde ve komutlarda farklılıklar vardır. Örneğin, değişkenlerin nasıl tanımlandığı ve shader fonksiyonlarına argümanların nasıl iletildiği gibi.
Veri İşleme Yöntemi
- HLSL, Direct3D ile daha entegre bir şekilde çalışır ve shader’lara bazı Direct3D state’lerini (durumlarını) doğrudan erişim sağlar.
Platform Desteği
- HLSL, esas olarak Windows platformunda ve DirectX ile uyumlu donanımlarda çalışır.

HLSL’in Avantajları
HLSL’in birçok avantajı vardır:
- Daha fazla kontrol: HLSL ile doğrudan shader kodu yazarak, material sisteminin sınırlamalarının ötesinde daha fazla kontrol elde edebilirsiniz. Özellikle karmaşık efektler veya optimizasyonlar için bu önemlidir.
- Geniş platform desteği: HLSL, Windows, Xbox ve diğer platformlarda kullanılabilir.
- Microsoft tarafından desteklenir: HLSL, Microsoft tarafından aktif olarak geliştirilmektedir ve geniş bir belge ve destek ağına sahiptir.
- Performans optimizasyonu: Düşük seviyeli kontrol sayesinde, belirli durumlarda daha iyi performans elde edebilirsiniz. Özellikle çok sayıda hesaplama gerektiren karmaşık shaderlar için bu önemli olabilir.
- Platform bağımsızlık: HLSL, DirectX tabanlı platformlar için tasarlanmış olsa da, Unreal Engine HLSL’i diğer grafik API’lerine (OpenGL, Vulkan, Metal vb.) çevirebilir. Bu, farklı platformlara daha kolay port yapmanızı sağlar.
- Özelleştirme: Özel render teknikleri veya efektler oluşturmak istediğinizde, HLSL size daha fazla esneklik sağlar.
- Debugging kolaylığı: Shader kodunu doğrudan yazarak, hata ayıklama sürecini daha kolay hale getirebilirsiniz. Node tabanlı sistemlerde bazen hataları bulmak daha zor olabilir.
- Kod paylaşımı ve yeniden kullanılabilirlik: HLSL kodları, projeler arasında daha kolay paylaşılabilir ve yeniden kullanılabilir.
- Daha iyi anlaşılabilirlik: Bazı geliştiriciler için, görsel node sistemlerine kıyasla metin tabanlı kod daha anlaşılır olabilir.
- İleri düzey tekniklere erişim: Bazı gelişmiş grafik teknikleri, doğrudan shader kodu yazmayı gerektirebilir.
GLSL Nedir?
GLSL, “OpenGL Shading Language” (OpenGL Gölgeleme Dili) anlamına gelir. C programlama diline benzeyen üst seviye bir programlama dilidir. OpenGL ile beraber 3 boyutlu grafiklerde kullanılan bir araçtır.
OpenGL programcıların 3 boyutlu grafik oluşturmak için kullandıkları bir API’dır. Fakat OpenGL ile her şeyi programlamak zordur. GLSL ise programcıların 3 boyutlu grafiklerin nasıl görüneceğini daha fazla kontrol edebilmeleri için OpenGL’e ek olarak kullanılır.

- GLSL (OpenGL Shading Language): Khronos Group tarafından OpenGL için geliştirilmiştir. OpenGL ise işletim sisteminden bağımsız bir grafik API’dır. Windows, macOS, Linux, Mobil Cihazlar gibi birçok işletim sisteminde kullanılabilir.
- GLSL ise OpenGL state’lerini global değişkenler olarak tanımlar.
GLSL’nin Avantajları
GLSL’nin (Graphics Shader Language - Grafik Gölgeleme Dili) birçok avantajı vardır:
- Yüksek Performans: Paralel işlem yetenekleri sayesinde, GLSL aynı anda çok sayıda hesaplama gerçekleştirebilir. Bu da karmaşık grafik işlemlerinin daha hızlı ve verimli bir şekilde yürütülmesini sağlar.
- Kolay Öğrenilebilir: C programlama diline aşina olanlar için GLSL’i öğrenmek nispeten kolaydır. Benzer syntax ve operatörleri kullandığı için geçiş süreci daha rahat olur.
- Esneklik: GLSL geliştiricilere geniş bir imkan sunar. Farklı grafik efektleri ve işlemleri için özelleştirilmiş kod yazma yeteneği sayesinde yaratıcı çözümler üretmek kolaylaşır.
- Gelişmiş Görsel Efektler: Işıklandırma, gölgelendirme, doku haritalandırma gibi birçok görsel efekti detaylı bir şekilde kontrol edebilmeyi sağlar. Bu sayede gerçekçi ve çarpıcı görüntüler oluşturmak mümkün olur.
- OpenGL ile Entegre Çalışır: GLSL, OpenGL ile birlikte çalışacak şekilde tasarlanmış ve bu sayede 3 boyutlu grafik programlama iş akışında kolay bir uyum sağlar.

HLSL ve GLSL Arasındaki Farklar
GLSL (OpenGL Shading Language), OpenGL API ile birlikte kullanılan bir shader programlama dilidir. HLSL’e benzer birçok özelliğe sahiptir, ancak bazı önemli farklılıklar da vardır.

HLSL (High Level Shader Language) ve GLSL (OpenGL Shading Language), 3D grafikler için kullanılan programlama dilleridir. Her ikisi de shader’lar yazmak için kullanılır, ancak bazı önemli farklılıkları vardır:
Kullanım Alanları:
- HLSL: Microsoft’un DirectX API ile kullanılır. Windows ve Xbox oyun platformlarında yaygındır.
- GLSL: OpenGL API ile kullanılır. Çoklu platformda kullanılabilir, Windows, macOS, Linux ve Android gibi işletim sistemlerini kapsar.
Dil Özellikleri:
- HLSL: C++'a daha yakın bir dildir. Struct’lar, sınıflar ve kalıtım gibi karmaşık dil özelliklerini destekler.
- GLSL: C’ye daha yakın bir dildir. Struct’lar gibi bazı dil özelliklerini destekler, ancak sınıflar ve kalıtım gibi karmaşık özellikleri desteklemez.
Veri Tipleri:
- HLSL: Daha geniş bir veri tipi yelpazesine sahiptir.
- GLSL: Daha az veri tipine sahiptir.
Bellek Yönetimi:
- HLSL: Otomatik bellek yönetimi sunar.
- GLSL: Manuel bellek yönetimi gerektirir.
Performans:
- HLSL: Genellikle GLSL’den daha hızlı çalışır.
- GLSL: Bazı durumlarda HLSL’den daha hızlı çalışabilir, ancak bu duruma ve projeye göre değişir.
Diğer Farklılıklar:
- HLSL: Shader’lar için daha fazla yerleşik fonksiyona sahiptir.
- GLSL: Daha geniş bir shader model yelpazesini destekler.
Hangi Dili Seçmelisiniz?
Hangi dili seçeceğiniz, oyun geliştirme platformunuza ve kişisel tercihlerinize bağlıdır. Windows ve Xbox platformlarında oyun geliştiriyorsanız, HLSL daha iyi bir seçim olabilir. Çoklu platformda oyun geliştirmeyi düşünüyorsanız, GLSL daha iyi bir seçim olabilir. C++'ı iyi biliyorsanız, HLSL’i, C’yi iyi biliyorsanız, GLSL’i öğrenmeniz sizin için daha kolay olur.
Özet:
- HLSL, Windows ve Xbox platformlarında oyun geliştirme için daha yaygın kullanılır.
- GLSL, çoklu platformda oyun geliştirme için daha yaygın kullanılır.
- HLSL, C++'a daha yakın bir dildir ve daha karmaşık dil özelliklerini destekler.
- GLSL, C’ye daha yakın bir dildir ve daha az karmaşık dil özelliklerini destekler.
- HLSL, otomatik bellek yönetimi sunar ve genellikle GLSL’den daha hızlı çalışır.
- GLSL, manuel bellek yönetimi gerektirir ve bazı durumlarda HLSL’den daha hızlı çalışabilir.
HLSL - GLSL İçerisinde Önemli Kavramlar
Bu parametreler HLSL konusunda en çok kullanılan temel yapı taşları olarak kullanılır. Shader’ı açınca ilk yapılan ayarlamalar hedef ve isteklere göre bu kavramlardan başlayarak hazırlanır.
Blend - Cull - ZWrite - SrcAlpha - OneMinusSrcAlpha - v2f ve Precision Nedir?
Blend:
Birden fazla görüntüyü veya geometriyi birleştirmek için kullanılır. Farklı blend modları, farklı karıştırma algoritmaları uygular ve farklı görsel efektler oluşturur. Örneğin, BlendState’de SrcAlpha ve OneMinusSrcAlpha modlarını kullanarak, bir nesnenin rengini arka plan rengiyle şeffaf bir şekilde karıştırabilirsiniz.
Cull:
Görünmeyen geometriyi görselleştirmeden önce atmak için kullanılır. Bu, performansı artırmaya yardımcı olabilir. Örneğin, bir nesnenin arkasındaki yüzleri görselleştirmeye gerek yoksa, onları CullMode’u CullBack veya CullFront olarak ayarlayarak atabilirsiniz.
ZWrite:
Pikselin derinlik tamponuna yazılmasını kontrol eder. ZWrite’ı true olarak ayarlamak, pikselin derinlik değerini tampona yazar. ZWrite’ı false olarak ayarlamak, pikselin derinlik değerini tampona yazmaz.
SrcAlpha ve OneMinusSrcAlpha:
SrcAlpha ve OneMinusSrcAlpha, blend işlemi için kullanılan kaynak ve hedef renklerin alfa kanallarını temsil eder. SrcAlpha, kaynak rengin alfa kanalını, OneMinusSrcAlpha ise hedef rengin alfa kanalının tersini temsil eder.
v2f:
Vertex shader’dan fragment shader’a geçirilen verileri temsil eder. Genellikle, vertex shader’da hesaplanan pozisyon, renk ve doku koordinatları gibi bilgileri içerir.
Precision:
Shader’da kullanılan sayısal veri tiplerinin hassasiyetini kontrol eder. Daha yüksek hassasiyet, daha doğru sonuçlar verir, ancak performansı da etkileyebilir.
HLSL ve GLSL ile Yapılmış Oyunlar
HLSL ve GLSL, birçok popüler oyunda kullanılmıştır. Buna bazı örnekler şunlardır:
- HLSL: Halo, Forza Motorsport, Gears of War
- GLSL: Grand Theft Auto V, Dota 2, Counter-Strike: GO
Örnek Kullanım
`High-level shader language
// Blend modunu SrcAlpha ve OneMinusSrcAlpha olarak ayarlayın
BlendState blendState = BlendState(
SrcBlend = Blend.SrcAlpha,
DestBlend = Blend.OneMinusSrcAlpha
);
// Arka yüzleri atın
RasterizerState rasterizerState = RasterizerState(
CullMode = Cull.Back
);
// Pikselin derinlik değerini tampona yazın
DepthStencilState depthStencilState = DepthStencilState(
ZWrite = true
);
// Vertex shader’dan fragment shader’a pozisyon ve rengi geçirin
struct v2f
{
float4 position;
float4 color;
};
// Vertex shader
v2f vertexShader(float4 position, float4 color)
{
v2f output;
output.position = position;
output.color = color;
return output;
}
// Fragment shader
float4 fragmentShader(v2f input)
{
return input.color;
}`
Bu kodda, blend modu SrcAlpha ve OneMinusSrcAlpha olarak ayarlanır, bu da nesnenin rengini arka plan rengiyle şeffaf bir şekilde karıştıracaktır. Arka yüzler de atılır ve pikselin derinlik değeri tampona yazılır. Vertex shader’dan fragment shader’a pozisyon ve renk bilgisi geçirilir.
Sonuç
HLSL-GLSL, VFX sanatçıları için güçlü bir araçtır. Gerçekçi ve büyüleyici görseller oluşturmak için kullanılabilir. Proje yönetimi ve Oyun motorunun tercihi sebebiyle farklılık gösterir. Amplify Shader gibi araçlar, HLSL ile görsel shader’lar oluşturmayı daha kolay ve daha hızlı hale getirebilir. Optimizasyon ve Performans arayan bir o kadar da görselliği öne çıkaracak olan VFX ve Technical Artist çalışanlarının tercih etmesi Unity tarafında daha fazla önerilir. Unreal Engine 5 ile Material yapısı gün geçtikçe kendi alanında ilerlemekte ancak Eğitimleri bulmak zor ve toplulukta az geliştiğinden dolayı döküman kaynakları bulmak için zorlu süreçleri olabilir.