Oyun dünyasında stratejik avantaj sağlamak veya hikaye anlatımına derinlik katmak için kullanılan “duvar arkasını görme” ya da “X-Ray” efekti, oyunculara gizli düşmanları, önemli objeleri veya geçitleri görme imkanı sunar. Unity’nin Universal Render Pipeline (URP) ile bu tür gelişmiş görsel efektleri oluşturmak, Render Objects gibi güçlü özellikler sayesinde artık çok daha erişilebilir. Bu makalede, URP Render Objects kullanarak oyunlarınızda duvar arkasındaki objeleri nasıl göstereceğinizi adım adım öğrenecek ve kendi X-Ray sisteminizi kuracaksınız.
URP ve Render Özellikleri: Temeller
Universal Render Pipeline (URP), Unity’nin performans odaklı ve özelleştirilebilir bir render pipeline’ıdır. Mobil, konsol ve PC gibi farklı platformlarda yüksek performans sunarken, geliştiricilere render süreçleri üzerinde daha fazla kontrol sağlar. URP’nin en güçlü yanlarından biri, render pipeline’ına özel render pass’lar veya efektler eklemenizi sağlayan “Render Özellikleri” (Render Features) mekanizmasıdır. X-Ray efekti gibi karmaşık görsel teknikler, bu özellikler aracılığıyla kolayca entegre edilebilir.
Render Özellikleri, sahnenin renderlanma aşamasına müdahale etmenizi sağlar. Örneğin, belirli objeleri farklı bir materyalle veya farklı bir render sırasıyla çizmek isteyebilirsiniz. X-Ray efektinde tam da bunu yapacağız: normalde görünmeyen objeleri, özel bir materyal ve render sırası ile duvarların üzerinden görünür kılacağız.
X-Ray Efekti İçin Render Objects Kullanımı
URP’deki “Render Objects” özelliği, belirli kriterlere uyan (katman, etiket vb.) objeleri seçip, onları özel bir materyal ile farklı bir render pass’te çizmenizi sağlar. Bu, X-Ray efektimiz için mükemmel bir araçtır.
Adım 1: URP Projesi Oluşturma ve Ayarları Yapılandırma
Öncelikle Unity’de bir URP projesi oluşturduğunuzdan veya mevcut projenizi URP’ye geçirdiğinizden emin olun. Projenizde bir URP Asset’i (Project Settings > Graphics altında veya Assets > Create > Rendering > URP Asset yoluyla oluşturulabilir) ve bu asset’e bağlı bir Render Data Asset’i (Assets > Create > Rendering > URP Renderer) bulunmalıdır. Bu Render Data Asset’ini seçerek Inspector panelinde ayarlarını görebilirsiniz.
X-Ray ile görünmesini istediğiniz objeler için özel bir Layer (Katman) oluşturun. Örneğin, “XRayObjects” adında bir katman oluşturabilirsiniz. Bu objelerin normal render sürecinde görünmesini istemiyorsanız, varsayılan render ayarlarınızda bu katmanı görmezden gelebilirsiniz; ancak X-Ray efektiyle görüneceklerdir.
Adım 2: Render Objects Feature Oluşturma
Şimdi Render Data Asset’inize bir Render Objects Feature ekleyeceğiz:
- Project penceresinde, URP Renderer Data Asset’inize sağ tıklayın (genellikle “UniversalRendererData” olarak adlandırılır) ve
Create > Rendering > URP Renderer Feature > Render Objectsyolunu izleyerek yeni bir Render Objects Feature oluşturun. Bu yeni özelliği “XRayRenderObjects” olarak adlandırabilirsiniz. - Bu yeni özelliği, URP Renderer Data Asset’inizin Inspector panelindeki “Add Renderer Feature” düğmesine tıklayarak listeye ekleyin.
Adım 3: Render Objects Feature Ayarlarını Yapılandırma
Oluşturduğunuz “XRayRenderObjects” özelliğini seçin ve Inspector panelindeki ayarlarını yapılandırın:
- Name: “XRayRenderObjects” (isteğe bağlı, daha açıklayıcı bir isim verebilirsiniz)
- Event: Bu, objelerin render sırasını belirler. X-Ray objelerinin duvarların üzerinden görünmesini istediğimiz için, normalde renderlanan her şeyden sonra ama muhtemelen post-processing efektlerinden önce çizilmeleri gerekir. Genellikle
After Rendering TransparentsveyaBefore Rendering Post Processinguygun seçeneklerdir. - Filters > Layers: Buradan, X-Ray efekti ile görünmesini istediğiniz “XRayObjects” katmanını seçin.
- Filters > Render Queue: Varsayılan değerleri bırakabilirsiniz.
- Overrides > Material: Burası çok önemli. X-Ray objeleri için özel bir materyal atayacağız. Henüz oluşturmadık, ancak bir sonraki adımda yapacağız.
- Overrides > Depth: X-Ray efektinin duvarların arkasından görünmesi için, derinlik testini kapatmamız veya değiştirmemiz gerekir.
Depth TestayarınıAlwaysolarak ayarlayarak objelerin derinlikten bağımsız olarak her zaman çizilmesini sağlayabilirsiniz. AyrıcaDepth WriteayarınıOffolarak ayarlayarak bu objelerin sahnenin derinlik arabelleğini değiştirmesini engelleyebilirsiniz.
Adım 4: X-Ray Materyali ve Shader Oluşturma
Şimdi X-Ray efekti için özel bir materyal ve bu materyalin kullanacağı bir shader oluşturmamız gerekiyor. Bu shader, objeyi farklı bir renkte, saydam veya ana hatlarıyla (outline) çizebilir.
- Shader Oluşturma: Project penceresinde sağ tıklayın ve
Create > Shader > URP > Unlit Shader Graphyolunu izleyerek yeni bir Shader Graph oluşturun. Adını “XRayShader” olarak belirleyin. Shader Graph’i açın. - Shader Graph İçeriği:
- Bir
Colornode’u ekleyin ve X-Ray rengini (örneğin parlak yeşil veya mavi) ayarlayın. - Bu
Colornode’unuFragment Shader‘ınBase Colorgirişine bağlayın. Graph Settingspanelinde (sol üstte),SurfaceayarınıTransparentolarak değiştirin.Alphagirişine birFloatveyaSlidernode’u bağlayarak saydamlık kontrolü ekleyebilirsiniz.- Derinlik testi ve yazma ayarlarını doğrudan shader’da da yapabiliriz, ancak Render Objects Feature’daki ayarlar genellikle daha pratik ve genel geçer bir çözüm sunar.
- Kaydedin ve Shader Graph’i kapatın.
- Bir
- Materyal Oluşturma: Project penceresinde sağ tıklayın ve
Create > Materialyolunu izleyin. Adını “XRayMaterial” olarak belirleyin. Inspector panelinde, bu materyalin Shader’ını az önce oluşturduğunuz “XRayShader” olarak ayarlayın. Materyalin rengini ve saydamlığını buradan ayarlayabilirsiniz.
Adım 5: Materyali Render Objects Feature’a Atama
Geri dönüp “XRayRenderObjects” özelliğini seçin. Overrides > Material bölümüne, az önce oluşturduğunuz “XRayMaterial”i sürükleyip bırakın.
Adım 6: Objeleri Yapılandırma
Sahnenizdeki X-Ray efektiyle görünmesini istediğiniz tüm objeleri seçin ve Inspector panelindeki Layer (Katman) açılır menüsünden “XRayObjects” katmanını atayın. Artık bu objeler duvarların arkasından, belirlediğiniz X-Ray efektiyle görünmelidir.
Gelişmiş İpuçları ve Optimizasyonlar
Performans
X-Ray efekti, ek bir render pass gerektirdiği için performans üzerinde bir miktar etki yaratabilir. Performansı optimize etmek için:
- Yalnızca gerçekten X-Ray ile görünmesi gereken objelere “XRayObjects” katmanını atayın.
- Karmaşık X-Ray shader’ları yerine basit shader’lar kullanın.
- Efekti yalnızca ihtiyaç duyulduğunda (örneğin, bir yetenek aktifken veya belirli bir mesafedeyken) etkinleştirip devre dışı bırakın. Bunu bir C# scripti ile Render Objects Feature’ın
enabledözelliğini değiştirerek yapabilirsiniz.
Dinamik Aktivasyon
X-Ray efektini bir yetenek gibi dinamik olarak açıp kapatmak için aşağıdaki gibi bir C# scripti kullanabilirsiniz:
using UnityEngine;
using UnityEngine.Rendering.Universal;
public class XRayToggle : MonoBehaviour
{
public UniversalRenderPipelineAsset urpAsset; // URP Asset'inizi Inspector'dan sürükleyin
public string xRayFeatureName = "XRayRenderObjects";
private RenderObjects xRayRenderFeature;
void Start()
{
if (urpAsset == null)
{
Debug.LogError("URP Asset is not assigned!");
return;
}
// Renderer Data Asset'i bul
if (urpAsset.rendererDataList.Length > 0 && urpAsset.rendererDataList[0] != null)
{
UniversalRendererData rendererData = urpAsset.rendererDataList[0] as UniversalRendererData;
if (rendererData != null)
{
foreach (var feature in rendererData.rendererFeatures)
{
if (feature != null && feature.name == xRayFeatureName)
{
xRayRenderFeature = feature as RenderObjects;
break;
}
}
}
}
if (xRayRenderFeature == null)
{
Debug.LogError("XRayRenderObjects feature not found in URP Renderer Data.");
}
else
{
// Başlangıçta pasif yapabilirsiniz
xRayRenderFeature.SetActive(false);
}
}
void Update()
{
if (Input.GetKeyDown(KeyCode.X) && xRayRenderFeature != null)
{
xRayRenderFeature.SetActive(!xRayRenderFeature.isActive);
Debug.Log("X-Ray Feature Active: " + xRayRenderFeature.isActive);
}
}
}
Bu scripti bir GameObject’e ekleyin ve URP Asset’inizi Inspector’dan sürükleyin. “X” tuşuna bastığınızda X-Ray efekti açılıp kapanacaktır.
Görsel Geliştirmeler
- Outline Efekti: Shader Graph’inizde, objenin etrafına bir ana hat (outline) çizmek için
Sobeloperatörü gibi kenar algılama tekniklerini kullanabilir veya iki pass’li bir shader (bir pass objenin normalini, diğer pass ana hattını çizer) oluşturabilirsiniz. - Renk ve Saydamlık Ayarları: Materyalinizdeki renk ve saydamlık ayarlarını dinamik olarak değiştirerek efektin yoğunluğunu ve görünümünü kontrol edebilirsiniz.
- Uzaktan Solma: Kameraya olan uzaklığa göre X-Ray efektinin gücünü veya saydamlığını azaltarak daha gerçekçi bir geçiş sağlayabilirsiniz. Bunu shader içinde bir
Distancenode’u kullanarak yapabilirsiniz.
Sonuç
Unity URP’nin Render Objects özelliği, oyunlarınıza X-Ray görüşü gibi gelişmiş görsel efektler eklemek için inanılmaz derecede esnek ve güçlü bir araçtır. Bu makaledeki adımları takip ederek, duvarların arkasındaki objeleri gösteren kendi X-Ray sisteminizi kolayca kurabilirsiniz. Bu teknik, oyunculara stratejik avantajlar sunmanın yanı sıra, oyun dünyasına gizem ve keşif unsurları katmanıza da olanak tanır. Kendi yaratıcılığınızı kullanarak farklı shader’lar ve ayarlar deneyerek benzersiz X-Ray efektleri geliştirebilirsiniz. Unutmayın, iyi optimize edilmiş bir efekt, hem görsel olarak çekici hem de performans açısından verimli olmalıdır.



