Fresnel etkisi

Fresnel düşüşünü etkisi malzeme özelliği, fiziksel olmayan doğru, geçici bir etkiye sahiptir. Özelliği, nesnelerin bu açılarda daha fazla yansıtıcı hale gelmesine yönelik fiziksel gözlemye dayanır. Fresnel düşüşünü yansıtılıance, Azure uzaktan Işlemede kullanılan PBR malzeme modelinde zaten fiziksel olarak eklenmiştir. Buna karşılık, Fresnel düşüşünü etkisi malzeme özelliği, ışıklar veya gök ortamıbağımlılığı olmadan yalnızca bir eklenebilir renk efektine sahiptir.

Fresnel düşüşünü efekti etkilenen nesnelere kenarları etrafında renkli bir renk ışığı verir. Efekt özelleştirme ve işleme sonuçlarının örnekleri hakkında bilgiler aşağıdaki bölümlerde bulunabilir.

Fresnel düşüşünü efektini etkinleştirme

Fresnel düşüşünü efekt özelliğini kullanmak için, söz konusu malzemelerde etkin olması gerekir. Bu özelliği, PBR malzemelerde Pbrmaterialfeatures FresnelEffect bitini ayarlayarak etkinleştirebilirsiniz. Aynı model Colormaterialfeatures ve renk malzemesiiçin de geçerlidir. Kullanım gösterimi için kod örnekleri bölümüne bakın.

Etkinleştirildikten sonra, Fresnel düşüşünü efekti hemen görünür olur. Varsayılan olarak, boşluk beyaz (1, 1, 1, 1) olur ve 1 üssün oluşur. Aşağıdaki parametre ayarlayıcıları ' nı kullanarak bu ayarları özelleştirebilirsiniz.

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

Şu anda, Fresnel düşüşünü etkisi şu özellikler kullanılarak her malzeme için özelleştirilebilir:

Malzeme özelliği Tür Açıklama
FresnelEffectColor Color4 Fresnel düşüşünü ışığı olarak en fazla eklenen renk. Alfa kanalı şu anda yok sayıldı.
FresnelEffectExponent float Fresnel düşüşünü ışığı yayılıyor. 0,01 (tüm nesnenin üzerine yayılmış) sayısını 10 ' a (yalnızca en önemli açıların) göre değişir.

Uygulamada, farklı renk ve üs ayarları şöyle görünür:

Fresnel düşüşünü etkisi örnekleri

Fresnel düşüşünü efektinin üs değeri, her renk satırı için 1 ile 10 arasında aşamalı olarak artar. Bu durumda, Fresnel düşüşünü görünü, görüntülenen nesnelerin kenarlarına aşamalı olarak çeker. Aşağıdaki örnekte görebileceğiniz gibi, Fresnel düşüşünü efekti de saydamlıkla etkilenmemiştir:

Fresnel düşüşünü efekt saydamlığı örnekleri

Gösterildiği gibi, köşegen üzerindeki nesneler tamamen saydamdır, ancak Fresnel düşüşünü görünler kalır. Bu efekt, bu ekran görüntülerinde de bulunan fiziksel olarak temel Fresnel düşüşünü taklit eder.

Kod örnekleri

Aşağıdaki kod örnekleri, hem bir PBR malzemesi hem de bir renk malzemesiiçin Fresnel düşüşünü efektini etkinleştirme ve özelleştirmeyi göstermektedir:

    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