ululemr

Yeni üye
6 Mar 2015
201
23
0
36
(34) İstanbul Avrupa
fb.me
Unreal Engine 4 için OpenStreetMap Eklentisi​

Bu eklenti, "OpenStreetMap XML" verilerini "Unreal Engine 4" projenize yeni bir "StreetMap" varlık türü olarak aktarmanıza olanak tanır. "Sokak Görünüm Bileşenleri (Street Map Component)" örneğini, sokakları ve binaları oluşturmak için kullanabilirsiniz.

UE4OSMBrooklyn.png


UE4OSMRaleigh.png


İyi eğlenceler!! --Mike

(Not: Bu eklenti, Epic Games'in UE4 Tekniker Direktörü Mike Fricker tarafından, sadece eğlenceli bir hafta sonu projesi olarak yapılmıştır ve Epic Games tarafından desteklenmemektedir.)




Hızlı Başlangıç

Yapımı ve çalıştırması kolaydır:

  • Bu sayfadan, "StreetMap" eklentisi kaynağını indirin (Klonlayın veya ZIP olarak indirin).
  • Dosya ve klasörleri, projenizin "Plugins" klasörü altındaki "StreetMap" klasörüne taşıyınız. Yani: "/MyProject/Plugins/StreetMap/" gibi görünmelidir.
  • C++ projenizi yeniden oluşturun (Rebuild edin). Yeni eklenti de derlenecek!
  • Editörü açın. Harita verilerini almak için "OpenStreetMap XML" dosyalarını (.osm) İçerik Tarayıcısı'na sürükleyip bırakarak ya da "Import" seçeneğini kullanarak aktarabilirsiniz.
  • Bir "Sokak Haritası Bileşeni (Street Map Component)" oluşturun ve yeni öğenizi, bileşenin "Street Map" varlığına atayın. Artık sokakları ve binaları 3D görünüm penceresinde görebilirsiniz.

Yk0RqLw.png


UE4OSMManhattan.png


Yeniden inşa (Rebuild) başarılı oluyor, ancak yeni özellikleri görmüyorsanız, "Ayarlar" araç çubuğu düğmesini tıklayıp, ardından "Eklentiler"i tıklayarak, "Sokak Haritası (Street Map)" eklentisinin etkin olup olmadığını tekrar kontrol edin. "Sokak Haritası (Street Map)" eklentisini bulun ve "Etkin" seçeneğinin işaretli olduğundan emin olun.

Eğer UE4'deki eklentiler konusunda yeniyseniz, hemen buradan birçok bilgi bulabilirsiniz.




OpenStreetMap Verilerini Aktarmak

Yasal: OpenStreetMap verileri, ODC Açık Veritabanı Lisansı (ODbL) kapsamında lisanslanmıştır. Bu verileri projenizde kullanırsanız, söz konusu lisansın şartlarını anladığınızdan ve bunlara uygun olduğunuzdan emin olun. Hukuki SSS sayfasını kontrol edebilirsiniz.

UE4OSMExport.png


İlgilendiğiniz bir konuma ait verileri nasıl alacağınız aşağıda açıklanmıştır:

  • OpenStreetMap.org sitesine gidin ve dünyadaki en sevdiğiniz yere gitmek için arama özelliğini kullanın.
  • Dışa Aktarma Moduna gitmek için, sayfanın üst kısmındaki gezinme çubuğundaki "Dışa Aktar" düğmesini tıklayın.
  • Dışa aktarmak istediğiniz bölgeyi tarayıcı pencerenizi dolduracak şekilde kaydırın ve yakınlaştırın. Dışa aktarma ve indirmenin hızlı bir şekilde tamamlanabilmesi için, makul ölçüde küçük bir alan ile başlayın. Küçük bir kasaba veya bir şehir bloğuna yakınlaşmayı deneyin.
  • Hazır olduğunuzda soldaki Dışa Aktar'ı tıklayın. OpenStreetMap bir XML dosyası oluşturacak ve birkaç saniye içerisinde indirmeyi başlatacaktır.

Kaydedilen dikdörtgeni kendinizce ayarlamak isterseniz, OpenStreetMap penceresinde "El ile farklı bir alan seç" i tıklayabilir ve dışa aktarılacak alanı, harita üzerindeki bir dikdörtgeni kendi isteğiniz doğrultusunda ayarlayabilirsiniz.

Birçok konumun bina geometrisi hakkında sınırlı bilgi sahibi olabileceğinizi unutmayın. Özellikle binaların yükseklikleri birçok şehirde eksik veya hatalı olabilir.

Dışa Aktar'ı tıkladıktan sonra bir hata iletisi alırsanız, OpenStreetMap isteğinizi karşılamak için çok meşgul olabilir. Overpass API'sını tıklayın veya diğer kaynaklardan birini kontrol etmeyi deneyin. İndirilen dosyanın ".osm" uzantısına sahip olduğundan emin olun. Çünkü; eklenti, sadece bu dosya türü ile çalışmaktadır. İndirilen dosyayı gerektiği gibi yeniden adlandırabilirsiniz.

Elbette, web üzerinde ham olarak OpenStreetMap XML verilerini bulabileceğiniz başka birçok yer var, ancak; şu an OpenStreetMap'ten doğrudan dışa aktarılan dosyalar ile eklentinin test edildiğini aklınızda bulundurun.




OpenStreetMap'i Düzenleme

Dikkat: OSM gerçek dünyayı kapsar ve yalnızca gerçeklere dayalı bilgiyi içerir. Kurgusal bir harita oluşturmak istiyorsanız, projeye yüklemediğiniz yerel bir XML dosyası oluşturmak için JOSM çevrimdışı düzenleyicisini kullanabilirsiniz.

Örneğin, yaşadığınız şehri düzenlemek için OSM'ye kolayca geri katkıda bulunabilirsiniz. Sadece www.openstreetmap.org adresinden kayıt olunuz ve düzenleme sekmesine tıklayınız. Çevrimiçi ID düzenleyicisi, havadan görüntü izlemenize ve POI'leri kolayca eklemenize izin verir. Daha fazla bilgi edinmek için buraya bakmanız yeterlidir:


Lütfen, proje topluluğunun önemli bir parçası olduğunu unutmayın. Bu nedenle, size yakın harita oluşturucularla iletişime geçmek, yerel etiketleme veya yazılı olmayan kurallarla ilgili daha fazla ipucu almak akıllıca olacaktır.




Eklenti Ayrıntıları

Street Map Assets

Bir OSM dosyasını içe aktardığınızda eklenti UE4'teki harita verilerini temsil edecek yeni bir "Street Map Asset" oluşturur. Bunları Sokak Haritası Bileşenlerine (Street Map Components) atayabilir veya doğrudan C++ kodundaki harita verileriyle etkileşimde bulunabilirsiniz.

Yollar tam bağlantı verileri ile ithal edilir! Bu, kendi gezinme algoritmalarınızı kolaylıkla tasarlayabileceğiniz anlamına gelir.

OpenStreetMap konum verisi coğrafi koordinatlarda (enlem ve boylam) depolanır, ancak UE4 bu koordinat sistemini doğal olarak desteklemez. Yani şu anda UE4'te küresel dünyalarla kolayca baş edemiyoruz. Bu nedenle, içe aktarma işlemi sırasında, tüm harita koordinatlarını düz 2D bir düzleme yansıtacağız.

OSM verileri çift hassasiyetle aktarılıyor, ancak UE4 sokak haritası öğenizi kaydetmeden önce, her şeyi tek hassas kayan noktaya kesiyoruz. Çalışma zamanında muazzam harita verileri takımlarıyla çalışmayı planlıyorsanız, bunu değiştirmeniz gerekir.




Sokak Görünüm Bileşenleri (Street Map Component)

Sokak Görünüm Bileşeninin (Street Map Component) örnek bir uygulaması, yüklenen cadde ve bina verileri kullanılarak oluşturulabilir bir kafes oluşturur. Bu, başlangıç noktası olarak kullanabileceğiniz çok basit bir bileşen.

Örnek uygulama, geleneksel bir statik mesh yerine, özel bir ilkel bileşen mesh oluşturur. Bunun nedeni, şehir sokaklarının ve binaların daha esnek hale getirilme davranışını, hatta dinamik yönleri de olanaklı kılmaktır.

Tüm Mesh verileri yükleme zamanında, renklendirilmiş yol şeritleri ve üçgen çatı poligonları bulunan basit yapı Mesh'leri de dahil olmak üzere, harita öğesindeki kartografik verilerden oluşturulur. Yollarda hiçbir spline enterpolasyonu yapılmaz.

Oluşturulan sokak haritası mesh renkleri ve normal renkleri vardır ve ona özel bir malzeme atayabilirsiniz. Yerleşik renkleri kullanmak istiyorsanız, malzemenizin Vertex Color ile Base Color'ı çarpımından emin olun. Mesh, tek bir draw call'da çok verimli bir şekilde render alabilecek şekilde ayarlanmıştır. Yollar basit dörtlü şeritler (tesselation ve collision yoktur) olarak temsil edilir. Doku koordinatları henüz desteklenmemektedir.

Oluşturulabilir mesh'in nasıl oluşturulduğunu kontrol etmek için, çeşitli "değiştirilebilir" değişkenler vardır. Bunları "UStreetMapComponent::GenerateMesh()" işlevinin üst kısmında bulabilirsiniz.

(Sokak Görünüm Bileşeni (Street Map Component), UE4'te kendi ilkel öğelerinizi nasıl yazacağınıza ilişkin basit bir örnek oluşturmaktadır.)




OSM Dosyaları

OpenStreetMap XML dosyalarını içe aktarırken, ilginç olan tüm veriy,i bir FOSMFile veri yapısında belleğe kaydederiz. Bu, XML dosyasında ham gösterime çok yakın olan verileri içerir. Koordinatlar, çift duyarlı kayan nokta noktasında, coğrafi konumlar olarak saklanır.

Herşeyi FOSMFile içine yükledikten sonra, verileri sindirip diske seri hale getirilebilen ve çalışma zamanında verimli bir şekilde yüklenebilecek bir biçime dönüştürülür (UStreetMap sınıfı).

Kullanım durumuna bağlı olarak, UStreetMap sınıfını, haritanın ham gösterimine daha yakın olan verileri depolamak için yoğun şekilde özelleştirmek isteyebilirsiniz. Örneğin, büyük ölçekli GPS gezintisi gerçekleştirmek isterseniz, çalışma zamanında daha hassas veri isteyebilirsiniz.




Bilinen Sorunlar

Çeşitli Sorunlar:

  • 2GB'dan büyük dosyalar içe aktarılırsa, UE4 çöker. Bu geçerli bir UE4 kısıtlamasıdır.
  • Üretilen OSM XML dosyalarının bazı değişkenleri doğru yüklenmeyecektir. Örneğin, değerler etrafında "tek tırnak" sınırlayıcıları henüz desteklenmemektedir.
  • OSM API'lerinin kullanımı, C ++'dan kolaydır. Ancak, Blueprint desteği, bu eklenti için bir odak noktası değildir. Yüksek performans için birçok yöntem yer almaktadır. Buna rağmen, Blueprint komut dosyaları eklenebilir.
  • Yukarıda belirtildiği gibi, koordinatlar, gelişmiş kullanım durumları için yeterli olmayacak şekilde tek hassasiyetle kesilir. Benzer şekilde, coğrafi koordinatlar ilk içe aktarma (import) aşamasının ötesinde korunmaz. Tüm koordinatlar bir düzlem üzerine yansıtılır ve haritanın sınırlayıcı dikdörtgenin merkezine göre göreli olarak yer değiştirir.
  • Çalışma zamanı veri yapıları, yol bulmayı desteklemek için kurulumdur (bkz. FStreetMapNode üye işlevleri), ancak bir GPS algoritmasına örnek uygulama henüz dahil edilmemiştir.
  • Üretilen mesh verileri şu an çok basit ve collision bilgileri, navigasyon mesh desteği ve doku koordinatları yok. Bu eklenti, sadece bir örnek olarak kullanılmak üzere tasarlanmıştır. Daha fazla render esnekliği, daha hızlı performans için importer (içe aktarıcı) harita geometrisi ve gerçek Static Mesh Asset'ları üretmek üzere değiştirilebilir.
  • Yapılabilecek diğer küçük geliştirmeler için, eklenti kaynak kodunda @todo öğesini arayabilirsiniz.




Uyumluluk

Bu eklenti, Visual Studio'yu, C ++ kod projesini ve GitHub'tan tam kaynak kodlu Unreal Engine 4'ü gerektirir. UE4'te programlama konusunda yeniyseniz, lütfen resmi Programlama Kılavuzu'na bakın!

Sokak Haritası eklentisi, UE4'ün desteklediği tüm platformlarda çalışmaktadır, ancak en son sürüm her platformda test edilmemiştir.

Kaynak kodunu güncel tutmaya çalışacağız, böylelikle Unreal Engine'in yeni sürümleri ile birlikte de kullanıma sunacağız.




Destek

Eklentiyi düzenli olarak güncellemeyi planlamıyorum, ancak kritik düzeltmelerin katkıda bulunduğu takdirde bunları gözden geçirip bütünleştirmeye çalışacağım.

Bug'lar için lütfen bir hata bildirimi gönderin, Pull Request gönderin ya da beni Twitter'da takip edin!

Son olarak, OpenStreetMap Vakfı'na ve harita verisine katkıda bulunan ve veritabanını koruyan muhteşem topluluğa büyük teşekkür ederim.




Arkadaşlar, bu yazıyı StreetMap GitHub sayfasından Yandex/Bing/Google Çeviricileri kullanarak, elimden geldiğince tam çevirmeye çalıştım. Çeviremediğim yerleri olduğu gibi yazmak zorunda kaldım. Eğer yöneticilerimiz veya İngilizce'si güzel olan arkadaşlarımız tam çeviri yapabilirler ise eğer, yorum olarak yazmalarını rica ediyorum.

Çeviremediğim yerlerden söz etmek gerekir ise: 7 maddelik "Bilinen Sorunlar" maddelerini tam çeviremedim.

Umarım bu eklenti ve yazı çevirim işinize yarar! :rolleyes: :shy:
 
Sağol Ali :rolleyes:

Yarın da nasıl kullanıldığına dair devam yazısı yazacağım.

Ama bir sorunum var! Yollar yapılıyor fakat binaları yapamıyorum! Acaba senin de test etme şansın var ise bir bakabilir misin? Binaların nasıl yapıldığına dair de bilgi edinirsek, forumdakileri de bilgilendirmiş oluruz.
 
ululemr' Alıntı:
Sağol Ali :rolleyes:

Yarın da nasıl kullanıldığına dair devam yazısı yazacağım.

Ama bir sorunum var! Yollar yapılıyor fakat binaları yapamıyorum! Acaba senin de test etme şansın var ise bir bakabilir misin? Binaların nasıl yapıldığına dair de bilgi edinirsek, forumdakileri de bilgilendirmiş oluruz.

Ne yazık ki, başka işlerle meşgulüm.