Bir varlık kütüphanesi oluşturma, deneyiminiz içinde kolay erişim ve yeniden kullanım için varlıkların bir koleksiyonunu merkezi bir konumda içe aktarma ve yapılandırma sürecidir. Bu süreç, çevrenizi inşa etme aşamasında, her varlığın değerlerini performansı artırmak ve orta ile düşük seviye cihazlarda bellek kullanımını optimize etmek amacıyla yapılandırdığınızda size önemli ölçüde zaman kazandırabilir.
Çevre Sanatı - Oluşturma .rbxl dosyasını referans olarak kullanarak, bu çevre sanatı müfredatının bu bölümü, parlatılmış varlıklarınızdan bir varlık kütüphanesi oluşturmayı gösterir. Şunları içeren adım adım talimatlar sağlar:
- Karolarınızdan araziye özel malzemeler oluşturma.
- Trim sheet'iniz için SurfaceAppearance nesneleri oluşturma ve bunları varlık kütüphanenizdeki açılmamış katmanlara uygulama.
- Tüm cihazlarda optimal performans sağlamak için varlıklarınızın görüntüleme parametrelerini ayarlama.
- Varlıklarınızı paketlere dönüştürme, böylece projelerinizde güncelleyip yeniden kullanabilirsiniz.
Bu bölümü tamamladıktan sonra, varlık kütüphanenizi yaratıcı bir şekilde kullanmayı, gri kutu ortamını değiştirmeyi veya dönüştürmeyi ve genel 3D alanı geliştiren son dokunuşlar eklemeyi öğreneceksiniz.

Özel malzemeler oluşturun
Studio, özel malzemeleri MaterialVariant nesneleri olarak temsil eder ve bunlar MaterialService içinde yer alır. Bu MaterialVariant nesnelerinin, yüksek kaliteli fiziksel özelliklere sahip bir özel malzeme oluşturmak için dört döşenebilir doku haritasını birleştiren dört özelliği vardır:
- MaterialVariant.ColorMap – Albedo doku haritasını temsil eder.
- MaterialVariant.MetalnessMap – Metalik doku haritasını temsil eder.
- MaterialVariant.NormalMap – Normals doku haritasını temsil eder.
- MaterialVariant.RoughnessMap – Pürüzlülük doku haritasını temsil eder.
Bu özelliklere doku haritalarını sağladıktan sonra, yeni özel malzemenizi parçalar, katmanlar ve araziye uygulayabilirsiniz. Son örnek lazer tag ortamındaki Lumpy Moss, Flowering Lumpy Moss, Lumpy Moss with Stones ve Stones özel malzemelerini oluşturmak için örnek doku haritası .png dosyalarını kullanabilir veya önceki bölümde tasarladığınız kendi doku haritalarınızı kullanabilirsiniz.
Döşenebilir dokularınız için MaterialVariant nesneleri oluşturmak üzere:
Pencere ⟩ 3D menüsünden Malzeme'yi seçin ve Malzeme Yöneticisi'ni açın.
Malzemeler listesinde, döşenebilir dokunuza en yakın olan temel malzemeyi seçin. Örneğin, Lumpy Moss döşenebilir dokusu için bir MaterialVariant nesnesi oluşturuyorsanız, malzemenin fiziksel özelliklerini miras almasını sağlamak için varsayılan zemin malzemesini seçin.
Üst araç çubuğunda, ⊕ simgesine tıklayın. Palet üzerinde bir simge ile gösterilen yeni bir MaterialVariant görüntülenir.

İnceleme sekmesinde, Genel bölümüne gidin ve ardından malzemeyi düzeltilmiş dokunun adını karşılayacak şekilde yeniden adlandırın.

Doku Haritaları bölümündeki Renk'in sağ tarafında İçe Aktar butonuna tıklayın. Bir dosya tarayıcısı görüntülenir.

Dosya tarayıcısında, ilgili döşenebilir doku için Albedo doku haritası .png dosyasını seçin, ardından Aç butonuna tıklayın. Dosya tarayıcısı kapanır ve yeni renk haritası varlık kimliği ile görüntülenir.
Metalness, Normal ve Roughness doku haritaları için bu işlemi tekrar edin. Özel malzeme, doku haritalarını yansıtacak şekilde güncellenir.


