Delen via


Fresnel-effect

De fresnel effect materiaalfunctie is een niet-fysiek correct, ad-hoc effect. De functie is gebaseerd op de fysieke observatie van objecten die steeds reflecterender worden in deze hoeken. Fresnel reflectance zelf is al fysiek opgenomen in het PBR-materiaalmodel dat wordt gebruikt in Azure Remote Rendering. De fresnel effect materiaalfunctie is daarentegen slechts een additief kleureffect zonder afhankelijkheid van lichten of de luchtomgeving.

Het fresnel-effect geeft betrokken objecten een gekleurde glans rond hun randen. Informatie over effectaanpassing en voorbeelden van de renderingresultaten vindt u in de volgende secties.

Notitie

Het fresnel-effect kan niet worden toegepast op puntwolken.

Het fresnel-effect inschakelen

Als u de fresnel-effectfunctie wilt gebruiken, moet deze worden ingeschakeld voor de betreffende materialen. U kunt dit inschakelen door de FresnelEffect-bit van de PbrMaterialFeatures in te stellen op het PBR-materiaal. Hetzelfde patroon is van toepassing op de ColorMaterialFeatures en het kleurmateriaal. Zie de sectie met codevoorbeelden voor een gebruiksdemonstratie.

Nadat dit is ingeschakeld via de API, is het fresnel-effect onmiddellijk zichtbaar. De glans is standaard wit (1, 1, 1, 1) en heeft een exponent van 1. U kunt deze instellingen aanpassen met behulp van de onderstaande parametersetters.

Het uiterlijk van het effect aanpassen

Op dit moment kan het fresnel-effect per materiaal worden aangepast met behulp van de volgende eigenschappen:

Materiaaleigenschap Type Uitleg
FresnelEffectColor Kleur4 De kleur die maximaal wordt toegevoegd als de fresnel glans. Het alfakanaal wordt momenteel genegeerd.
FresnelEffectExponent zwevend De verspreiding van de fresnel glans. Varieert van 0,01 (verspreid over het hele object) tot 10 (alleen de meest gracing hoeken).

In de praktijk zien verschillende kleur- en exponentinstellingen er als volgt uit:

Fresnel effect examples

De exponent van het fresnel-effect wordt geleidelijk verhoogd van 1 tot 10 voor elke kleurrij. Hierdoor trekt de fresnel glans geleidelijk naar de randen van de bekeken objecten. Het fresnel-effect wordt ook niet beïnvloed door transparantie, zoals u in het volgende voorbeeld kunt zien:

Fresnel effect transparency examples

Zoals weergegeven, zijn de objecten op de diagonale volledig transparant, maar fresnel glans blijft bestaan. Het effect nabootst fysiek gebaseerde fresnel in dat opzicht, die ook aanwezig is in deze schermafbeeldingen.

Codevoorbeelden

De volgende codevoorbeelden tonen het inschakelen en aanpassen van het fresnel-effect voor zowel een PBR-materiaal als een kleurmateriaal:

    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-documentatie

Volgende stappen