Fények használata

A Windows App SDK Microsoft.UI.Composition API-jai lehetővé teszik valós idejű animációk és effektusok létrehozását. A kompozíciós világítás lehetővé teszi a 3D világítást a 2D alkalmazásokban. Ebben az áttekintésben áttekintjük a kompozíciós fények beállításának, az egyes fények fogadásához használt vizualizációk azonosításának és a tartalom anyagainak meghatározásához szükséges effektusok használatát.

Megjegyzés:

Az XamlLight objektumok CompositionLights alkalmazásának XAML UIElem-ek megvilágítására vonatkozó részleteiért lásd: XAML világítás.

A kompozíciós világítással érdekes felhasználói felületet hozhat létre az alábbiak engedélyezésével:

  • A fény átalakítása a jelenet más objektumaitól függetlenül, hogy modern forgatókönyveket, például zenelejátszási jeleneteket lehessen lehetővé tenni.
  • Az objektum és a fény párosításának képessége, hogy a jelenet többi részétől függetlenül együtt mozogjanak, lehetővé teszi az olyan forgatókönyvek megvalósítását, mint a Fluent Reveal kiemelés.
  • A fény és az egész jelenet átalakítása mint csoport, hogy anyagokat és mélységet hozzanak létre.

A kompozíciós világítás három fő fogalmat támogat: Light, Targets és SceneLightingEffect.

Light

A CompositionLight segítségével különböző fényeket hozhat létre, és elhelyezheti őket a koordináta-térben. Ezek a fények azokat a vizuális elemeket célozzák meg, amelyeket a fény által megvilágítottként szeretne látni.

Világos típusok

Típus Leírás
AmbientLight Olyan fényforrás, amely nem irányított fényt bocsát ki, amely a jelenet minden elemében tükröződik.
Távoli fény Végtelenül nagy távoli fényforrás, amely egyetlen irányban bocsát ki fényt. Mint a nap.
PointLight Pont fényforrás, amely minden irányban fényt bocsát ki. Mint egy villanykörte.
SpotLight Egy fényforrás, amely belső és külső fénykondenzát bocsát ki. Mint egy zseblámpa.

Targets

Ha a fények egy vizualizációt céloznak meg (hozzáadva a Célok listához), a vizualizáció és annak összes leszármazottja tisztában van ezzel a fényforrással, és reagál erre a fényforrásra. Ez lehet olyan egyszerű, mint egy PointLight-forrás beállítása egy fa gyökerénél, és az alábbi vizualizációk a pontfény irányának animációjára reagálnak.

A ExclusionsFromTargets lehetővé teszi, hogy a vizualizációk vagy a vizualizációk egy részhalmazának megvilágítását a célok hozzáadásához hasonlóan távolítsa el. A vizuális kizáródás által gyökerezett fán lévő gyermekek emiatt nem világítanak.

Minta (célok)

Az alábbi példában egy PointLight használatával célozzuk meg az XAML TextBlockot.

    _pointLight = _compositor.CreatePointLight();
    _pointLight.Color = Colors.White;
    _pointLight.CoordinateSpace = text; //set up co-ordinate space for offset
    _pointLight.Targets.Add(text); //target XAML TextBlock

Ha animációt ad a pontfény eltolásához, könnyen el lehet érni egy csillámló hatást.

_pointLight.Offset = new Vector3(-(float)TextBlock.ActualWidth, (float)TextBlock.ActualHeight / 2, (float)TextBlock.FontSize);

További információkért tekintse meg a GitHubon található teljes Szövegsimmer-mintát .

Restrictions

Számos tényezőt kell figyelembe venni annak meghatározásakor, hogy a CompositionLight mely tartalmakat fog megvilágítani.

Concept Részletek
Környezeti fény Ha nem környezeti fényt ad hozzá a jelenethez, az kikapcsolja az összes meglévő fényt. A nem környezeti fény által megcélzott elemek fekete színben jelennek meg. A nem a fény által megcélzott környező vizualizációk természetes módon való megvilágításához használjon környezeti fényt más fényekkel együtt.
Fények száma Bármilyen kombinációban használhat két nem környezeti összetételű fényfényt a felhasználói felület megcélzásához. A környezeti fények nincsenek korlátozva; a pont, spot, és távoli fények korlátozva vannak.
Élettartam A CompositionLight élettartam-feltételeket tapasztalhat (például a szemétgyűjtő használat előtt újrahasznosíthatja a fényobjektumot). Javasoljuk, hogy a fények hivatkozását úgy őrizze meg, hogy tagként fényeket ad hozzá az alkalmazás élettartamának kezeléséhez.
átalakítások A fényeket a felhasználói felület feletti csomópontba kell helyezni, amely a vizuális struktúrában lévő effektusokat, például perspektíva-átalakításokat használja a megfelelő rajzoláshoz.
Célok és tér koordinálása A Koordinátatér az a vizualizációs tér, amelyben a fény minden tulajdonságát be kell állítani. A CompositionLight.Targets fájlnak a CoordinateSpace fán belül kell lennie.

Világítás tulajdonságai

A használt fény típusától függően a fény tulajdonságokkal rendelkezhet a csillapításhoz és a térhez. Nem minden fénytípus használja az összes tulajdonságot.