Aşırılar bölümünde, Aşırı olarak ayarla anahtarını etkinleştirerek, araziye zemin uyguladığınızda Studio'nun bu özel malzemeyi kullanmasını sağlayın.

(İsteğe bağlı) Organik bir malzemeyi temsil eden bir özel malzeme oluşturuyorsanız,
- Döşeme bölümünde Desen açılır menüsüne tıklayın.
- Çıktıyı rastgele hale getirmek ve görünür döşemeyi azaltmak için Organik'i seçin.

Deneyiminizde dahil etmek istediğiniz her döşenebilir doku için bu işlemi tekrar edin.
SurfaceAppearance paketleri oluşturun
Studio, UV verisi içeren MeshParts nesnelerine eklenebilecek SurfaceAppearance nesneleri içinde trim sheet'leri kullanır. Özel malzemelerle benzer şekilde, SurfaceAppearance nesneleri, yüksek kaliteli 3D görsel yüzey tedavisi oluşturmak için dört trim sheet doku haritasını birleştiren dört özelliğe sahiptir:
SurfaceAppearance.ColorMap – Albedo doku haritasını temsil eder.
SurfaceAppearance.MetalnessMap – Metalik doku haritasını temsil eder.
SurfaceAppearance.NormalMap – Normals doku haritasını temsil eder.
SurfaceAppearance.RoughnessMap – Pürüzlülük doku haritasını temsil eder.
Bu özelliklere doku haritalarını sağladıktan sonra, SurfaceAppearance nesnesini trim sheet'inize uyan UV verisi olan bir MeshPart'ın çocuğu yapabilirsiniz ve UV verisi otomatik olarak ana katmana uygulanır. Bu nedenle, SurfaceAppearance nesnesinin bir paket olması faydalıdır, böylece aynı SurfaceAppearance nesnesini tüm modüler varlıklarınız ve prop'larınız arasında yeniden kullanabilirsiniz. Örneğin, aşağıdaki katmanlar, aynı trim sheet düzenine uyum sağlayan UV verisi içerir ve bunlar tek bir SurfaceAppearance nesne paketi içinde temsil edilmektedir.

Son örnek lazer tag ortamındaki modüler varlıklar ve prop'lar için UV verisine saygı gösteren bir SurfaceAppearance nesnesi oluşturmak üzere örnek doku haritası .png dosyalarını kullanabilir veya önceki bölümde tasarladığınız kendi doku haritalarınızı kullanabilirsiniz.
Modüler kitinize ve prop'larınıza ekleyeceğiniz SurfaceAppearance paketlerini oluşturmak için:
Workspace içine bir SurfaceAppearance nesnesi ekleyin.
SurfaceAppearance nesnesini seçin, ardından Özellikler penceresinde ColorMap özelliğini seçin. Bir açılır pencere görüntülenir.
Görüntü Ekle… butonuna tıklayın. Bir dosya tarayıcısı görüntülenir.

İlgili döşenebilir doku için Albedo doku haritasını seçin, ardından Aç butonuna tıklayın. Dosya tarayıcısı kapanır ve ColorMap özelliği yeni bir varlık kimliği ile güncellenir.
MetalnessMap, NormalMap ve RoughnessMap özellikleri için bu işlemi tekrarlayın ve dosya tarayıcısından ilgili doku haritalarını seçin.
Explorer penceresinde, SurfaceAppearance nesnesine sağ tıklayın ve bağlam menüsünden Pakete Dönüştür'ü seçin. Pakete Dönüştür diyaloğu görüntülenir.
Başlık ve Açıklama alanlarını doldurun, sahipliği kendinize veya bir gruba ayarlayın, ardından Gönder butonuna tıklayın. İşlem tamamlandıktan sonra, SurfaceAppearance nesnesinin simgesinin üzerindeki zincir bağlantı sembolü onu bir paket olarak tanımlar.

