Fresnel etkisi

Fresnel efekt malzeme özelliği fiziksel olarak doğru olmayan, geçici bir efekttir. Bu özellik, nesnelerin fiziksel gözleminin bu açılarda daha yansıtıcı hale gelmesini temel alır. Fresnel yansıtmasının kendisi zaten Azure Uzaktan İşleme'de kullanılan PBR malzeme modeline fiziksel olarak dahil edilmiştir. Buna karşılık fresnel efekt malzeme özelliği, ışıklara veya gökyüzü ortamına bağımlılığı olmayan yalnızca bir katkılı renk efektidir.

Fresnel etkisi, etkilenen nesnelere kenarlarında renkli bir parlaklık verir. Etki özelleştirmesi hakkında bilgi ve işleme sonuçları örnekleri aşağıdaki bölümlerde bulunabilir.

Dekont

Fresnel etkisi, nokta bulutlarına uygulanamaz.

Fresnel efektini etkinleştirme

Fresnel efekt özelliğini kullanmak için söz konusu malzemelerde etkinleştirilmesi gerekir. PBR malzemesinde PbrMaterialFeatures fresnelEffect bitini ayarlayarak etkinleştirebilirsiniz. Aynı desen ColorMaterialFeatures ve Color malzemesi için de geçerlidir. Kullanım tanıtımı için kod örnekleri bölümüne bakın.

API aracılığıyla etkinleştirildikten sonra fresnel etkisi hemen görünür hale gelir. Varsayılan olarak parlaklık beyaz (1, 1, 1, 1) ve 1 üssüne sahip olacaktır. Aşağıdaki parametre ayarlayıcılarını kullanarak bu ayarları özelleştirebilirsiniz.

Efekt görünümünü özelleştirme

Şu anda fresnel etkisi malzeme başına aşağıdaki özellikler kullanılarak özelleştirilebilir:

Malzeme özelliği Tür Açıklama
FresnelEffectColor Renk4 En çok fresnel parıltısı olarak eklenen renk. Alfa kanalı şu anda yok sayılır.
FresnelEffectExponent kayan noktalı sayı Fresnel parıldama. 0,01 'den (nesnenin tamamına yayılmış) 10'a (yalnızca en memnuniyet açıları) kadar değişir.

Uygulamada, farklı renk ve üs ayarları aşağıdaki gibi görünür:

Fresnel effect examples

Fresnel efektinin üs değeri, her renk satırı için 1'den 10'a aşamalı olarak artırılır. Bunu yapmak, fresnel parlaklığı aşamalı olarak görüntülenen nesnelerin kenarlarına çeker. Aşağıdaki örnekte görebileceğiniz gibi fresnel etkisi saydamlıktan da etkilenmez:

Fresnel effect transparency examples

Gösterildiği gibi, çapraz üzerindeki nesneler tamamen saydamdır, ancak fresnel parlaklık kalır. Bu etki, fiziksel tabanlı fresnel'i bu konuda taklit eder ve bu da bu ekran görüntülerinde bulunur.

Kod örnekleri

Aşağıdaki kod örnekleri hem PBR malzemesi hem de Renk malzemesi için fresnel efektini etkinleştirmeyi ve özelleştirmeyi gösterir:

    void SetFresnelEffect(RenderingSession session, Material material)
    {
        if (material.MaterialSubType == MaterialType.Pbr)
        {
            var pbrMaterial = material as PbrMaterial;
            pbrMaterial.PbrFlags |= PbrMaterialFeatures.FresnelEffect;
            pbrMaterial.FresnelEffectColor = new Color4(1.0f, 0.5f, 0.1f, 1.0f);
            pbrMaterial.FresnelEffectExponent = 3.141592f;
        }
        else if (material.MaterialSubType == MaterialType.Color)
        {
            var colorMaterial = material as ColorMaterial;
            colorMaterial.ColorFlags |= ColorMaterialFeatures.FresnelEffect;
            colorMaterial.FresnelEffectColor = new Color4(0.25f, 1.0f, 0.25f, 1.0f);
            colorMaterial.FresnelEffectExponent = 7.654321f;
        }
    }
void SetFresnelEffect(ApiHandle<RenderingSession> session, ApiHandle<Material> material)
{
    if (material->GetMaterialSubType() == MaterialType::Pbr)
    {
        auto pbrMaterial = material.as<PbrMaterial>();
        auto featureFlags = PbrMaterialFeatures((int32_t)pbrMaterial->GetPbrFlags() | (int32_t)PbrMaterialFeatures::FresnelEffect);
        pbrMaterial->SetPbrFlags(featureFlags);
        pbrMaterial->SetFresnelEffectColor(Color4{ 1.f, 0.5f, 0.1f, 1.f });
        pbrMaterial->SetFresnelEffectExponent(3.141592f);

    }
    else if (material->GetMaterialSubType() == MaterialType::Color)
    {
        auto colorMaterial = material.as<ColorMaterial>();
        auto featureFlags = ColorMaterialFeatures((int32_t)colorMaterial->GetColorFlags() | (int32_t)ColorMaterialFeatures::FresnelEffect);
        colorMaterial->SetColorFlags(featureFlags);
        colorMaterial->SetFresnelEffectColor(Color4{ 0.25f, 1.f, 0.25f, 1.f });
        colorMaterial->SetFresnelEffectExponent(7.654321f);
    }
}

API belgeleri

Sonraki adımlar