Özel malzeme referansı

Sceneform, geliştiricilerin harika sonuçlar almalarını kolaylaştırmak için varsayılan materyal tanımları (.sfm) sağlar. Öğelerinin görünümünü ayrıntılı bir şekilde özelleştirmek isteyen geliştiriciler kendi malzeme tanımlarını (*.mat dosyaları) oluşturabilir ve öğe tanımında source özelliğini belirterek bu öğeleri öğelerine uygulayabilirler.

Temel kavramlar

Materyal
Bir malzeme, yüzeyin görsel görünümünü tanımlar. Bir yüzeyi tamamen açıklamak ve oluşturmak için malzeme aşağıdaki bilgileri sağlar:
  • Malzeme modeli
  • Kullanım tarafından kontrol edilen adlandırılmış parametreler grubu
  • Raster durumu (karma mod, arka yüz toplama vb.)
  • Vertex gölgelendirici kodu
  • Parça gölgelendirici kodu
Malzeme modeli
Gölgelendirme modeli veya aydınlatma modeli olarak da adlandırılan malzeme modeli, bir yüzeyin içsel özelliklerini tanımlar. Bu özellikler, aydınlatmanın hesaplanma yöntemi ve dolayısıyla yüzeyin görünümü üzerinde doğrudan etkilidir.
Malzeme tanımı
Bir malzemenin gerektirdiği tüm bilgileri açıklayan metin dosyasıdır. Bu sayfada, (*.mat) materyal tanımı dosyalarının yapısı ve biçimi açıklanmaktadır.

Malzeme tanımları

Materyal tanım, bir materyal için gereken tüm bilgileri açıklayan bir metin dosyasıdır:

  • Ad
  • Kullanıcı parametreleri
  • Malzeme modeli
  • Gerekli özellikler
  • İnterpolantlar (değişkenler olarak adlandırılır)
  • Kadro durumu (karma mod vb.)
  • Gölge kodu (parça gölgelendirici, isteğe bağlı olarak gölgelendirici)

Biçim

Malzeme tanımı biçimi, JSON adını verdiğimiz JSON temelli genel bir biçimdir. Üst düzeyde, materyal tanımı JSON nesne gösterimini kullanan 3 farklı bloktan oluşur:

material {
    // material properties
}

vertex {
    // vertex shader, optional
}

fragment {
    // fragment shader
}

Minimum uygulanabilir materyal tanımı material blok ve fragment blok içermelidir. vertex bloğu isteğe bağlıdır.

JSON ile arasındaki farklar

JSON'da bir nesne anahtar/değer eşlemelerinden oluşur. JSON çifti aşağıdaki söz dizimine sahiptir:

"key" : value

Değerin bir dize, sayı, nesne, dizi veya değişmez değer (true, false veya null) olabileceği durumlarda. Bu söz dizimi, malzeme tanımında mükemmel bir şekilde geçerlidir ancak dizelerin başında ve sonunda tırnak işareti bulunmayan bir varyant, JSON dilinde de kabul edilir:

key : value

Dizede boşluk varsa tırnak işareti kullanımı zorunludur.

vertex ve fragment blokları, JSON'da geçerli olmayan çıkış karaktersiz, alıntılanmamış GLSL kodu içerir.

Tek satırdan oluşan C++ stili yorumlara izin verilir.

Çiftin anahtarı büyük/küçük harfe duyarlıdır.

Çiftin değeri büyük/küçük harfe duyarlı değildir.

Örnek

Aşağıdaki kod listesinde geçerli bir malzeme tanımı örneği verilmiştir. Bu tanım, aydınlatılmış malzeme modelini, varsayılan opak harmanlama modunu kullanır, oluşturulan örgüde bir UV koordinatları kümesinin sunulmasını gerektirir ve 3 kullanıcı parametresini tanımlar. Bu dokümanın aşağıdaki bölümlerinde, material ve fragment engellemeleri ayrıntılı olarak açıklanmaktadır.

material {
    name : "Textured material",
    parameters : [
        {
           type : sampler2d,
           name : texture
        },
        {
           type : float,
           name : metallic
        },
        {
            type : float,
            name : roughness
        }
    ],
    requires : [
        uv0
    ],
    shadingModel : lit,
    blending : opaque
}

fragment {
    void material(inout MaterialInputs material) {
        prepareMaterial(material);
        material.baseColor = texture(materialParams_texture, getUV0());
        material.metallic = materialParams.metallic;
        material.roughness = materialParams.roughness;
    }
}

Malzeme bloğu

Malzeme bloğu, gölgelendirici olmayan tüm verileri açıklayan özellik çiftlerinin listesini içeren zorunlu bir bloktur.

name

Tür
string
Değer
Herhangi bir dize. Ad alanında boşluk varsa çift tırnak kullanılması gerekir.
Açıklama
Malzemenin adını belirler. Bu ad, hata ayıklama amacıyla çalışma zamanında saklanır.
material {
    name : stone
}

material {
    name : "Wet pavement"
}

shadingModel

Tür
string
Değer
Herhangi bir lit, cloth, unlit. Varsayılan olarak lit değerine ayarlanır.
Açıklama
Malzeme modelini, Malzeme modelleri bölümünde açıklandığı şekilde seçer.
material {
    shadingModel : unlit
}

Parametreler

Tür
parametre nesnelerinin dizisi
Değer

Her giriş, string ve her ikisi de name ve type özelliklerine sahip bir nesnedir. Ad, geçerli bir GLSL tanımlayıcısı olmalıdır. Tür, aşağıdaki tabloda açıklanan türlerden biri olmalıdır.

Tür Açıklama
bool Tek boole
Bool2 2 boole vektörü
Bool3 3 boole vektörü
Bool4 4 boole vektörü
kayan noktalı Tek kayan
kayan noktalı2 2 kayanın vektörü
kayan noktalı3 3 kayanın vektörü
kayan noktalı4 4 yüzen vektör
int Tek bir tam sayı
int2 2 tam sayı vektörü
int3 3 tam sayı vektörü
int4 4 tam sayı vektörü
numune 2 2D doku
ÖrnekleyiciHarici Dış doku. Daha fazla bilgi için ExternalTexture ve setExternalTexture() bölümlerine bakın
Numuneler

Örnekleyici türleri, format (varsayılan olarak float) ve precision (varsayılan olarak default olur) değerlerini de belirtebilir. Biçim, int, float olabilir. Hassasiyet şunlardan biri olabilir: default (platform için en iyi hassasiyet; genellikle masaüstünde high, mobil cihazlarda medium), low, medium ve high.

Açıklama