(İsteğe bağlı) SurfaceAppearance nesnesinin child PackageLink nesnesini seçin, ardından Özellikler penceresinde Otomatik Güncelle'yi etkinleştirin, böylece SurfaceAppearance nesnesinde herhangi bir değişiklik yaptığınızda paket otomatik olarak güncellenir.
Modüler varlıklar ve prop'lar içe aktarın
Studio, içe aktardığınız modüler varlıklar ve prop'ları varlığın her bir bileşeni için child MeshParts ile Model nesnesi olarak temsil eder. Örneğin, bir üst trim, alt trim ve duvar bileşenine sahip bir duvar bölümü içe aktardığınızda, Studio .fbx veya .obj dosyasını ayrı child Top_Trim, Bottom_Trim ve Wall MeshParts ile Wall_Section Model olarak temsil eder.

İçe Aktarıcıyı kullanarak, örnek modüler kiti ve prop'ları varlık kütüphaneniz için Studio'ya içe aktarabilir veya önceki bölümde tasarladığınız herhangi bir varlığı içe aktarabilirsiniz. Bu aracın işlevselliği hakkında daha fazla bilgi için İçe Aktarıcı makalesine bakınız.
Modüler varlıklarınızı ve prop'larınızı deneyiminize içe aktarmak için:
Dosya menüsünden İçe Aktar'ı seçin. Bir dosya tarayıcısı görüntülenir.
Bir modüler varlık veya prop için bir .fbx dosyası seçin.
Nesne önizlemesini doğrulayın ve içe aktarma ayarlarının nesneniz için doğru olduğunu kontrol edin.

Herhangi bir uyarı veya hata mesajlarını kontrol edin.
İçe Aktar butonuna tıklayın. Varlık, Explorer penceresinde ve görünüm alanında görüntülenir.
Her modüler varlık ve prop için bu işlemi tekrarlayın.
Tüm varlıklarınızı deneyiminizde gri kutu geometrinize yakın bir alana taşıyın. Bu alan, varlık kütüphanenizdir.
SurfaceAppearance verisini uygulayın
Üçüncü taraf modelleme yazılımlarında bir katmanın UV'lerini açarken, yazılım UV verisini katmanın .fbx veya .obj dosyasında saklar. O katmanı Studio'ya içe aktardığınızda, elde edilen MeshPart nesnesi bu veriyi korur, ancak trim sheet'inizden doku haritası özellikleri olan bir SurfaceAppearance nesnesi uygulamak için hala yapmanız gerekir.
Varlık kütüphanenizde açılan katmanlara SurfaceAppearance doku haritası verisini uygulamak için:
- Explorer penceresinde, SurfaceAppearance paketine tıklayın, ardından CtrlD (⌘D) tuşlarına basarak çiftlemeyi yapın.
- Çiftlenen SurfaceAppearance paketini bir modüler varlık veya bir prop'a child yapın. Varlık, UV verisini doku haritalarına uygular ve görsel tedavisini görüntüler.
- Her modüler varlık ve prop için bu işlemi tekrarlayın.
Fizik ve görüntüleme parametrelerini ayarlayın
Artık varlıklarınızı Studio'da yer aldığından, fizik ve görüntüleme parametrelerini ayarlamak önemlidir. Böylece varlıklar, bellek ve GPU kısıtlamaları olan cihazlar arasında en yüksek görsel kaliteyi koruyabilir. Genel olarak, bu bölümdeki yönergelere ne kadar çok uyarsanız, deneyiminizi o kadar iyi performanslı hale getirirsiniz. Ancak, her varlığı çevrede nerede yerleştirdiğinizi dikkatlice düşünmek önemlidir, çünkü estetik hedeflerinizi ve oyun gereksinimlerinizi korumanız gerekir.
Sabitlenmiş
BasePart.Anchored özelliği, Roblox Motoru'nun fizik sisteminin nesnenin konumunu etkileyip etkilemeyeceğini belirler. Bu özelliği bir Part veya MeshPart için etkinleştirdiğinizde, nesne fiziksel hesaplamalardan çıkarılır; yani, nesne hiç bir zaman yer çekimi veya diğer nesnelerin çarpışması nedeniyle pozisyonunu değiştirmeyecektir.
Fiziksel bir tepki simüle etmeyen nesneler, fiziksel hesaplamalar için gerekli olan GPU'yu almadıkları için daha ucuz bir şekilde işlenir. GPU'yu serbest bıraktığınızda, deneyiminizin performansını artırırsınız, özellikle hızlı tempolu oyun için GPU'yu kurtarması gereken düşük seviye cihazlarda. Bu nedenle, her varlık, son örnek lazer tag ortamındaki kapılardan başka hepsi sabitlenmiştir.
Çarpışma
BasePart.CanCollide özelliği, nesnenin diğer nesnelerle fiziksel olarak etkileşip etkileşmeyeceğini belirler. Bu özelliği bir Part veya MeshPart için etkinleştirdiğinizde, nesne geçilemez olur ve Roblox Motoru bunu fizik hesaplamalarında dikkate alır. Bu hesaplamalar, motorun fizik hesaplamalarındaki birçok nesneyi dikkate alması gerektiğinde deneyiminizin performansını etkileyebilir.
Performans üzerindeki etkisini azaltmak için, kullanıcıların asla etkileşime geçmeyeceği nesneler için bu özelliği devre dışı bırakın. Örneğin, son örnek lazer tag ortamı, tüm bitkiler için bu özelliği devre dışı bırakır.

