Aracılığıyla paylaş


Model biçimleri için malzeme eşleme

Bir kaynak varlık model olarak dönüştürüldüğünde, dönüştürücü her için malzeme oluşturur. Malzemelerin oluşturulma şekli geçersiz kılınabilir. Ancak dönüştürme varsayılan olarak PBR malzemeleri oluşturur. FBX gibi her kaynak dosya biçimi malzemeleri tanımlamak için kendi kurallarını kullandığından, bu kuralların Azure Uzaktan İşleme'nin PBR malzeme parametrelerine eşlenmesi gerekir.

Bu makalede, malzemeleri kaynak varlıklardan çalışma zamanı malzemelerine dönüştürmek için kullanılan tam eşlemeler listelenir.

glTF

EmissiveFactor ve EmissiveTexture dışında glTF 2.0 belirtimindeki neredeyse her şey Azure Remote Rendering'de desteklenir.

Aşağıdaki tabloda eşleme gösterilmektedir:

glTF Azure Remote Rendering
baseColorFactor albedoColor
baseColorTexture albedoMap
metallicFactor metallik
metallicTexture metalnessMap
roughnessFactor Pürüz
roughnessTexture roughnessMap
occlusionFactor Tıkanık -lığı
occlusionTexture occlusionMap
normalTexture normalMap
normalTextureInfo.scale normalMapScale
alphaCutoff alphaClipThreshold
alphaMode.OPAQUE alphaClipEnabled = false, isTransparent = false
alphaMode.MASK alphaClipEnabled = true, isTransparent = false
alphaMode.BLEND isTransparent = true
doubleSided isDoubleSided
emissiveFactor -
emissiveTexture -

glTF'deki her doku, Azure Uzaktan İşleme malzemelerinde de desteklenen bir texCoord değere sahip olabilir.

Katıştırılmış dokular

*.bin veya *.glb dosyalarına eklenmiş dokular desteklenir.

Desteklenen glTF uzantısı

Temel özellik kümesine ek olarak, Azure Remote Rendering aşağıdaki glTF uzantılarını destekler:

  • MSFT_packing_occlusionRoughnessMetallic
  • KHR_materials_unlit: Renk malzemelerine karşılık gelir. Yardımcı malzemeler için bu uzantının kullanılması önerilir.
  • KHR_materials_pbrSpecularGlossiness: Metalik pürüzlü dokular yerine, diffüz-specular-glossiness dokuları sağlayabilirsiniz. Azure Uzaktan İşleme uygulaması doğrudan uzantıdaki dönüştürme formüllerini izler.

FBX

FBX biçimi kapalı kaynaklıdır ve FBX malzemeleri genel olarak PBR malzemeleriyle uyumlu değildir. FBX, birçok benzersiz parametre ve özelliğe sahip yüzeylerin karmaşık bir açıklamasını kullanır ve bunların tümü Azure Uzaktan İşleme işlem hattı tarafından kullanılmaz.

Önemli

Azure Uzaktan İşleme modeli dönüştürme işlem hattı yalnızca FBX 2011 ve üzerini destekler.

FBX biçimi malzemeler için muhafazakar bir yaklaşım tanımlar, resmi FBX belirtiminde yalnızca iki tür vardır:

  • Lambert - Yaygın olarak zaten bir süredir kullanılmasa da, dönüştürme zamanında Phong'a dönüştürülerek hala desteklenmektedir.
  • Phong - Neredeyse tüm malzemeler ve çoğu içerik aracı bu türü kullanır.

Phong modeli daha doğru ve FBX malzemeleri için tek model olarak kullanılır. Aşağıda FBX Malzemesi olarak anılacaktır.

Maya, bir malzemenin PBR ve Stingray türleri için özel özellikler tanımlayarak FBX için iki özel uzantı kullanır. Bu ayrıntılar FBX belirtiminde yer almadığından şu anda Azure Uzaktan İşleme tarafından desteklenmemektedir.