Malzemenizin gerektirdiği parametreleri listeler. Bu parametreler, Sceneform&s API materyali kullanılarak çalışma zamanında ayarlanabilir. Şekillendiricilerden parametrelere erişim, parametrenin türüne bağlı olarak değişiklik gösterir:

  • Örnekleyici türleri: materialParams_ ön ekine sahip parametre adını kullanın. Örneğin, materialParams_myTexture.
  • Diğer türler: Parametre adını, materialParams adlı bir yapının alanı olarak kullanın. Örneğin, materialParams.myColor.
material {
    parameters : [
        {
           type : float4,
           name : albedo
        },
        {
           type      : sampler2d,
           format    : float,
           precision : high,
           name      : roughness
        },
        {
            type : float2,
            name : metallicReflectance
        }
    ],
    requires : [
        uv0
    ],
    shadingModel : lit,
}

fragment {
    void material(inout MaterialInputs material) {
        prepareMaterial(material);
        material.baseColor = materialParams.albedo;
        material.roughness = texture(materialParams_roughness, getUV0());
        material.metallic = materialParams.metallicReflectance.x;
        material.reflectance = materialParams.metallicReflectance.y;
    }
}

gerektirir

Tür
string dizisi
Değer
Her giriş; uv0, uv1, color, tangents olmalıdır.
Açıklama
Malzemenin gerektirdiği tepe noktası özelliklerini listeler. position özelliği otomatik olarak eklenir ve belirtilmesi gerekmez. unlit olmayan gölgeleme modeli seçerken tangents özelliği otomatik olarak gereklidir. Gölgelendiricilerden bu özelliklere nasıl erişileceği hakkında daha fazla bilgi için bu dokümanın gölgelendirici bölümlerine bakın.
material {
    parameters : [
        {
           type : sampler2d,
           name : texture
        },
    ],
    requires : [
        uv0
    ],
    shadingModel : lit,
}

fragment {
    void material(inout MaterialInputs material) {
        prepareMaterial(material);
        material.baseColor = texture(materialParams_texture, getUV0());
    }
}

variables

Tür
string dizisi
Değer
Her biri geçerli bir GLSL tanımlayıcısı olan en fazla 4 dize.
Açıklama
Malzemenin gölgelendirici tarafından üretilen özel interpolantları (veya değişkenleri) tanımlar. Dizideki her giriş, kesişimin adını tanımlar. Parça gölgelendiricinin tam adı, variable_ ön eki olan artımlı addır. Örneğin, eyeDirection adlı bir değişken bildirirseniz değişkene variable_eyeDirection kullanarak parça parça gölgesinde erişebilirsiniz. Köşe gölgeleyicide, polarizma adı sadece MaterialVertexInputs yapısının bir üyesidir (örneğin, material.eyeDirection). Her bağlayıcı, gölgelendiricilerde float4 (vec4) türündedir.
material {
    name : Skybox,
    parameters : [
        {
           type : sampler2d,
           name : skybox
        }
    ],
    variables : [
         eyeDirection
    ],
    vertexDomain : device,
    depthWrite : false,
    shadingModel : unlit
}

fragment {
    void material(inout MaterialInputs material) {
        prepareMaterial(material);
        float theta = acos(variable_eyeDirection.y);
        float phi = atan(variable_eyeDirection.z / variable_eyeDirection.x) +
            (variable_eyeDirection.x > 0.0 ? 0.0 : PI);
        material.baseColor = texture(materialParams_skybox,
            vec2((phi + PI / 2.0) / (2.0 * PI), theta / PI));
    }
}

vertex {
    void materialVertex(inout MaterialVertexInputs material) {
        float3 p = getPosition().xyz;
        float3 u = mulMat4x4Float3(getViewFromClipMatrix(), p).xyz;
        material.eyeDirection.xyz = mulMat3x3Float3(getWorldFromViewMatrix(), u);
    }
}

karışım

Tür
string
Değer
Herhangi bir opaque, transparent, fade, add, masked. Varsayılan olarak opaque değerine ayarlanır.
Açıklama

Oluşturulan nesnenin, oluşturma hedefinin içeriğiyle nasıl harmanlanıp birleştirilmeyeceğini tanımlar. Olası karıştırma modları şunlardır:

  • Opak: Karıştırma devre dışıdır, malzemenin çıkışının alfa kanalı yok sayılır.
  • Şeffaf: Karıştırma etkin. Malzemenin çıkışı, oluşturma hedefiyle birleştirilir ve Porter-Duff'ın kaynak üzeri kuralı kullanılarak oluşturulur. Bu harmanlama modu, önceden çarpılmış alfa olduğunu varsayar.
  • Şeffaflaştır: transparent işlevi görür ancak spekülatif aydınlatmaya da uygulanır. transparent modunda, malzemenin alfa değerleri yalnızca dağınık ışıklandırma için geçerlidir. Bu harmanlama modu, ışıklı nesneleri soluklaştırıp kapatmak için yararlıdır.
  • Ekle: Harmanlama etkin. Malzemenin çıkışı, oluşturma hedefinin içeriğine eklenir.
  • Maskelenmiş: Harmanlama devre dışıdır. Bu harmanlama modu alfa maskelemeyi etkinleştirir. Malzemenin çıkışının alfa kanalı, bir parçanın silinip silinmeyeceğini belirler. Daha fazla bilgi için maskThrholdhold bölümüne bakın.
material {
    blending : transparent
}

vertexAlan Adı

Tür
string
Değer
Herhangi bir object, world, view, device. Varsayılan olarak object değerine ayarlanır.
Açıklama

Oluşturulan ağın alanını (veya koordinat alanını) tanımlar. Alan, köşelerin gölgelendiricide nasıl köşe dönüştürüleceğini etkiler. Olası alanlar şunlardır:

  • Nesne: Köşeler, nesne (veya model) koordinat alanında tanımlanır. Köşeler, oluşturulan nesne dönüşüm matrisi kullanılarak dönüştürülür
  • Dünya: Köşeler, dünya koordinat alanında tanımlanır. Köşeler, oluşturulan nesne dönüşümü kullanılarak dönüştürülmez.
  • Görünüm: Köşeler, görünümde (veya göz ya da kamera) koordinat alanında tanımlanır. Köşeler, oluşturulan nesne dönüşümü kullanılarak dönüştürülmez.
  • Cihaz: Köşeler, normalleştirilmiş cihaz (veya klip) koordinat alanında tanımlanır. Köşeler, oluşturulan nesne dönüşümü kullanılarak dönüştürülmez.
material {
    vertexDomain : device
}

interpolasyon

Tür
string
Değer
Herhangi bir smooth, flat. Varsayılan olarak smooth değerine ayarlanır.
Açıklama
Köşeler arasında (veya değişkenlerde) tepe noktaları arasında nasıl interpolasyon yapıldığını tanımlar. Bu özellik smooth olarak ayarlandığında, her kesişimde perspektif doğru bir interpolasyon gerçekleştirilir. flat olarak ayarlandığında, interpolasyon yapılmaz ve belirli bir üçgenin tüm parçaları aynı gölgeye sahip olur.
material {
    interpolation : flat
}