Dokunma
BasePart.CanTouch özelliği, Touched ve TouchEnded olaylarının nesnede ateşlenip ateşlenmeyeceğini belirler. Bu özelliği bir Part veya MeshPart için etkinleştirdiğinizde, Roblox Motoru nesnenin dokunma olay durumu olup olmadığını kontrol eder, böylece bir olayı tetikleyip tetiklemeyeceğini belirler.
Bu işlem her bir çerçeve için gerçekleşir; eğer motor, aynı anda birçok nesnenin dokunma olay durumunu kontrol etmek zorundaysa, bu bellek açısından önemli bir yük oluşturabilir. Bu nedenle, bu özelliği yalnızca bir olayı tetiklemesi gereken nesneler için etkinleştirin.
Sorgulama
BasePart.CanQuery özelliği, Roblox Motoru'nun nesneyi mekansal sorgulama işlemleri (örneğin, ray çizmeler) sırasında dikkate alıp almadığını belirler. Studio, varsayılan olarak her Part veya MeshPart için bu özelliği etkinleştirir; bu da motorun her nesnenin mekansal sorgulama işleminin çağırılması gerekip gerekmediğini kontrol ettiği anlamına gelir. Bu işlem her bir çerçeve için gerçekleşir; eğer motor, aynı anda birçok nesne için bu kontrolleri yapmak zorundaysa, bu önemli bir bellek yükü oluşturabilir.
Bu nedenle, Roblox Motoru'nun mekansal sorgulama işlemleri için dikkate alması gerekmeyen nesneler için bu özelliği devre dışı bırakmanız önerilir. Bu özelliği devre dışı bırakma kararını verirken, her varlığın oyun üzerindeki etkisini düşünün. Örneğin, son örnek lazer tag ortamı, kullanıcıların lazerlerini lazer tag silahlarından ateşlerken muhafaza etmesi gerektiği için, binanın her bir duvarında bu özelliği etkin tutar. Motor, bu varlıkları dikkate almazsa, lazer binanın içinden geçer gibi olur hiç yokmuş gibi.
Gölge Oluştur
BasePart.CastShadow özelliği, nesnenin gölge olup olmadığını belirler. Bu özelliği bir Part veya MeshPart için etkinleştirdiğinizde, Roblox Motoru run time’da nesnenin her bir köşe noktasını hesaplar ve ardından gölge oluşturmak için güneşten herhangi bir komşu nesneye bir raycast çizer.
Bu hesaplamalar, özellikle çok sayıda karmaşık geometrik nesneye sahip olduğunuzda performans maliyeti oluşturabilir. Bunun nedeni, karmaşık geometriye sahip nesnelerin geometrik olarak basit olanlardan daha fazla poligon içermesidir; bu da motora nesnenin gölgesini hesaplamak için daha fazla köşe noktası gerektiği anlamına gelir. Bir nesnedeki poligon sayısı azaldıkça, işlem daha hızlı ve gölgesi daha ucuz hale gelir.

Gölgelikler, 3D geometrik derinliği olan nesnelere büyük bir gerçekçilik hissi katabilir. Bu nedenle, bu özelliği devre dışı bırakacağınız yerleri belirlerken, nesnelerin çevreye büyük bir görsel geliştirme sağladığı ve kullanıcıların eksik gölgeleri fark edeceği yerleri düşünün. Örneğin, bitkiler için karmaşık gölgeler, kullanıcıların görebileceği dış mekan alanında büyük bir gömme hissi sağlayabilir, ancak kullanıcıların asla etkileşime geçmeyeceği tavan arasından sızan bitkiler için aynı gömme hissi gerekli değildir.