FBX Malzemeleri Diffuse-Specular-SpecularLevel kavramını kullanır, bu nedenle dağınık bir dokudan albedo haritasına dönüştürmek için diğer parametreleri hesaplamamız gerekir.

FBX'teki tüm renkler ve dokular sRGB alanındadır (Gama alanı olarak da bilinir) ancak Azure Uzaktan İşleme görselleştirme sırasında doğrusal boşlukla çalışır ve çerçevenin sonunda her şeyi sRGB alanına dönüştürür. Azure Remote Rendering varlık işlem hattı, hazır veri olarak işleyiciye göndermek için her şeyi doğrusal alana dönüştürür.

Bu tabloda dokuların FBX Malzemelerinden Azure Uzaktan İşleme malzemelerine nasıl eşlendiği gösterilmektedir. Bazıları doğrudan kullanılmaz, ancak formüllere katılan diğer dokularla (örneğin, dağınık doku) birlikte kullanılır:

FBX Azure Remote Rendering
AmbientColor Tıkanıklık Haritası
DiffuseColor Albedo, Metalness için kullanılır
Transparentcolor Albedo'nun alfa kanalı için kullanılır
TransparencyFactor Albedo'nun alfa kanalı için kullanılır
Opak -lık Albedo'nun alfa kanalı için kullanılır
SpecularColor Albedo, Metalness, Pürüzlülük için kullanılır
SpecularFactor Albedo, Metalness, Pürüzlülük için kullanılır
ShininessExponent Albedo, Metalness, Pürüzlülük için kullanılır
NormalMap NormalMap
Yumru NormalMap'e dönüştürüldü
EmissiveColor -
EmissiveFactor -
Düşünceler ionColor -
DisplacementColor -

Yukarıdaki eşleme, yapılması gereken birçok varsayım nedeniyle malzeme dönüştürmenin en karmaşık kısmıdır. Bu varsayımları aşağıda ele alıyoruz.

Aşağıda kullanılan bazı tanımlar:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular. Kırmızı ∗ 0,2125 + Specular. Yeşil ∗ 0.7154 + Specular. Mavi ∗ 0.0721
  • DiffuseBrightness = 0,299 * Diffuse. Kırmızı2 + 0,587 * Diffuse. Yeşil2 + 0,114 * Diffuse. Mavi2
  • SpecularBrightness = 0,299 * Specular. Kırmızı2 + 0,587 * Specular. Yeşil2 + 0,114 * Specular. Mavi2
  • SpecularStrength = max(Specular. Kırmızı, Specular. Yeşil, Specular. Mavi)

SpecularIntensity formülü buradan elde edilir. Parlaklık formülü bu belirtimde açıklanmıştır.

Pürüz

Roughnessbu formülden Specularhesaplanır ve ShininessExponent kullanılır. Formül, Phong specular üssünden pürüzlülüğün yaklaşık bir tahminidir:

Roughness = sqrt(2 / (ShininessExponent * SpecularIntensity + 2))

Metallik

MetalnessglTF belirtiminden bu formülden Diffuse hesaplanır ve Specular kullanılır.

Buradaki fikir, denklemi çözmemizdir: Ax2 + Bx + C = 0. Temel olarak dielektrik yüzeyler ışığın yaklaşık %4'ünün belirli bir şekilde yansıtılır ve gerisi dağınıktır. Metalik yüzeyler dağınık bir şekilde ışığı yansıtmaz, ancak her şeyi belirli bir şekilde yansıtır. Parlak plastik ve parlak metalik yüzeyleri ayırt etmenin bir yolu olmadığından bu formülün birkaç dezavantajı vardır. Çoğu zaman yüzeyin metalik özelliklere sahip olduğunu varsayıyoruz ve bu nedenle parlak plastik/kauçuk yüzeyler beklendiği gibi görünmeyebilir.

dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength

A = dielectricSpecularReflectance
B = (DiffuseBrightness * (oneMinusSpecularStrength / (1 - A)) + SpecularBrightness) - 2 * A
C = A - SpecularBrightness
squareRoot = sqrt(max(0.0, B * B - 4 * A * C))
value = (-B + squareRoot) / (2 * A)
Metalness = clamp(value, 0.0, 1.0);

Albedo

Albedo, Specularve Metalnesskaynaklarından Diffusehesaplanır.

Metalness bölümünde açıklandığı gibi dielektrik yüzeyler ışığın yaklaşık %4'lük kısmını yansıtır.
Buradaki fikir, bir faktör olarak değer kullanarak Metalness ve Metal renkleri arasında Dielectric doğrusal olarak ilişkilendirmektir. Metallik ise 0.0, benekliye bağlı olarak koyu bir renk olur (belirtim yüksekse) veya yayılma değişmez (herhangi bir belirtim yoksa). Metallik büyük bir değerse, yayma rengi belirtik renk yerine kaybolur.

dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength

dielectricColor = diffuseColor * (oneMinusSpecularStrength / (1.0f - dielectricSpecularReflectance) / max(1e-4, 1.0 - metalness))
metalColor = (Specular - dielectricSpecularReflectance * (1.0 - metalness)) * (1.0 / max(1e-4, metalness))
albedoRawColor = lerpColors(dielectricColor, metalColor, metalness * metalness)
AlbedoRGB = clamp(albedoRawColor, 0.0, 1.0);

AlbedoRGB yukarıdaki formül tarafından hesaplanmıştır, ancak alfa kanalı daha fazla hesaplama gerektirir. FBX biçimi saydamlık konusunda belirsizdir ve bunu tanımlamanın birçok yolu vardır. Farklı içerik araçları farklı yöntemler kullanır. Buradaki fikir, bunları tek bir formülde birleştirmektir. Ancak bazı varlıklar ortak bir şekilde oluşturulmamışsa yanlış şekilde saydam hale gelir.

Bu, , TransparencyFactor, Opacityile TransparentColorhesaplanır:

tanımlanırsa Opacity doğrudan kullanın: = AlbedoAlphaOpacity else
tanımlanmışsa, = 1.0 - ((TransparentColor.Blue + + TransparentColor.RedTransparentColor.Green) / 3.0) değilse AlbedoAlpha TransparencyColor
if , TransparencyFactorthen AlbedoAlpha = 1.0 - TransparencyFactor

Son Albedo renk, ile birleştirerek AlbedoRGB dört kanala AlbedoAlphasahiptir.

Özet

Burada özetlemek gerekirse, Albedo sıfıra yakınsa Specular özgün Diffuseöğesine çok yakın olacaktır. Aksi takdirde yüzey metalik bir yüzey gibi görünür ve yayma rengini kaybeder. Yüzey yeterince büyükse ve parlaksa ShininessExponent daha parlak ve Specular yansıtıcı görünecektir. Aksi takdirde yüzey pürüzlü görünür ve ortamı neredeyse hiç yansıtmaz.

Bilinen sorunlar

  • Geçerli formül basit renkli geometri için iyi çalışmıyor. Yeterince parlaksa Specular , tüm geometriler herhangi bir renk olmadan yansıtıcı metalik yüzeyler haline gelir. Bu durumda geçici çözüm, özgün sürümden %30'a düşürmek Specular veya fbxAssumeMetallic dönüştürme ayarını kullanmaktır.
  • PBR malzemeleri kısa süre önce ve 3DS Max içerik oluşturma araçlarına Maya eklendi. FBX'e geçirmek için kullanıcı tanımlı özel kara kutu özelliklerini kullanırlar. Azure Uzaktan İşleme belgelenmediğinden ve biçim kapalı kaynak olduğundan bu özellikleri okumaz.

Sonraki adımlar