kürekli

Tür
string
Değer
Herhangi bir none, front, back, frontAndBack. Varsayılan olarak back değerine ayarlanır.
Açıklama
Hangi üçgenlerin kırpılacağını tanımlar: yok, öne bakan üçgenler, arka yüzdeki üçgenler veya hepsi.
material {
    culling : none
}

renkle yazma

Tür
boolean
Değer
true veya false. Varsayılan olarak true değerine ayarlanır.
Açıklama
Renk arabelleğine yazma işlemlerini etkinleştirir veya devre dışı bırakır.
material {
    colorWrite : false
}

Derin Yaz

Tür
boolean
Değer
true veya false. Varsayılan olarak true değerine ayarlanır.
Açıklama
Derinlik arabelleğine yazma işlemlerini etkinleştirir veya devre dışı bırakır.
material {
    depthWrite : false
}

Derinlik Kültürü

Tür
boolean
Değer
true veya false. Varsayılan olarak true değerine ayarlanır.
Açıklama
Derinlik testini etkinleştirir veya devre dışı bırakır. Derinlik testi devre dışı bırakıldığında bu malzemeyle oluşturulan bir nesne her zaman diğer opak nesnelerin üzerinde görünür.
material {
    depthCulling : false
}

Çift taraflı

Tür
boolean
Değer
true veya false. Varsayılan olarak false değerine ayarlanır.
Açıklama
İki taraflı oluşturmayı etkinleştirir veya devre dışı bırakır. true değerine ayarlandığında, culling otomatik olarak none değerine ayarlanır. Üçgenin arkası açıksa, üçgenin normal görünümü öne dönük olacak şekilde otomatik olarak çevrilir.
material {
    doubleSided : true
}

şeffaflık

Tür
string
Değer
default, twoPassesOneSide veya twoPassesTwoSides. Varsayılan olarak default değerine ayarlanır.
Açıklama
Şeffaf nesnelerin nasıl oluşturulduğunu kontrol eder. Yalnızca blending modu opaque olmadığında geçerlidir. Bu yöntemlerin hiçbiri kesin bir geometri oluşturmaz ancak genellikle yeterince iyidirler.

Olası üç şeffaflık modu şunlardır:

  • default: Şeffaf nesne, culling modu dikkate alınarak normal şekilde oluşturulur.

  • twoPassesOneSide: Şeffaf nesne önce derinlik arabelleğinde, ardından tekrar cullling renk moduna göre renk arabelleğinde oluşturulur. Bu işlem, aşağıda gösterildiği gibi şeffaf nesnenin yalnızca yarısını etkili bir şekilde oluşturur.

  • twoPassesTwoSides: şeffaf nesne renk arabelleğinde iki kez oluşturulur: önce arka yüzleri, ardından ön yüzleri. Bu mod, aşağıda gösterildiği gibi sıralama sorunlarını azaltırken veya ortadan kaldırırken iki yüz grubunu da oluşturmanıza olanak tanır. Daha iyi etki için twoPassesTwoSides doubleSided ile birleştirilebilir.

material {
    transparency : twoPassesOneSide
}

Maske Eşiği

Tür
number
Değer
0.0 ile 1.0 arasında bir değer. Varsayılan olarak 0.4 değerine ayarlanır.
Açıklama
blending modu masked olarak ayarlandığında parçaların silinmemesi gereken minimum alfa değerini belirler. Harmanlama modu masked olmadığında bu değer yok sayılır. Bu değer, alfa maskeli nesnelerin görünümünü kontrol etmek için kullanılabilir.
material {
    blending : masked,
    maskThreshold : 0.5
}

gölgeÇarpanı

