This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Fiziksel tabanlı işleme (Physically Based Rendering, PBR), ışığın yüzeylerle etkileşimini fizik ilkelerini kullanarak modelleyen bir gölgelendirme yaklaşımıdır. Temel renk, metaliklik çarpanı ve pürüzlülük gibi materyal özellikleri, yüzeyi sahnenin aydınlatmasından bağımsız olarak tanımlar.
Yerleşik glTF materyalleri PBR aydınlatması sağlar. Defold ayrıca içe aktarılan glTF 2.0 materyal özelliklerini ve desteklenen Khronos uzantılarının verilerini özel gölgelendiricilere sunar.
Bir glTF veya GLB dosyasını Model bileşeninin Scene özelliğine atayın. Düzenleyici materyalleri ve dokuları doldurmayı önerdiğinde sahnenin oluşturulan materyal eşlemelerini uygulamak ve varsa mevcut eşlemeleri değiştirmek için Auto Fill seçeneğini seçin. Bu materyaller yerleşik glTF gölgelendiricilerini kullanır ve gömülü görüntülere doğrudan başvurabilir. Eşlemelerinizi koruyup materyalleri ve dokuları elle atamak için Keep Current seçeneğini seçin. Gömülü kaynaklara göz atma ve tek tek örgü seçme için model içe aktarma iş akışına bakın.
Aşağıdaki materyaller /builtins/materials/ altında bulunur. Modelinize ve örnek oluşturma (instancing) kullanıp kullanmadığına uygun çeşidi seçin:
| Model türü | Materyal |
|---|---|
| Statik, örnek oluşturma kullanılmayan | gltf.material |
| Statik, örnek oluşturma kullanılan | gltf_instanced.material |
| İskelete bağlı (animasyonlu), örnek oluşturma kullanılmayan | gltf_skinned.material |
| İskelete bağlı (animasyonlu), örnek oluşturma kullanılan | gltf_skinned_instanced.material |
Dördü de yerel köşe uzayını ve aynı gltf.fp parça gölgelendiricisini kullanır. İskelete bağlı çeşitler, iskelete bağlama işlemini GPU üzerinde gerçekleştirir. GPU üzerinde iskelete bağlama ve örnek oluşturma için model materyali gereksinimlerine bakın.
Elle doku eşleme yaparken yerleşik materyaller şu örnekleyici adlarını kullanır:
| Doku | Örnekleyici | Kullanılan veri |
|---|---|---|
| Temel renk | PbrMetallicRoughness_baseColorTexture |
RGB rengi ve alfa |
| Metaliklik/pürüzlülük | PbrMetallicRoughness_metallicRoughnessTexture |
G kanalında pürüzlülük, B kanalında metaliklik |
| Normal | PbrMaterial_normalTexture |
RGB kanallarında teğet uzayındaki normal |
| Örtme | PbrMaterial_occlusionTexture |
R kanalında örtme |
| Işık yayma | PbrMaterial_emissiveTexture |
RGB rengi |
Bir kamera kurun ve modeli aydınlatmak için ışık bileşenleri ekleyin. Gölgelendirici, doğrudan aydınlatma için yönlü, noktasal ve spot ışıkları; basit bir ortam katkısı için de ortam ışıklarını kullanır. Materyaller, varsayılan işleme betiğinin çizdiği model etiketine sahiptir. Özel bir işleme betiği eşleşen bir yüklem çizmelidir.
Yerleşik gölgelendiriciler; metaliklik/pürüzlülük gölgelendirmesini, temel renk ve köşe rengini, teğet verileri bulunduğunda normal eşlemeyi, örtmeyi ve ışık yayma gücü dahil ışık yaymayı uygular. Aydınlatma için temel renk ve ışık yayma dokuları sRGB’den çözülür ve son renk tekrar sRGB’ye dönüştürülür. Metaliklik/pürüzlülük, normal ve örtme haritaları doğrusal veriler içerir.
Gölgelendirici, aydınlatmasız materyalleri ve maskeli alfayı dikkate alır; çift taraflı yüzeyler için normalleri ayarlar. İşleme durumu yine önemlidir:
graphics.BLEND_FACTOR_SRC_ALPHA ve graphics.BLEND_FACTOR_ONE_MINUS_SRC_ALPHA ile harmanlamayı etkinleştirin; saydam nesnelerin çizim sırasını ve derinlik yazmalarını işleme betiğinizde yönetin. Varsayılan model geçişi harmanlamayı otomatik etkinleştirmez.Yerleşik ortam katkısı, ortam haritası aydınlatması veya gölgeler içermeyen yaklaşık bir hesaplamadır. Saydam kaplama, ışık geçirimi, parıltı, yanardönerlik ve aynasal yansıma/parlaklık iş akışı gibi efektler özel gölgelendirme gerektirir; parametrelerini içe aktarmak bu efektleri gltf.fp içinde etkinleştirmez.
Aşağıdaki özellikler, bir model bileşenine atanan glTF 2.0 kaynak dosyalarından ayrıştırılır. Liste, kullanılabilir materyal verilerini açıklar; yerleşik aydınlatma yukarıda açıklanan alt kümeyi kullanır. Özelliklerin tümü standart değildir. Bazıları isteğe bağlı glTF uzantıları aracılığıyla sağlanır; glTF dosyasını dışa aktarmak için kullanılan araç bu uzantıları dosyaya dahil edebilir veya etmeyebilir. İlgili uzantı aşağıda özellik adından sonra parantez içinde belirtilmiştir.
Aşağıdaki bölümler özel gölgelendiricileri ele alır. Uygun yerleşik .material kaynağını ve gltf.fp dosyasını projenize kopyalayın, ardından kopyalanan materyalin Fragment Program özelliğini kendi gölgelendiricinize yönlendirin. Bu arayüzleri de değiştirmiyorsanız eşleşen glTF köşe programını, örnekleyici adlarını ve yerel köşe uzayını koruyun.
Yerleşik yardımcılar, doku örneklemeyi yüzey hazırlığından, BRDF hesaplamalarından ve aydınlatmadan ayırır. gltf_sampling.glsl, ham PbrMaterial uniform bloğunu okur ve çözümlenmiş, doğrusal materyal girdilerini içeren bir PBRMaterial değeri üretir. gltf_lighting.glsl, doğrudan ve ortam aydınlatmasını sağlar ve katkılarını birleştirir. Büyük/küçük harf kullanımı, ham uniform bloğunu örneklenmiş materyal yapısından ayırt eder.
Bu parça gölgelendiricisi, yerleşik aydınlatmayı korurken en düşük pürüzlülüğü yükseltir. Dört glTF materyal çeşidinin tümünün kullandığı köşe programlarıyla çalışır:
#version 140
#include "/builtins/materials/gltf_sampling.glsl"
#include "/builtins/materials/gltf_lighting.glsl"
out vec4 out_fragColor;
void main()
{
PBRMaterial inputs = pbr_sample_material(var_texcoord0, var_color);
inputs.roughness = max(inputs.roughness, 0.35);
// Sample textures, including the normal map, before discarding fragments.
PBRSurface surface = pbr_sample_surface(inputs, var_texcoord0);
if ((!inputs.doubleSided && !gl_FrontFacing) || pbr_should_discard_alpha(inputs))
{
discard;
}
// Derive BRDF values after editing the material inputs.
MaterialInfo material = pbr_create_material_info(inputs);
PBRLighting lighting = pbr_create_lighting();
if (!inputs.unlit)
{
lighting.direct = pbr_evaluate_direct_lighting(material, surface, var_view);
lighting.indirect = pbr_evaluate_ambient_lighting(material, ambient_light());
}
vec3 color = pbr_compose_lighting(inputs, lighting, inputs.occlusion, inputs.occlusion);
out_fragColor = vec4(pbr_linear_to_srgb(color), pbr_get_alpha(inputs));
}
pbr_create_material_info() çağrısından önce örneklenmiş materyal girdilerini düzenleyin. Bir yüzeyin görünüm uzayındaki konumunu veya normallerini değiştirirseniz türetilmiş dünya uzayı alanlarını güncellemek için pbr_finalize_surface(surface, var_view) çağırın. Özel bir BRDF veya tek tek ışık katkıları için yerleşik yardımcılardaki pbr_evaluate_brdf() ve pbr_evaluate_light() işlevlerini kullanın veya değiştirin.
lighting.indirect değerini kendi ortam aydınlatmanız veya genel aydınlatmanızla değiştirebilirsiniz. Dağınık ve aynasal yansıma katkıları doğrusal çıkan ışıktır; bu nedenle materyalin BRDF’sini ikinci kez uygulamayın. Gölge görünürlüğünü uygun doğrudan ışık katkısına uygulayın; pbr_compose_lighting() işlevinin görünürlük bağımsız değişkenleri yalnızca dolaylı aydınlatmayı etkiler. HDR hattı için ara hedefe doğrusal renk yazın ve sRGB dönüşümünü son geçişte yapın.
Tamamen özel bir gölgelendirici için tanınan üye adlarını ve türlerini içeren PbrMaterial adlı bir uniform bloğu bildirin. Defold, eşleşen alanları kaynak glTF materyalinden doldurur. Aşağıdaki bildirimler kullanılabilir özellik yapılarını açıklar; yalnızca gölgelendiricinizin ihtiyaç duyduklarını ekleyin. Yapıyı bildirmek veri sağlar, ancak örnekleme ve aydınlatma davranışını gölgelendiriciniz uygulamalıdır.
Bunları zaten bildiren gltf_sampling.glsl dosyasını dahil ederken uniform bloğunu veya PbrMetallicRoughness yapısını yeniden bildirmeyin. Aşağıdaki bildirimler, kendi materyal girdilerini yöneten gölgelendiriciler için bir alternatiftir.
struct PbrMetallicRoughness
{
vec4 baseColorFactor;
// R: metallic (Default=1.0), G: roughness (Default=1.0)
vec4 metallicAndRoughnessFactor;
// R: use baseColorTexture, G: use metallicRoughnessTexture
vec4 metallicRoughnessTextures;
};
struct PbrSpecularGlossiness
{
vec4 diffuseFactor;
// RGB: specular (Default=1.0), A: glossiness (Default=1.0)
vec4 specularAndSpecularGlossinessFactor;
// R: use diffuseTexture, G: use specularGlossinessTexture
vec4 specularGlossinessTextures;
};
struct PbrClearCoat
{
// R: clearCoat (Default=0.0), G: clearCoatRoughness (Default=0.0)
vec4 clearCoatAndClearCoatRoughnessFactor;
// R: use clearCoatTexture, G: use clearCoatRoughnessTexture, B: use clearCoatNormalTexture
vec4 clearCoatTextures;
};
struct PbrTransmission
{
// R: transmission (Default=0.0)
vec4 transmissionFactor;
// R: use transmissionTexture
vec4 transmissionTextures;
};
struct PbrIor
{
// R: ior (Default=0.0)
vec4 ior;
};
struct PbrSpecular
{
// RGB: specularColor, A: specularFactor (Default=1.0);
vec4 specularColorAndSpecularFactor;
// R: use specularTexture, G: use specularColorTexture
vec4 specularTextures;
};
struct PbrVolume
{
// R: thicknessFactor (Default=0.0), GBA: attenuationColor
vec4 thicknessFactorAndAttenuationColor;
// R: attenuationDistance (Default=-1.0)
vec4 attenuationDistance;
// R: use thicknessTexture
vec4 volumeTextures;
};
struct PbrSheen
{
// RGB: sheenColor, A: sheenRoughnessFactor (Default=0.0)
vec4 sheenColorAndRoughnessFactor;
// R: use sheenColorTexture, G: use sheenRoughnessTexture
vec4 sheenTextures;
};
struct PbrEmissiveStrength
{
// R: emissiveStrength (Default=1.0)
vec4 emissiveStrength;
};
struct PbrIridescence
{
// R: iridescenceFactor (Default=0.0), G: iridescenceIor (Default=1.3), B: iridescenceThicknessMin (Default=100.0), A: iridescenceThicknessMax (Default=400.0)
vec4 iridescenceFactorAndIorAndThicknessMinMax;
// R: use iridescenceTexture, G: use iridescenceThicknessTexture
vec4 iridescenceTextures;
};
Ortak özellikler ve özellik yapıları uniform bloğunun üyeleridir. Paketlenmiş bileşenler şöyledir:
uniform PbrMaterial
{
// X: alpha cutoff, Y: double-sided, Z: unlit,
// W: alpha mode (0 = opaque, 1 = mask, 2 = blend)
vec4 pbrAlphaCutoffAndDoubleSidedAndIsUnlit;
// X: has normal texture, Y: has occlusion texture, Z: has emissive texture
vec4 pbrCommonTextures;
// RGB: emissive factor, W: emissive strength
vec4 pbrEmissiveFactorAndStrength;
// X: normal scale, Y: occlusion strength
vec4 pbrNormalScaleAndOcclusionStrength;
PbrMetallicRoughness pbrMetallicRoughness;
PbrSpecularGlossiness pbrSpecularGlossiness;
PbrClearCoat pbrClearCoat;
PbrTransmission pbrTransmission;
PbrIor pbrIor;
PbrSpecular pbrSpecular;
PbrVolume pbrVolume;
PbrSheen pbrSheen;
PbrEmissiveStrength pbrEmissiveStrength;
PbrIridescence pbrIridescence;
};
Kullanılmayan özellik üyelerini bloktan çıkarın. Blok veya bir özelliğin tanınan alanları yoksa ilgili veriler sağlanmaz. Doku varlığı bayrakları, kaynak materyalin doku başvurularını açıklar; özel bir materyalin, örneklediği haritalar için yine de eşleşen örnekleyici bildirimlerine ve doku eşlemelerine ihtiyacı vardır.
Özellik alanları pbrMetallicRoughness.baseColorFactor, ortak alanlar ise pbrEmissiveFactorAndStrength gibi adlar kullanır. Motor bu sabitleri içe aktarılan materyalden veya modelde materyal verisi yoksa varsayılan materyalden doldurur. .material kaynağında varsayılanlar ayarlamak, içe aktarılan değerleri geçersiz kılmaz.
Yerleşik gölgelendirmeyi özelleştirmek için yukarıdaki örnekte olduğu gibi BRDF değerlerini türetmeden önce örneklenmiş PBRMaterial değerini düzenleyin. Ek çalışma zamanı denetimleri için kendi gölgelendirici sabitlerinizi bildirin ve model materyali sabiti API’sini kullanın.
Standart glTF metaliklik/pürüzlülük iş akışı için yerleşik materyalleri kullanın. Farklı bir BRDF, ortam aydınlatması, gölgeler veya ek glTF materyal efektleri gerektiğinde gölgelendirici yardımcılarını genişletin ya da kendi materyalinizi sağlayın.
Ayrıca bakın: