Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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;
}
Kapcsolódó cikkek
Windows developer