Tür
boolean
Değer
true veya false. Varsayılan olarak false değerine ayarlanır.
Açıklama
Yalnızca unlit gölgelendirme modelinde kullanılabilir. Bu özellik etkinse malzeme tarafından hesaplanan nihai renk gölgeleme faktörü (veya görünürlük) ile çarpılır. Bu, şeffaf gölge alma nesneleri (örneğin, Artırılmış Gerçeklik'te görünmez bir yer düzlemi) oluşturmaya olanak tanır.
material {
    name : "Invisible shadow plane",
    shadingModel : unlit,
    shadowMultiplier : true,
    blending : transparent
}

fragment {
    void material(inout MaterialInputs material) {
        prepareMaterial(material);
        // baseColor defines the color and opacity of the final shadow
        material.baseColor = vec4(0.0, 0.0, 0.0, 0.7);
    }
}

varyantFiltre

Tür
string dizisi
Değer
Her giriş dynamicLighting, directionalLighting, shadowReceiver veya skinning olmalıdır.
Açıklama
Uygulamanın hiçbir zaman ihtiyaç duymayacağı gölgelendirici varyantlarının listesini belirtmek için kullanılır. Bu gölgelendirici varyantları kod oluşturma aşamasında atlanarak malzemenin genel boyutu küçültülür. Bazı varyantların otomatik olarak filtrelenebileceğini unutmayın. Örneğin, bir unlit malzemesi derlenirken aydınlatmayla ilgili tüm varyantlar (directionalLighting vb.) filtrelenir. Varyant filtresini kullanırken dikkatli olun. Çalışma zamanında gereken bir varyantın filtrelenmesi çökmeye neden olabilir.

Varyantların açıklaması: - directionalLighting, sahnede bir yön ışığı olduğunda kullanılır - dynamicLighting, sahnede yönlü olmayan bir ışık (nokta, nokta vb.) bulunduğunda kullanılır - shadowReceiver, bir nesne gölge aldığında kullanılabilir skinning - bir nesne GPU ciltleme işlemi ile canlandırıldığında kullanılır skinning

material {
    name : "Invisible shadow plane",
    shadingModel : unlit,
    shadowMultiplier : true,
    blending : transparent,
    variantFilter : [ skinning ]
}

Köşe bloğu

Köşe blokları isteğe bağlıdır ve malzemenin tepe noktası gölgelendirme aşamasını kontrol etmek için kullanılabilir. Köşe bloku geçerli bir ESSL 3.0 kodu (OpenGL ES 3.0'da desteklenen GLSL sürümünü) içermelidir. Köşe bloğunda birden fazla işlev oluşturabilirsiniz ancak materialVertex işlevini bildirmeniz gerekir:

vertex {
    void materialVertex(inout MaterialVertexInputs material) {
        // vertex shading code
    }
}

Bu işlev, gölgelendirme sistemi tarafından çalışma zamanında otomatik olarak çağrılır ve size MaterialVertexInputs yapısını kullanarak malzeme özelliklerini okuma ve değiştirme olanağı tanır. Yapının tam tanımını Malzeme tepe noktaları girişleri bölümünde bulabilirsiniz.

Bu yapıyı, özelleştirilebilen değişkenlerinizi/birlikte çalışabilirliklerinizi hesaplamak veya özelliklerin değerini değiştirmek için kullanabilirsiniz. Örneğin, aşağıdaki tepe noktalarındaki bloklar hem rengi hem de UV koordinatlarını zamanla değiştirir:

material {
    requires : [uv0, color]
}
vertex {
    void materialVertex(inout MaterialVertexInputs material) {
        material.color *= sin(getTime());
        material.uv0 *= sin(frameUniforms.time);
    }
}

MaterialVertexInputs yapısına ek olarak, gölgelendirme gölgelendirme kodunuz Genel gölge API'leri bölümünde listelenen tüm herkese açık API'leri kullanabilir.

Malzeme köşe noktası girişleri

struct MaterialVertexInputs {
    float4 color;         // if the color attribute is required
    float2 uv0;           // if the uv0 attribute is required
    float2 uv1;           // if the uv1 attribute is required
    float3 worldNormal;   // only if the shading model is not unlit
    float4 worldPosition; // always available
    // variable* names are replaced with actual names
    float4 variable0;     // if 1 or more variables is defined
    float4 variable1;     // if 2 or more variables is defined
    float4 variable2;     // if 3 or more variables is defined
    float4 variable3;     // if 4 or more variables is defined
};

Parça bloğu

Parça bloğu, malzemenin parça gölgelendirme aşamasını kontrol etmek için kullanılmalıdır. Parça bloğu geçerli bir ESSL 3.0 kodu (OpenGL ES 3.0'da desteklenen GLSL sürümü) içermelidir. Köşe bloğunda birden fazla işlev oluşturabilirsiniz ancak material işlevini bildirmeniz gerekir:

fragment {
    void material(inout MaterialInputs material) {
        prepareMaterial(material);
        // fragment shading code
    }
}

Bu işlev, gölgelendirme sistemi tarafından çalışma zamanında otomatik olarak çağrılır ve size MaterialInputs yapısını kullanarak malzeme özelliklerini okuma ve değiştirme olanağı tanır. Yapının tam tanımını Materyal parça girişleri bölümünde bulabilirsiniz. Yapının çeşitli üyelerinin tam tanımını bu dokümanın Materyal modeller bölümünde bulabilirsiniz.

material() işlevinin amacı, seçilen gölgeleme modeline özgü malzeme özelliklerini hesaplamaktır. Örneğin, standart ışıklandırma gölgelendirme modelini kullanarak parlak kırmızı bir metal oluşturan bir parça bloğunu aşağıda görebilirsiniz:

fragment {
    void material(inout MaterialInputs material) {
        prepareMaterial(material);
        material.baseColor.rgb = vec3(1.0, 0.0, 0.0);
        material.metallic = 1.0;
        material.roughness = 0.0;
    }
}

hazır Malzeme işlevi

material() işlevinden çıkmadan önce prepareMaterial(material) işlevini çağırmanız gerektiğini unutmayın. Bu prepareMaterial işlevi, malzeme modelinin dahili durumunu ayarlar. Parça API'leri bölümünde açıklanan bazı API'lere (örneğin, shading_normal gibi) yalnızca prepareMaterial() çağrıldıktan sonra erişilebilir.

Malzeme parçası girişleri bölümünde açıklanan şekilde normal özelliğinin, prepareMaterial() çağrısından önce değiştirildiğinde de etkisi olduğunu unutmamak da önemlidir. normal özelliğini düzgün bir şekilde değiştiren parçalı plastik uygulamak için düzgün bir şekilde değiştiren parça parça gölgelendirici örneği aşağıda verilmiştir:

fragment {
    void material(inout MaterialInputs material) {
        // fetch the normal in tangent space
        vec3 normal = texture(materialParams_normalMap, getUV0()).xyz;
        material.normal = normal * 2.0 - 1.0;

        // prepare the material
        prepareMaterial(material);

        // from now on, shading_normal, etc. can be accessed
        material.baseColor.rgb = vec3(1.0, 0.0, 0.0);
        material.metallic = 0.0;
        material.roughness = 1.0;
    }
}

Malzeme parçası girişleri

struct MaterialInputs {
    float4 baseColor;           // default: float4(1.0)
    float4 emissive;            // default: float4(0.0)

    // no other field is available with the unlit shading model
    float  roughness;           // default: 1.0
    float  metallic;            // default: 0.0, not available with cloth
    float  reflectance;         // default: 0.5, not available with cloth
    float  ambientOcclusion;    // default: 0.0

    // not available when the shading model is cloth
    float  clearCoat;           // default: 1.0
    float  clearCoatRoughness;  // default: 0.0
    float3 clearCoatNormal;     // default: float3(0.0, 0.0, 1.0)
    float  anisotropy;          // default: 0.0
    float3 anisotropyDirection; // default: float3(1.0, 0.0, 0.0)


    // only available when the shading model is cloth
    float3 sheenColor;         // default: sqrt(baseColor)
    float3 subsurfaceColor;    // default: float3(0.0)

    // not available when the shading model is unlit
    // must be set before calling prepareMaterial()
    float3 normal;             // default: float3(0.0, 0.0, 1.0)
}

Gölgeli herkese açık API'lar

Türler

GLSL türleri doğrudan kullanılabilir (vec4 veya mat4) ancak aşağıdaki tür takma adlarının kullanılmasını öneririz:

Ad GLSL türü Açıklama
olma2 bvec2 2 boole vektörü
bool3 bvec3 3 boole vektörü
olma4 bvec4 4 boole vektörü
int2 Icc2 2 tam sayıdan oluşan vektör
int3 ivec 3 tam sayıdan oluşan bir vektör
int4 4c 4 tam sayıdan oluşan vektör
uint2 üvec2 İmzasız 2 tam sayı vektörü
uint3 üvec3 İmzasız 3 tam sayı vektörü
uint 4 U4c 4 imzasız tam sayı
kayan2 kayan noktalı2 2 kayandan bir vektör
kayan3 kayan noktalı3 3 yüzen vektör
kayan4 kayan noktalı4 4 yüzen vektör
kayan4x4 mat4 4x4 yüzen matris
kayan3x3 mat3 3x3 kayan matris

Matematik

Ad Tür Açıklama
PI kayan noktalı \(\pi\)değerini temsil eden bir sabit değer
HALF_PI kayan noktalı \(\frac{\pi}{2}\)değerini temsil eden bir sabit değer
doygunluk(kayan x) kayan noktalı Belirtilen değeri 0,0 ile 1,0 arasında birleştirir
pow5(kayan x) kayan noktalı Hesaplamalar \(x^5\)
kare(kayan x) kayan noktalı Hesaplamalar \(x^2\)
max3(kayan3 v) kayan noktalı Belirtilen float3 değerinin maksimum değerini döndürür
mulMat4x4Kaydırma 3(kayan4x4 m, kayan3 v) kayan noktalı4 İade \(m * v\)
mulMat3x3Kayan kayan noktalı4 İade \(m * v\)

Matrisler

Ad Tür Açıklama
getViewFromWorldMatrix() kayan noktalı 4x Dünya uzayından gözlem/göz alanına dönüşen matris
getWorldFromViewMatrix() kayan noktalı 4x Görüntüleme/göz alanından uzaya dönüşen matris
getClipFromViewMatrix() kayan noktalı 4x Görünüm/göz alanından uzaya (NDC) dönüşen matris
getViewFromClipMatrix() kayan noktalı 4x Klipten (NDC) alana, görüntüleme/göz alanına dönüştüren matris
getClipFromWorldMatrix() kayan noktalı 4x Dünyadan klip (NDC) alanına dönüşen matris

Kare sabitleri

Ad Tür Açıklama
getResolution() kayan noktalı4 Piksel cinsinden görünümün çözünürlüğü: width, height, 1 / width, 1 / height
getWorldCameraPosition() kayan noktalı3 Kameranın/gözün dünyanın uzaydaki konumu
getTime() kayan noktalı Sceneform motoru başlatıldıktan sonraki saniye cinsinden süre (hassas kaybı önlemek için) sıfırlanabilir
getExposure() kayan noktalı Kameranın fotometrik olarak pozlanması
getEV100() kayan noktalı Kameranın ISO 100'de maruz kalma değeri

Yalnızca Vertex

Aşağıdaki API'ler yalnızca tepe noktası bloğunda kullanılabilir:

Ad Tür Açıklama
getPosition() kayan noktalı4 Alanda malzeme tarafından tanımlanan köşe noktası konumu (varsayılan: nesne/model alanı)
getWorldFromModelMatrix() kayan noktalı 4x Model (nesne) alanından dünya alanına dönüşen matris
getWorldFromModelNormalMatrix() kayan nokta 3x3 Normalleri model (nesne) alanından dünya alanına dönüştüren matris

Yalnızca parça

Aşağıdaki API'ler yalnızca parça bloğunda kullanılabilir:

Ad Tür Açıklama
getWorldTangentFrame() yazın kayan nokta 3x3 Her sütunda, dünya alanındaki tepenin tangent (frame[0]), bi-tangent (frame[1]) ve normal (frame[2]) değerini içeren matris. Malzeme, seyret haritası oluşturma için normal bir tanjant hesaplamıyorsa veya gölgelendirme anisotropik değilse bu matriste yalnızca normal geçerlidir.
getWorldPosition() kayan noktalı3 Parçanın uzaydaki konumu
getWorldViewVector() kayan noktalı3 Parça noktasından göze kadar uzaydaki normalleştirilmiş vektör
getWorldNormalVector() kayan noktalı3 Yumru eşleştirmesinden sonra, dünya alanında normalleştirilmiş normal (prepareMaterial() sonrası kullanılmalıdır)
getWorldReflectedVector() kayan noktalı3 Görüntüleme vektörünün normal değerle yansıması (prepareMaterial() tarihinden sonra kullanılmalıdır)
GETNdotV() kayan noktalı dot(normal, view) öğesinin sonucu, her zaman kesinlikle 0'dan büyüktür (prepareMaterial() sonrasında kullanılmalıdır)
getColor() kayan noktalı4 Renk özelliği gerekiyorsa parçanın etkileşimli rengi
getUV0() kayan noktalı2 uv0 özelliği gerekiyorsa ilk interpolasyon UV koordinatları grubu
getUV1() kayan noktalı2 uv1 özelliği gerekiyorsa ilk interpolasyon UV koordinatları grubu
intersTonemap(face3) kayan noktalı3 Ters ton eşleme operatörünü, belirtilen doğrusal sRGB rengine uygular. Bu işlem, yaklaşık bir
invertTonemapSRGB(kayan3) kayan noktalı3 Ters ton eşleme operatörünü, belirtilen doğrusal olmayan sRGB rengine uygular. Bu işlem yaklaşık bir tahmin olabilir
luminance(dalga3) kayan noktalı Belirtilen doğrusal sRGB renginin parlaklığını hesaplar

Malzeme modelleri

Düzenli materyalde aşağıdaki materyal modellerinden biri kullanılabilir:

  • Basit (veya standart)
  • Kumaş
  • Aydınlatılmamış

Işık modeli

Işıklı model, Sceneform'un standart malzeme modelidir. Bu fiziksel tabanlı gölgeleme modeli, Unity 5, Unreal Engine 4, Madde Designer veya Marmoset Toolbag gibi diğer yaygın araç ve motorlarla iyi bir birlikte çalışabilirlik sunmak için tasarlanmıştır.

Bu malzeme modeli, çok sayıda metalik olmayan yüzey (dielektrik) veya metalik yüzeyleri (iletkenler) açıklamak için kullanılabilir.

Standart model kullanılarak oluşturulan malzemenin görünümü, aşağıdaki tabloda açıklanan özellikler kullanılarak kontrol edilir.

Standart modelin özellikleri

Özellik Tanım
baseColor Metalik yüzeyler için dağılmış albedo, metalik yüzeyler için spektral renk
metalik Bir yüzeyin dielektrik mi (0,0) yoksa iletken (1,0) olduğu. Genellikle ikili değer olarak kullanılır (0 veya 1)
pürüzlük Bir yüzeyin algılanan pürüzsüzlüğü (1,0) veya pürüzlüğü (0,0). Pürüzsüz yüzeyler keskin yansımalar gösterir
yansıtma Elektroelektrik yüzeyleri için normal vakada fresk yansıtma. Bu, yansımaların gücünü doğrudan kontrol eder
clearCoat Şeffaf kaplama katmanının gücü
clearCoatRoughness Şeffaf kaplama katmanının algılanan pürüzsüzlüğü veya pürüzlülüğü
anisotropi Tanjant veya akan yöndeki anisotropi miktarı
anisotropyDirection Yerel yüzey yönü
ambientOcclusion Bir yüzey noktasına ortam ışığının ne kadarının erişebileceğini tanımlar. Bu, 0,0 ile 1,0 arasında piksel başına bir gölge faktörüdür
normal Parça eşleme (normal eşleme) kullanılarak yüzeyi boğmak için kullanılan normal bir ayrıntı
netCoatNormal Parça eşleme (normal eşleme) kullanılarak palto katmanının yumuşatılması için kullanılan normal bir ayrıntı
etkileyici Yayıcı yüzeyleri (neonlar vb.) simüle etmek için ek dağılmış albedo Bu özellik, özellikle çiçek açma geçişli HDR ardışık düzeninde faydalıdır

Her mülkün türü ve aralığı aşağıdaki tabloda açıklanmıştır.

Özellik Tür Aralık Not
baseColor kayan noktalı4 [0..1] Önceden çarpılmış doğrusal RGB
metalik kayan noktalı [0..1] 0 veya 1 olmalıdır
pürüzlük kayan noktalı [0..1]
yansıtma kayan noktalı [0..1] > 0,35 değerlerini tercih et
clearCoat kayan noktalı [0..1] 0 veya 1 olmalıdır
clearCoatRoughness kayan noktalı [0..1] [0..0.6] ile yeniden eşleşiyor
anisotropi kayan noktalı [-1,1] Bu değer pozitif olduğunda anzotropi en iyi yöndedir
anisotropyDirection kayan noktalı3 [0..1] Doğrusal RGB, bir etki vektörünü tanjant alanında kodlar
ambientOcclusion kayan noktalı [0..1]
normal kayan noktalı3 [0..1] Doğrusal RGB, bir etki vektörünü tanjant alanında kodlar
netCoatNormal kayan noktalı3 [0..1] Doğrusal RGB, bir etki vektörünü tanjant alanında kodlar
etkileyici kayan noktalı4 rgb=[0..1], a=[-n..n] Alfa, doğrudan kullanıcının

Taban rengi

baseColor özelliği, bir nesnenin algılanan rengini tanımlar (bazen albedo olarak adlandırılır). baseColor öğesinin etkisi, yüzeyin yapısına bağlıdır. Bu yüzey, Metalikik bölümünde açıklanan metallic özelliği tarafından kontrol edilir.

Metal olmayan (elektrikli)

Yüzenin dağınık rengini tanımlar. Gerçek dünya değerleri, değer 0 ile 255 arasında kodlanıyorsa genellikle [10..240] aralığında veya 0 ile 1 aralığında [0.04..0.94] aralığında bulunur. Metalik olmayan yüzeyler için temel renklere ilişkin birkaç örneği aşağıdaki tabloda bulabilirsiniz.

Metal sRGB Onaltılık Renk
Kömürler 0,19, 0,19, 0,19 #323232
 
Lastik 0,21, 0,21, 0,21 #353535
 
Çamur 0,33, 0,24, 0,19 #553d31
 
Ahşap 0,53, 0,36, 0,24 #875c3c
 
Bitki örtüsü 0,48, 0,51, 0,31 #7b824e
 
Tuğla 0,58, 0,49, 0,46 #947d75
 
Kum 0,69, 0,66, 0,52 #b1a884
 
Beton 0,75, 0,75, 0,73 #c0bfbb
 
Metaller (iletkenler)

Yüzenin spektrum rengini tanımlar. Gerçek dünya değerleri, değer 0 ile 255 arasında kodlanıyorsa genellikle [170..255] aralığında veya 0 ile 1 aralığında [0.66..1.0] aralığında bulunur. Metalik yüzeyler için birkaç temel renk örneğini aşağıdaki tabloda bulabilirsiniz.

Metal sRGB Onaltılık Renk
Silver 0,98, 0,98, 0,96 #faf9f5
 
Alüminyum 0,96, 0,96, 0,96 #f4f5f5
 
Titanyum 0,81, 0,78, 0,76 #cec8c2
 
Demir 0,76, 0,74, 0,73 #c0bdba
 
Platinum 0,84, 0,82, 0,79 #d6d1c8
 
Gold 1,00, 0,87, 0,62 #fedc9d
 
Brass 0,96, 0,89, 0,68 #f4e4ad
 
Copper 0,98, 0,85, 0,72 #fbd8b8
 

Metalik

metallic özelliği, yüzeyin metalik (iletken) bir yüzey mi yoksa metalik olmayan (elektrikli) bir yüzey mi olduğunu tanımlar. Bu özellik, 0 veya 1 olarak ayarlanmış ikili bir değer olarak kullanılmalıdır. Orta değerler, dokular kullanılırken farklı yüzey türleri arasında geçişler oluşturmak için gerçekten yararlıdır.

Bu özellik, yüzeylerin görünümünü önemli ölçüde değiştirebilir. Metalik olmayan yüzeylerde kromatik dağılmış yansıma ve renksiz spekülatif yansıma bulunur (yansıyan ışık renk değiştirmez). Metalik yüzeylerde yaygın yansıma ve kromatik spekülatif yansıma yoktur (yansıyan ışık, baseColor tarafından tanımlanan yüzeyin rengini alır).

metallic efekti aşağıda gösterilmiştir (daha büyük bir sürümü görmek için resmi tıklayın).

Pürüzlülük

roughness özelliği, yüzeyin algılanan pürüzsüzlüğünü kontrol eder. roughness değeri 0 olarak ayarlandığında yüzey son derece pürüzsüz ve son derece parlak olur. Yüzeyin daha sert olması, yansımaların "bulanıklaştırıcı" olduğu anlamına gelir. Bu özellik, diğer motorlar ve araçlarda genellikle parlaklık olarak adlandırılır ve zorluğun (roughness = 1 - glossiness) tam tersidir.

Ametal olmayan

roughness alanının metalik olmayan yüzeyler üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).

Metaller

roughness alanının metalik yüzeyler üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).

Yansıma

reflectance özelliği yalnızca metalik olmayan yüzeyleri etkiler. Bu özellik, spektrum yoğunluğunu kontrol etmek için kullanılabilir. Bu değer, 0 ile 1 arasında tanımlanır ve yansıma yüzdesinin yeniden eşlenmesini sağlar. Örneğin, varsayılan 0,5 değeri, %4'lük bir yansıtmaya karşılık gelir. Yansıtma oranı az olan gerçek dünyadaki hiçbir materyal 0,35'ten (%2 yansıma) düşük olan değerlerden kaçınılmalıdır.

reflectance alanının metalik olmayan yüzeyler üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).

Aşağıdaki grafikte ortak değerler ve bunların eşleme işleviyle nasıl ilişkili olduğu gösterilmektedir.

Aşağıdaki tabloda, çeşitli malzeme türleri için kabul edilebilir yansıma değerleri açıklanmaktadır (hiçbir gerçek malzemenin değeri %2'nin altında değildir).

Materyal Yansıma Mülk değeri
Su %2 0,35
Kumaş %4-5,6 0,5 - 0,59
Yaygın sıvılar %2 ile %4 0,35 - 0,5
Yaygın taşlar %5 - %16 0,56'dan 1,0'a
Plastik, cam %4 - %5 0,5 ila 0,56
Diğer dielektrik malzemeleri %2 ile %5 0,35 - 0,56
Gözler %2,5 0,39
Cilt %2,8 0,42
Saç %4,6 0,54
Dişler %5,8 0,6
Varsayılan değer %4 0.5

Kabanı temizle

Çok katmanlı malzemeler, özellikle bir taban katmanı üzerinde ince bir yarı şeffaf katman içeren malzemeler oldukça yaygındır. Araba boyaları, gazlı içecek kutuları, vernikli ahşap ve akrilik malzemeler buna örnek olarak verilebilir.

clearCoat özelliği, malzemeleri iki katmanla açıklamak için kullanılabilir. Şeffaf kaplama katmanı her zaman izotropik ve nükleer enerjilidir. Aşağıdaki resimde, standart malzeme modeli (sol) ve şeffaf kaplama modeli (sağ) altındaki karbon fiber malzeme karşılaştırılmaktadır.

clearCoat özelliği, şeffaf kaplama katmanının gücünü kontrol eder. Bu, 0 veya 1 olarak ayarlanmış bir ikili değer olarak değerlendirilmelidir. Orta değerler, yüzeyde şeffaf kaplama katmanlarına sahip olan ve olmayan parçalar arasında geçişleri kontrol etmek için yararlıdır.

clearCoat ürününün pürüzlü bir metal üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).