İki Taraflı
MeshPart.DoubleSided özelliği, bir katmanın iki yüzünün veya çokgeninin görüntülenip görüntülenmeyeceğini belirler. Bu özelliği bir düz MeshPart, örneğin yapraklar, saç veya bez katmanları için etkinleştirdiğinizde, Roblox Motoru, nesneyi her açıdan görmeye imkân tanımak için katmanın her iki yüzünü veya çokgenini işler. Örneğin, aşağıdaki ağaç yaprakları tek taraflı düz katmanlardır ve bu özelliği etkinleştirdiğinizde, kameradan uzaktaki yapraklar kullanıcıya görünür hale gelir.


Bu özellik, çevrenize gerçekçilik katmak için yararlıdır; ancak motorun nesnenin çokgenlerini iki kez işlemesi gerektiğinden performans açısından bir maliyete gelir: bir kez kullanıcının kameraya bakan tarafı için ve tekrar kullanıcının kameradan uzak olan katmanlar için. Performansa olan bu etkinin bir kısmını ortadan kaldırmak için, final örnek lazer tag ortamı bu özelliği yalnızca bitki örtüsü için etkinleştirir, çünkü bu çevrede gerçekçilik açısından güçlü bir görsel etki yaratır.
Çarpışma Kesinliği
MeshPart.CollisionFidelity özelliği, bir katman veya birleşimin fiziksel çarpışma kutusunun, görsel temsil ile ne derece yakın olduğunu belirler. Varsayılan olarak, bu ayar, bir çarpışma kutusunu, katmanın çokgen şekliyle yaklaşık olarak eşleşecek şekilde oluşturur; yani, kullanıcıların nesneyle çarpıştıkları yer, katmanın gerçek geometrisiyle benzerdir. Örneğin, aşağıdaki görüntülerdeki kale katmanının varsayılan çarpışma kutusu, geometrisinin şekline çok yakındır.


Bu özelliği farklı bir değere ayarlamak, bir katmanın çarpışma kutusunun hassasiyetini azaltır. Örneğin, bu özelliği Hull olarak ayarladığınızda, Roblox Motoru, katmanın çarpışma kutusundaki köşe sayılarını büyük ölçüde azaltır. Bu özelliği Box olarak ayarladığınızda ise, motor, katmanı saran bir küp çarpışma kutusu oluşturur. Ayrıca, bir katmanın çarpışma kutusunda hassasiyeti artırmak isterseniz, bu özelliği PreciseConvexDecomposition olarak ayarlayarak çarpışma kutusunun köşe sayısını artırabilirsiniz.



BasePart.CastShadow ile benzer şekilde, Roblox Motoru'nun işlemesi gereken köşe sayılarına sahip oldukça yüksek bir performans maliyeti vardır. Bu nedenle, her katmanın kullanıcıların etkileşime geçmesini istediği şekilde etkileşimde bulunup bulunduramayacağınızı dikkate almanız önemlidir. Hassas bir çarpışma kutusunun gerekli olmadığı durumlarda, bu özelliği Box veya Hull olarak ayarlayın.
Bu kavramı göstermek için, aşağıdaki görüntülere bakarak, final örnek lazer tag ortamındaki ilk ve ikinci katlar arasında yükseklik farkı sağlayan duvar modelinin her bir katmanının çarpışma kutusunu sunduğu şekilde referansınızı oluşturabilirsiniz. Ana duvar için varsayılan çarpışma kutusu çok gereksiz geometri içerir; sadece kullanıcıların bu yönde hareketini durdurmak için bir yüzey sağlaması yeterlidir. Bu nesneye çarpışma ayarını Box olarak ayarlarsanız, gereksiz geometrileri kaldırabilir ve çarpışma kutusunun işlevselliğini muhafaza edebilirsiniz.