Ingatlan Leírás
Szín A fény színe . A megvilágítási színértékeket a D3D Diffúz, a Környezeti és a Specular határozza meg, amely meghatározza a kibocsátott színt. A világítás RGBA-értékeket használ a fényekhez; az alfa színösszetevőt nem használja.
Irány A fény iránya. A fény iránya a Koordináta-tér vizuálhoz viszonyítva van megadva.
Térköz koordinálása Minden vizualizációhoz implicit 3D koordináta-tér tartozik. Az X irány balról jobbra halad. Az Y iránya felülről lefelé halad. Z irány egy pont a síkból kifelé. A koordináta eredeti pontja a vizualizáció bal felső sarkában található, az egység pedig a Device Independent Pixel (DIP). Ebben a koordinátában egy fény eltolása van definiálva.
Belső és külső kúpok A reflektorfények két részből álló fénykondenzát bocsátanak ki: egy világos belső kúpot és egy külső kúpot. A kompozíció lehetővé teszi a belső és a külső kúp szögének és színének szabályozását.
Ellensúlyoz A fényforrás eltolása a koordináta-térhez viszonyítva Vizualizáció.

Megjegyzés:

Ha több fény éri el ugyanazt a látványelemet, vagy ha egy fény színértéke elég nagy lesz ahhoz, hogy meghaladja az 1,0-t, a fény színe megváltozhat a fény színcsatornájának korlátozása miatt.

Speciális világítási tulajdonságok

Ingatlan Leírás
Intenzitása Szabályozza a fény fényerejét.
Csillapítás A csillapítás azt szabályozza, hogy a fény intenzitása hogyan csökken a tartománytulajdonság által megadott maximális távolság felé. Konstans, kvadratikus és lineáris csillapítási tulajdonságok használhatók.

Ismerkedés a világítással

A fények hozzáadásához kövesse az alábbi általános lépéseket:

  • A fények létrehozása és elhelyezése: Hozzon létre fényeket, és helyezze őket egy megadott koordináta-helyre.
  • Az objektumok azonosítása a megvilágításhoz: A fényt irányítsa a releváns látványelemekre.
  • [Nem kötelező] Határozza meg, hogy az egyes objektumok hogyan reagálnak a fényekre: A SceneLightingEffect és az EffectBrush használatával testre szabhatja a fényvisszaverődést a SpriteVisual megjelenítéséhez. A tükröződés alapértelmezései támogatják a fényforrás Koordinátaterének gyermekeinek megvilágítását. A SceneLightingEffecttel festett vizualizáció felülírja a vizualizáció alapértelmezett megvilágítását.

Jelenetvilágítási hatás

A SceneLightingEffect a CompositionLight által megcélzott SpriteVisual tartalmára alkalmazott alapértelmezett világítás módosítására szolgál.

SceneLightingEffect gyakran használatos anyag létrehozásához. A SceneLightingEffect egy olyan effektus, amelyet akkor használunk, ha valami összetettebbet szeretnénk elérni, például fényvisszaverő tulajdonságokat szeretnénk biztosítani egy képen, és/vagy a mélység illúzióját kelteni egy normál térképpel. A SceneLightingEffect lehetővé teszi a felhasználói felület testreszabását olyan megvilágítási tulajdonságok használatával, mint a spekuláns és a diffúz mennyiség. A világítási effektusokat az effektusok többi folyamatával tovább testre szabhatja, így külön-külön kombinálhatja és összeállíthatja a különböző fényreakciókat a tartalommal.

Megjegyzés:

A jelenetvilágítás nem hoz létre árnyékokat; ez a 2D-s renderelésre összpontosító hatás. Nem veszi figyelembe a térhatású világítási forgatókönyveket, amelyek valós világítási modelleket tartalmaznak, beleértve az árnyékokat is.

Ingatlan Leírás
Normál térkép Normalmaps egy textúra hatását hozza létre, amelyben a fény felé mutató normálvektor fényesebb lesz, és a fénytől irányítva álló normálvektor halványabb lesz. Ha NormalMap-et szeretne hozzáadni a megcélzott vizualizációhoz, használjon Egy CompositionSurfaceBrush-t az LoadedImageSurface használatával egy NormalMap-objektum betöltéséhez.
Környezeti A környezeti tulajdonságokat többnyire a teljes színvisszaverés szabályozására használják.
Specular A szpolár reflektálódás fényes foltokat hoz létre az objektumokon, amelyek így ragyogónak tűnnek. Szabályozhatja a spekuláris tükröződés szintjét, valamint a ragyogás szintjét. Ezeket a tulajdonságokat úgy manipulálják, hogy olyan anyageffektusokat hozzanak létre, mint a fényes fémek vagy a fényes papír.
diffúz A diffúz tükröződés minden irányban elszórja a fényt.
Tükrözési modell A tükrözési modell lehetővé teszi a Blinn Phong és a fizikai alapú Blinn Phong közötti választást. Az Ön által használt Blinn Phong modell physikailag alapú, amikor tömörített spekuláris kiemeléseket szeretne elérni.

Minta (SceneLightingEffect)

Az alábbi minta bemutatja, hogyan adhat hozzá normál térképet a SceneLightingEffecthez.

CompositionBrush CreateNormalMapBrush(ICompositionSurface normalMapImage)
{
    var colorSourceEffect = new ColorSourceEffect()
    {
        Color = Colors.White
    };
    var sceneLightingEffect = new SceneLightingEffect()
    {
        NormalMapSource = new CompositionEffectSourceParameter("NormalMap")
    };

    var compositeEffect = new ArithmeticCompositeEffect()
    {
        Source1 = colorSourceEffect,
        Source2 = sceneLightingEffect,
    };

    var factory = _compositor.CreateEffectFactory(sceneLightingEffect);

    var normalMapBrush = _compositor.CreateSurfaceBrush();
    normalMapBrush.Surface = normalMapImage;
    normalMapBrush.Stretch = CompositionStretch.Fill;

    var brush = factory.CreateBrush();
    brush.SetSourceParameter("NormalMap", normalMapBrush);

    return brush;
}