Kaban pürüzlerini temizle

clearCoatRoughness özelliği, roughness özelliğine benzer ancak yalnızca şeffaf kaplama katmanı için geçerlidir. Ayrıca, açık kabanlar hiçbir zaman tamamen pürüzsüz olmadığından, 0 ile 1 arasındaki değer dahili olarak 0 ile 0,6 arasındaki bir pürüzlülük değeriyle yeniden eşleştirilir.

clearCoatRoughness ürününün pürüzlü bir metal üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).

Anisotropi

Fırçalanmış metal gibi gerçek dünyaya ait birçok materyal yalnızca anisotropik yansıma modeli kullanılarak çoğaltılabilir. anisotropy özelliği kullanılarak materyal, varsayılan izotropik modelden anisotropik modele değiştirilebilir. Aşağıdaki resimde, bir izotropik malzeme (sol) ve canlandırmalı malzeme (sağ) karşılaştırılmaktadır.

Değişken anisotropy değerinin 0,0 (sol) - 1,0 (sağ) değerleri arasındaki kabaca bir alaşım üzerindeki etkisi gösterilir (daha büyük bir versiyonu görmek için resmi tıklayın).

Aşağıdaki resimde, anisotropik vurguların yönünün pozitif veya negatif değerler kullanılarak nasıl kontrol edilebileceği gösterilmektedir: pozitif değerler (sol) tanjant yönünde anatomiyi, büyük yönde negatif değerler (sağ) tanımlanmıştır.