Bu kararları alırken, kullanıcıların çevrenizde gezinirken etkileşimde bulunabileceği şeklin nasıl değişeceğini dikkate almak önemlidir. Örneğin, duvar modelinin trim katmanları için bu özelliği Box olarak ayarlarsanız, kullanıcılar, bu yönde sıçramak istediklerinde çarpışma kutusuyla karşılaşacaklardır. Bunun yerine, köşelerini katmanın geometrisiyle daha yakından eşit tutarak bu nesneleri Hull olarak ayarlayın, böylece köşe sayısını azaltarak daha fazla kullanıcı deneyimi sağlamış olursunuz.


Çarpışma kutusunun tam olarak modelin şekline uyması gerektiğini unutmayın; özellikle kullanıcıların onun şeklini nasıl etkileyebileceğini kontrol etmeniz gerektiğinde. Örneğin, final örnek lazer tag ortamında, kullanıcıların yalnızca kapının kenarlarıyla çarpışması ve kapının kendisiyle değil, aksi takdirde dövüş bölgesine giriş yapamazlardı.

Görüntüleme Kesinliği
MeshPart.RenderFidelity özelliği, kullanıcıya gösterilen katmanın detay seviyesini belirler. Bu özelliği Enum.RenderFidelity.Automatic olarak ayarladığınızda, Roblox Motoru, kullanıcı katmandan daha uzaktayken katmanın fidelitesini azaltır; bu özelliği Enum.RenderFidelity.Precise olarak ayarladığınızda ise, katmanınızdaki her bir köşe noktası, aralarındaki uzaklıktan bağımsız olarak tam olarak istediğiniz gibi görüntüler.
Motorun, kullanıcının izlediği dizilerin her bir detayına odaklanması gereken daha fazla nesneyi kesin olarak işlemek zorunda kalması, özellikle yüksek köşe sayısına sahip olduğunda, performans maliyetini artırır. Performans üzerindeki bu etkinin bir kısmını ortadan kaldırmak için, bu özelliği, modüler varlıklar ve prop'lar gibi geometrik karmaşıklığı olan nesneler için, daha uzaktan tümüyle görüntülenmeleri gerekmediğinden Enum.RenderFidelity.Performance olarak ayarlayın. Bu, deneyiminizin poligon sayısını azaltır; genel görsel kaliteden ödün vermeden.
Varlıkları paketlere dönüştürün
Artık modüler varlıklarınız Studio'da yüksek görsel kalitede görünmeyi sağlamak için görüntüleme parametreleri ile var, pakete dönüştürmenin zamanı geldi. Varlıklarınızı paketlere dönüştürmek önemlidir çünkü bunları mevcut deneyiminizde ve diğer projelerde tekrar tekrar yeniden kullanmanıza olanak tanır. Ayrıca, bir paket üzerinde yapılan düzenlemeler anında tüm örneklerine yayılacağından, iterasyon sürecinizde size çok zaman kazandırır.
SurfaceAppearance nesneleriniz zaten paketler olduğundan, Model nesnelerinizi paketlere dönüştürdüğünüzde, bunlar iç içe paketler haline gelir. İç içe paketler, Model nesne paketiyle bağımsız olarak değiştirebileceğiniz child nesnelerinin karmaşık ağaç yapılarını korumanızı sağlar. Bu, varlıklarınızın bireysel bileşenleri üzerinde daha büyük bir kontrol sağlamanıza olanak tanır.

Modüler varlıklarınızı ve prop'larınızı paketlere dönüştürmek için:
Explorer penceresinde, bir modüler varlığa veya prop'a sağ tıklayın ve bağlam menüsünden Pakete Dönüştür'ü seçin. Pakete Dönüştür diyaloğu görüntülenir.
Başlık ve Açıklama alanlarını doldurun, sahipliği kendinize veya bir gruba ayarlayın, ardından Gönder butonuna tıklayın. İşlem tamamlandıktan sonra, model simgesinin üzerindeki zincir bağlantı sembolü onu bir paket olarak tanımlar.

Her bir modüler varlık ve prop için bu işlemi tekrarlayın.
Varlık kütüphanenizin genel düzeninden memnun kaldığınızda, yeni parlatılmış varlıklarınızla çevreyi dekore etmeye ve dünyanızı canlandırmak için 3D alanın diğer unsurlarını yapılandırmaya geçebilirsiniz.