Gereksinimler ve Ön Hazırlık
İleri düzey bir Karma Gerçeklik filtresi geliştirmek için geliştirme ortamınızın güncel olması kritiktir. Flutter 3.24 ve üzeri sürümler, AR (Artırılmış Gerçeklik) entegrasyonları için gerekli olan donanım erişim katmanlarını daha verimli yönetmektedir.
- Flutter SDK 3.24+ ve Dart 3.5+ yüklü olmalıdır.
- Android için ARCore, iOS için ARKit destekli fiziksel bir cihaz (emülatörler MR testleri için yeterli değildir).
ar_flutter_pluginveyaflutter_scenegibi güncel kütüphanelerin yapılandırılması.- 3D model varlıklarınız için .glb veya .gltf formatında optimize edilmiş dosyalar.
Aşağıdaki komut ile projeniz için gerekli bağımlılıkları pubspec.yaml dosyanıza ekleyerek işe başlayın:
dependencies:
flutter:
sdk: flutter
ar_flutter_plugin: ^0.6.2
vector_math: ^2.1.4
Adım 1: Kamera Akışını ve AR Oturumunu Yapılandırma
Karma gerçeklik filtresinin temel taşı, cihazın kamerasından gelen verinin AR motoru ile senkronize edilmesidir. AR oturumunu başlatırken, yüzey algılama ve ışık tahmini gibi özellikleri aktif etmeniz gerekir.
void onARViewCreated(ARSessionManager arSessionManager, ARObjectManager arObjectManager, ARAnchorManager arAnchorManager, ARLocationManager arLocationManager) {
this.arSessionManager = arSessionManager;
this.arObjectManager = arObjectManager;
this.arSessionManager.onInitialize(
showFeaturePoints: false,
showPlanes: true,
handlePans: true,
handleRotation: true,
);
}
Bu kod bloğu, AR oturumunun başlatılmasını sağlar. showPlanes parametresi, uygulamanın zeminleri algılamasına olanak tanır, bu da filtrenin gerçek dünyadaki nesnelerle etkileşime girmesi için zorunludur.
Adım 2: 3D Model Entegrasyonu ve Filtre Katmanı
Filtrenin görsel kalitesini belirleyen en önemli unsur, 3D modellerin sahneye nasıl yüklendiğidir. Modellerinizi assets klasöründe tutmalı ve mümkün olduğunca düşük poligon sayısına sahip (low-poly) modeller tercih etmelisiniz.
Future addModelToScene(String modelPath) async {
var newNode = ARNode(
type: NodeType.localGLTF2,
uri: modelPath,
scale: Vector3(0.2, 0.2, 0.2),
position: Vector3(0.0, 0.0, -1.0));
bool? didAddNode = await arObjectManager.addNode(newNode);
}
Bu fonksiyon, belirtilen yoldaki 3D nesneyi kamera merkezinin bir metre önüne yerleştirir. Karma gerçeklikte "ölçekleme" (scale) değeri, nesnenin gerçek dünyadaki boyut algısını doğrudan etkiler.
Adım 3: Gerçek Zamanlı Işıklandırma ve Gölgelendirme
Filtrenin "gerçekçi" görünmesi için ışıklandırma hayati önem taşır. AR motorunun sağladığı ışık tahmin verilerini kullanarak, sanal nesnenin ortam ışığına göre renk değiştirmesini sağlayabilirsiniz.
void applyLightEstimation(LightEstimate estimate) {
double intensity = estimate.intensity;
// Nesne materyallerine ışık yoğunluğunu uygula
material.color = Colors.white.withOpacity(intensity);
}
Bu yöntem, ortam çok karanlık olduğunda nesnenin de kararmasını sağlar. Bu tür detaylar, kullanıcının filtreyi "gerçek" olarak algılamasını sağlayan temel unsurlardır.
Adım 4: Performans Optimizasyonu ve Bellek Yönetimi
Mobil cihazlarda Karma Gerçeklik, CPU ve GPU'yu yoğun kullanır. Uygulamanızın donmaması için gereksiz nesneleri sahneden kaldırmalı ve render döngüsünü optimize etmelisiniz.
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Local Asset Render | Düşük gecikme, hızlı yükleme | Uygulama boyutu artar |
| Cloud Asset Fetching | Dinamik içerik güncelleme | İnternet bağımlılığı, gecikme |
Bellek sızıntılarını önlemek için dispose metodunda tüm AR oturumlarını sonlandırdığınızdan emin olun.
@override
void dispose() {
arSessionManager.dispose();
super.dispose();
}
Adım 5: Kullanıcı Etkileşimi ve Jest Kontrolleri
Kullanıcının ekrandaki nesneyi döndürmesi veya boyutlandırması, ileri düzey bir filtre için olmazsa olmazdır. GestureDetector kullanarak dokunma olaylarını dinleyebilir ve bunları 3D dönüşüm matrislerine aktarabilirsiniz.
onPanUpdate: (details) {
// Nesne rotasyonunu güncelle
currentNode.rotation = Quaternion.euler(0, details.delta.dx, 0);
},
Adım 6: Güvenlik ve Üretim Ortamı Uyarıları
Dikkat: Karma gerçeklik uygulamalarında kamera verisi hassas bir veridir. Kullanıcıdan mutlaka izin almalı ve kamera akışını asla sunucuya kaydetmemelisiniz. Ayrıca, üretim ortamında (production) 3D modellerin güvenli kaynaklardan çekildiğinden ve XSS benzeri saldırılara karşı varlık doğrulama süreçlerinden geçtiğinden emin olun.
Güvenlik için her zaman https protokollerini kullanın ve uygulama izinlerini AndroidManifest.xml ile Info.plist dosyalarında kısıtlayın.
Sıkça Sorulan Sorular
Flutter ile AR performansı neden düşük olabilir?
Genellikle yüksek poligonlu 3D modellerin kullanılması veya render döngüsünde gereksiz işlem yapılması (CPU'da ağır hesaplamalar) performansı düşürür. Modellerinizi optimize edin.
Filtreler neden titreme yapıyor?
Cihazın ivmeölçer ve jiroskop verileri ile AR motorunun senkronizasyonu bozulduğunda titreme oluşur. Işıklandırma ve yüzey takibini kararlı hale getirmek için cihazı daha iyi aydınlatılmış bir ortamda test edin.
Hangi 3D dosya formatı en iyisidir?
Flutter ve mobil AR için .glb (GL Transmission Format) endüstri standardıdır. Hem doku hem de geometri verilerini tek bir dosyada barındırdığı için en hızlı yüklenen formattır.
ARCore ve ARKit arasındaki farklar nelerdir?
ARCore Android, ARKit ise iOS için optimize edilmiştir. Flutter, bu iki farklı kütüphaneyi tek bir API altında birleştirerek geliştiricinin işini kolaylaştırır.
Kullanıcı gizliliği için ne yapmalıyım?
Kamera erişimini sadece filtre aktifken isteyin ve uygulama arka plana alındığında kamera oturumunu mutlaka sonlandırın.
İleri Düzey Hata Ayıklama ve Profilleme Stratejileri
Karma gerçeklik projelerinde karşılaşılan en büyük sorunlardan biri, render döngüsü ile kamera akışı arasındaki senkronizasyon hatalarıdır. Uygulamanızın üretim ortamına geçmeden önce kararlılığını test etmek için aşağıdaki stratejileri izlemelisiniz.
Render Döngüsü Gecikmelerini Tespit Etme
Flutter'ın SchedulerBinding yapısını kullanarak, her karede (frame) geçen süreyi izleyebilir ve 16ms'lik (60 FPS için) sınırı aşan işlemleri loglayabilirsiniz. Eğer AR filtresi bu sınırı aşarsa, kullanıcı deneyiminde "donma" hissi oluşur.
void _checkFramePerformance() {
SchedulerBinding.instance.addPostFrameCallback((_) {
final stopwatch = Stopwatch()..start();
// AR render işlemleri burada tetiklenir
stopwatch.stop();
if (stopwatch.elapsedMilliseconds > 16) {
debugPrint("Uyarı: Kare süresi aşıldı: ${stopwatch.elapsedMilliseconds}ms");
}
_checkFramePerformance();
});
}
Bellek Sızıntılarını İzleme (Memory Leak Detection)
AR filtrelerinde 3D modeller, dokular (textures) ve kamera frame'leri yoğun bellek tüketir. dart:developer kütüphanesini kullanarak nesne tahsislerini (allocation) takip edin. Özellikle dispose() edilmeyen ARCoreController nesneleri, uygulamanın kısa sürede çökmesine neden olur.
Dağıtım (Deployment) Öncesi Optimizasyon Kontrol Listesi
Uygulamanızı uygulama mağazalarına yüklemeden önce, AR deneyiminin düşük ve orta segment cihazlarda nasıl çalıştığını doğrulamak için şu adımları izleyin:
- Asset Sıkıştırma: 3D modellerinizi (GLB/GLTF) Draco sıkıştırma algoritması ile küçültün. Bu, uygulama boyutunu %70'e kadar azaltabilir.
- Shader Ön Derleme: Shader'ların ilk açılışta derlenmesi takılmalara yol açar. Uygulama açılışında düşük çözünürlüklü bir "splash screen" ile shader'ları arka planda ısıtın (warm-up).
- Cihaz Uyumluluk Kontrolü: Uygulamanızın sadece ARCore veya ARKit destekleyen cihazlarda görünür olmasını sağlamak için
AndroidManifest.xmldosyanıza gerekli meta verileri ekleyin.
İpucu: Test aşamasında mutlaka "Remote Config" kullanarak, performans sorunu yaşayan cihazlarda AR filtrelerinin kalitesini (örneğin gölge çözünürlüğünü) dinamik olarak düşüren bir mekanizma kurun.
Alternatif Kütüphane Seçimi: Google ML Kit ile Hibrit Yaklaşım
Sadece ARCore yeterli gelmediğinde, yüz hatlarını daha hassas takip etmek için google_ml_kit kütüphanesini AR oturumuyla birleştirebilirsiniz. Bu sayede ARCore'un sunduğu 3D derinlik verisi ile ML Kit'in sunduğu 2D yüz landmark verisini birleştirerek çok daha kararlı filtreler oluşturabilirsiniz.
| Özellik | ARCore/ARKit | ML Kit Hibrit |
|---|---|---|
| Derinlik Algısı | Yüksek | Düşük |
| Yüz Takibi Hassasiyeti | Orta | Çok Yüksek |
| Performans Maliyeti | Düşük | Yüksek |
Sonuç
Flutter ile ileri düzey bir Karma Gerçeklik filtresi geliştirmek, doğru araçları ve optimizasyon tekniklerini birleştirmeyi gerektirir. Bu rehberde öğrendiğiniz kamera yönetimi, 3D model entegrasyonu ve performans optimizasyonları, profesyonel bir AR deneyimi oluşturmanız için temel teşkil eder. Bir sonraki adım olarak, gerçek zamanlı yüz takibi (Face Tracking) kütüphanelerini inceleyerek filtrelerinizi insan yüzü üzerine sabitlemeyi deneyebilirsiniz.
Not: Kod güvenliği ve veri gizliliği sorumluluğu tamamen geliştiriciye aittir. Kullanıcı verilerini korumak için güncel güvenlik protokollerini takip etmeyi unutmayın.

Yorumlar (0)
Yorum Yaz