Anisotropi yönü

anisotropyDirection özelliği, belirli bir noktada yüzeyin yönünü tanımlar ve böylece, spekülatif vurguların şeklini kontrol eder. Genellikle bir dokudan gelen, yüzeyin yerel yönlerini kodlayan 3 değerin vektörü olarak belirtilir.

Yön haritası içeren bir metal üzerinde anisotropyDirection oluşturmanın etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).

Yukarıdaki resmi oluşturmak için kullanılan yön haritası aşağıda gösterilmektedir.

Kapalı ortamda ortam

ambientOcclusion özelliği, ortam ışığının ne kadarının bir yüzey noktasına erişilebileceğini tanımlar. 0,0 (tamamen gölgeli) ve 1,0 (tamamen ışıklı) arasındaki piksel başına bir gölge faktörüdür. Bu özellik yalnızca dolaylı dolaylı aydınlatmayı (resim tabanlı ışıklandırma) etkiler; yön, nokta ve spot ışıklar gibi doğrudan ışıkları veya spektrum ışığını etkilemez. Aşağıdaki resimde dağılmış ortam tıkanması (sol) ve onunla (sağ) olan malzemeler karşılaştırılmaktadır.

Normal

normal özelliği, belirli bir noktada yüzeyin normal değerini tanımlar. Genellikle piksel başına özelliğin değiştirilmesine olanak tanıyan normal bir harita dokusundan gelir. Normal, tanjant alanında sağlanır. +Z, yüzeyin dışına işaret eder.

Örneğin, kapitone deri kaplı bir mobilya parçası oluşturmak istediğimizi düşünelim. Püsküllü deseni doğru şekilde göstermek için geometrinin modellenmesi için çok fazla üçgen gereklidir. Bu nedenle normal bir haritada yüksek poli dokumlu bir pasta pişiririz. Ardından, temel haritayı basitleştirilmiş bir örgüye uygulayabilirsiniz. Aşağıdaki resimde, normal eşleşme olmayan (sol) ve bununla (sağ) bir basit örgü karşılaştırılmaktadır.

normal özelliğinin, kaba kaplama katmanını değil, temel katmanı etkilediğini unutmayın.

Mont önü normal

clearCoatNormal özelliği, belirtilen noktada şeffaf kaplama katmanının normal değerini tanımlar. Başka bir normal özelliğine benzer.

Yayma

emissive özelliği, yüzeyin verdiği ek ışığın simülasyonunu yapmak için kullanılabilir. RGB renginin (doğrusal alanda) yanı sıra pozlama değeri (alfa kanalında) içeren bir float4 değeri olarak tanımlanır.

Pozlama değeri aslında kamera ayarlarının kombinasyonlarını gösterse de fotoğrafçılar tarafından genellikle ışık yoğunluğunu açıklamak için kullanılır. Bu nedenle kameralar, fotoğrafçılara pozlama ödemesi yaparak fazla veya az ışık gösterilen bir pozlama ücreti uygular. Bu ayar, sanatsal denetime ek olarak uygun pozlama sağlamak için de kullanılabilir (örneğin, kar kalınlığı %18'in ortasında griye çıkabilir).

Yayıcı malzemenin pozlama telafisi değeri, pozlama renginin mevcut pozlamadan daha parlak (pozitif değerler) veya daha koyu (negatif değerler) olması için zorlanabilir. Çiçek açma efekti etkinse pozitif bir Pozlama telafisi kullanmak, yüzeyi çiçek açmaya zorlayabilir.

Kumaş modeli

Önceden açıklanan tüm malzeme modelleri, hem makro olarak hem de mikro düzeyde yoğun yüzeyleri simüle etmek üzere tasarlanmıştır. Kıyafetler ve kumaşlar çoğunlukla olay ışığını emen ve dağıtan gevşek bağlantılı ipliklerden oluşur. Kumaş, sert yüzeylerle karşılaştırıldığında, ileri/geri dağılım sayesinde oluşan büyük çöküşe ve füzyon aydınlatması olan yumuşak spektrumdan oluşur. Bazı kumaşlarda iki tonlu spekülasyonlu renkler de vardır (örneğin kadifeler).

Aşağıdaki resimde, standart model (sol) ve bez modeli (sağ) kullanılarak oluşturulan kot kumaşları karşılaştırılmaktadır. Standart malzeme modelinin, kot pantolonu örneğinin (sol) görünümünü yakalayamadığına dikkat edin. Yüzey, bir kıyafetten çok giysiye benzer şekilde serttir (neredeyse plastiktir). Bu veri, aynı zamanda emilim ve yayılmanın neden olduğu yumuşak spektrumun, kumaşın inandırıcı bir şekilde yeniden oluşturulması açısından ne kadar önemli olduğunu da gösterir.

Kadife, bir malzeme modelinin ilginç bir kullanım alanıdır. Aşağıdaki resimde gösterildiği gibi, bu kumaş türü, öne ve arkaya yayıldığı için güçlü jant aydınlatması sergiler. Bu yayılma etkinlikleri, kumaşın yüzeyinde duran liflerden kaynaklanır. Olay ışığı, görünüm yönünün tersine yönden geldiğinde lifler ışığı dağıtacaktır. Benzer şekilde, olay yönü görüş yönüyle aynı yönde geldiğinde lifler ışığı arkaya dağıtır.

Sert yüzeyli malzeme modelleri tarafından hâlâ en iyi şekilde modellenen kumaş türlerinin olduğunu unutmayın. Örneğin deri, ipek ve saten, standart veya anisotropik malzeme modelleri kullanılarak yeniden oluşturulabilir.

Kumaş malzeme modeli, metalik ve yansıma hariç standart malzeme modu için önceden tanımlanmış tüm parametreleri kapsar. Aşağıdaki tabloda açıklanan iki ek parametre de mevcuttur.

Parametre Tanım
sheenColor İki tonlu spekülatif kumaş oluşturmak için spekülasyon tonu (varsayılan olarak \(\sqrt{baseColor}\))
altsurucuRenk Dağınıklık ve emme işleminden sonra malzemenin dağılmasından kaynaklanan renk tonu

Her mülkün türü ve aralığı aşağıdaki tabloda açıklanmıştır.

Özellik Tür Aralık Not
sheenColor kayan noktalı3 [0..1] Doğrusal RGB
altsurucuRenk kayan noktalı3 [0..1] Doğrusal RGB

Kadife benzeri bir malzeme oluşturmak için temel renk siyah (veya koyu renk) olarak ayarlanabilir. Kromatiklik bilgisi bunun yerine parlaklığın rengine göre ayarlanmalıdır. Kot, pamuk gibi daha sık kullanılan kumaşlar oluşturmak için kronize olması için temel rengi ve varsayılan parlaklığı kullanın ya da parlaklığı temel rengin parlaklığına ayarlayın.

Gölge rengi

sheenColor özelliği, spekülatif yansımayı doğrudan değiştirmek için kullanılabilir. Kumaş görünümü üzerinde daha iyi bir kontrol sağlar ve iki tonlu spekülatif malzemeler oluşturma imkanı verir.

Aşağıdaki resimde mavi kumaşı (sol) ve (sağ) sarmalama ile karşılaştırmaktadır (büyük bir sürümünü görmek için resmi tıklayın).

Yüzey rengi

subsurfaceColor özelliği fiziksel olarak bulunmaz ve belirli kumaş türlerinde parçalama, kısmi emme ve ışığın yeniden emisyonunu yok etmek için kullanılabilir. Bu, özellikle yumuşak kumaşlar üretmek için yararlıdır.

Aşağıdaki resimde subsurfaceColor'in etkisi gösterilmektedir. Beyaz bez (sol sütun) ve kahverengi alt yüzeye sahip, çoğalmış beyaz bez (sağ sütun) gösterilir. Daha büyük bir sürümünü görmek için resmi tıklayın.

Aydınlatılmamış model

Işıklandırmasız malzeme modeli, tüm ışıklandırma hesaplamalarını kapatmak için kullanılabilir. Birincil amacı, küp haritası, harici içerik (video veya kamera akışı gibi), kullanıcı arayüzleri, görselleştirme/hata ayıklama gibi önceden ışıklandırılmış öğeleri oluşturmaktır. Aydınlatılmamış model aşağıdaki tabloda açıklanan yalnızca iki özelliği gösterir.

Özellik Tanım
baseColor Yüzey yayılımı rengi
etkileyici Yayıcı yüzeyleri simüle etmek için ek dağılmış renk. Bu özellik, çiçek açma pasosu bulunan bir HDR ardışık düzeninde çoğunlukla faydalı olur

Her mülkün türü ve aralığı aşağıdaki tabloda açıklanmıştır.

Özellik Tür Aralık Not
baseColor kayan noktalı4 [0..1] Önceden çarpılmış doğrusal RGB
etkileyici kayan noktalı4 rgb=[0..1], a=Yok Önceden çarpan doğrusal RGB, alfa yoksayılır

emissive değeri, mevcut olduğunda baseColor öğesine eklenir. emissive özelliğinin başlıca kullanım alanı, HDR ardışık düzeni çiçek açma kartıyla yapılandırılmışsa aydınlatmalı bir yüzeyi çiçek açmaya zorlamaktır.

Aşağıdaki resimde, hata ayıklama bilgilerini oluşturmak için kullanılan aydınlatmalı malzeme modelinin bir örneği gösterilmektedir (daha büyük bir sürümünü görmek için resmi tıklayın).

Renkleri işleme

Doğrusal renkler

Renk verisi bir dokudan geliyorsa sRGB'den doğrusal'a otomatik donanım dönüştürmesinden yararlanmak için sRGB dokusu kullandığınızdan emin olun. Renk verileri, malzemeye parametre olarak aktarılırsa her renk kanalında aşağıdaki algoritmayı çalıştırarak sRGB'den doğrusala dönüştürebilirsiniz:

float sRGB_to_linear(float color) {
    return color <= 0.04045 ? color / 12.92 : pow((color + 0.055) / 1.055, 2.4);
}

Alternatif olarak, aşağıda gösterilen daha ucuz ve daha az doğru olan iki sürümden birini de kullanabilirsiniz:

// Cheaper
linearColor = pow(color, 2.2);
// Cheapest
linearColor = color * color;

Önceden çarpılmış alfa

Bir renk, RGB bileşenleri alfa kanalıyla çarpılırsa önceden çarpılmış alfa kullanılır:

// Compute pre-multiplied color
color.rgb *= color.a;

Renk bir dokudan örneklenmişse doku verilerinin önceden çarpılmasını sağlayabilirsiniz. Android'de, Bit haritasından yüklenen tüm dokular varsayılan olarak önceden çarpılır.