Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med API:er för Microsoft.UI.Composition i Windows App SDK kan du skapa animeringar och effekter i realtid. Kompositionsbelysning möjliggör 3D-belysning i 2D-applikationer. I den här översikten går vi igenom funktionerna i hur du konfigurerar kompositionsljus, identifierar visuella objekt för att ta emot varje ljus och använder effekter för att definiera material för ditt innehåll.
Anmärkning
Information om hur XamlLight-objekt använder CompositionLights för att belysa XAML UIElements finns i XAML-belysning.
Med kompositionsbelysning kan du skapa ett intressant användargränssnitt genom att tillåta:
- Omvandling av ett ljus oberoende av andra objekt i scenen för att möjliggöra uppslukande scenarier som musikuppspelningsscener.
- Möjligheten att para ihop ett objekt med ett ljus så att de flyttas tillsammans oberoende av resten av scenen för att aktivera scenarier som Fluent Reveal-markering .
- Omvandling av ljuset och hela scenen som en grupp för att skapa material och djup.
Kompositionsbelysning stöder tre viktiga begrepp: Ljus, Mål och SceneLightingEffect.
Ljus
Med CompositionLight kan du skapa olika lampor och placera dem i koordinatutrymme. Dessa ljus riktar sig mot visuella objekt som du vill identifiera som upplysta av ljuset.
Ljustyper
| Type | Beskrivning |
|---|---|
| AmbientLight | En ljuskälla som avger diffust ljus som reflekteras av allt i scenen. |
| DistantLight | En oändligt stor avlägsen ljuskälla som avger ljus i en enda riktning. Som solen. |
| PointLight | En ljuskälla som avger ljus i alla riktningar. Som en glödlampa. |
| Spotlight | En ljuskälla som avger inre och yttre koner av ljus. Som en ficklampa. |
Mål
När lampor riktar sig mot ett visuellt objekt (lägg till i mållistan ) är det visuella objektet och alla dess underordnade medvetna om och svarar på den här ljuskällan. Detta kan vara något så enkelt som att ställa in en PointLight-källa i roten av ett träd och alla visuella objekt nedan reagerar på animeringen av punktljusets riktning.
ExclusionsFromTargets ger dig möjligheten att ta bort belysningen av ett visuellt objekt eller en grupp av visuella objekt på samma sätt som att lägga till mål. Barn i trädet som är rotat med det visuella som är uteslutet lyses inte som ett resultat.
Exempel (Mål)
I exemplet nedan använder vi en PointLight för att rikta in oss på en XAML TextBlock.
_pointLight = _compositor.CreatePointLight();
_pointLight.Color = Colors.White;
_pointLight.CoordinateSpace = text; //set up co-ordinate space for offset
_pointLight.Targets.Add(text); //target XAML TextBlock
Genom att lägga till animering till förskjutningen av punktljuset uppnås lätt en skimrande effekt.
_pointLight.Offset = new Vector3(-(float)TextBlock.ActualWidth, (float)TextBlock.ActualHeight / 2, (float)TextBlock.FontSize);
Mer information finns i det fullständiga textskimmerexemplet på GitHub.
Begränsningar
Det finns flera faktorer att tänka på när du avgör vilket innehåll som ska tändas av CompositionLight.
| Begrepp | Detaljer |
|---|---|
| Omgivande ljus | Om du lägger till ett icke-omgivande ljus i scenen stängs allt befintligt ljus av. Objekt som inte är riktade mot ett icke-omgivande ljus visas som svarta. Om du vill belysa omgivande visuella objekt som inte är riktade mot ljuset på ett naturligt sätt använder du ett omgivande ljus tillsammans med andra ljus. |
| Antal lampor | Du kan använda två icke-omgivande kompositionsljus i valfri kombination för att rikta in dig på ditt användargränssnitt. Omgivande ljus är inte begränsade; spot-, punkt- och avlägsna ljus är det. |
| Livstid | CompositionLight kan uppleva livslängdsförhållanden (exempel: skräpinsamlaren kan återvinna ljusobjektet innan det används). Vi rekommenderar att du behåller en referens till dina lampor genom att lägga till lampor som medlem för att hjälpa programmet att hantera livslängden. |
| Transformationer | Lampor måste placeras i en nod ovanför användargränssnittet som använder effekter som perspektivtransformeringar i din visuella struktur för att ritas korrekt. |
| Mål och koordinatutrymme | CoordinateSpace är det visuella utrymme där alla ljusegenskaper måste anges. CompositionLight.Targets måste finnas i koordinatområdesträdet. |
Belysningsegenskaper
Beroende på vilken typ av ljus som används kan ett ljus ha egenskaper för attenuation och utrymme. Alla typer av lampor använder inte alla egenskaper.
| Fastighet | Beskrivning |
|---|---|
| Färg | Ljusets färg . Ljusfärgvärden definieras av D3D Diffuse, Ambient och Specular som definierar färgen som genereras. Belysning använder RGBA-värden för lampor; alfafärgkomponenten används inte. |
| Riktning | Ljusets riktning. Riktningen för ljuset anges i förhållande till sin visuella komponent Koordinatrymd. |
| Koordinatutrymme | Varje visuellt objekt har ett implicit 3D-koordinatutrymme. X-riktningen är från vänster till höger. Y-riktningen är uppifrån och ned. Z riktning är en punkt ut ur planet. Den ursprungliga punkten i den här koordinaten är det övre vänstra hörnet i det visuella objektet och enheten är Device Independent Pixel (DIP). En ljusförskjutning definieras i den här koordinaten. |
| Inre och yttre koner | Spotlights avsänder en ljuskägla som består av två delar: en ljus inre kon och en yttre kon. Med komposition kan du styra över inre och yttre konvinklar och färg. |
| Offset | Förskjutning av ljuskällan i förhållande till dess visuella koordinatutrymme. |
Anmärkning
När flera ljus träffar samma visuella objekt, eller när ett ljuss färgvärde blir tillräckligt stort för att överskrida 1,0, kan ljusets färg ändras på grund av klämning av ett ljuss färgkanal.
Avancerade belysningsegenskaper
| Fastighet | Beskrivning |
|---|---|
| Intensitet | Styr ljusets ljusstyrka. |
| Dämpning | Attenuation styr hur ett ljuss intensitet minskar mot det maximala avstånd som anges av range-egenskapen. Egenskaper för konstant, kvadratisk och linjär dämpning kan användas. |
Komma igång med belysning
Följ dessa allmänna steg för att lägga till lampor:
- Skapa och placera lamporna: Skapa lampor och placera dem i ett angivet koordinatutrymme.
- Identifiera objekt som ska tändas: Rikta ljuset mot relevanta visuella objekt.
- [Valfritt] Definiera hur enskilda objekt reagerar på ljus: Använd SceneLightingEffect med en EffectBrush för att anpassa ljusreflektion för att visa SpriteVisual. Reflektionsinställningar stöder belysningen av subelement i en ljuskällas Koordinatutrymme. Ett visuellt objekt som målats med en SceneLightingEffect skriver över standardbelysningen för det visuella objektet.
SceneLightingEffect
SceneLightingEffect används för att ändra standardbelysningen som appliceras på innehållet i en SpriteVisual som är målet för en CompositionLight.
SceneLightingEffect används ofta för att skapa material. En SceneLightingEffect är en effekt som används när du vill uppnå något mer komplext, som att aktivera reflekterande egenskaper på en bild och/eller ge en illusion av djup med en normal karta. En SceneLightingEffect ger möjlighet att anpassa ditt användargränssnitt med hjälp av belysningsegenskaper som spektulära och diffusa mängder. Du kan ytterligare anpassa belysningseffekter med resten av effektpipelinen så att du individuellt kan blanda och komponera olika ljusreaktioner med ditt innehåll.
Anmärkning
Scenbelysning producerar inte skuggor; det är en effekt som fokuserar på 2D-återgivning. Det tar inte hänsyn till 3D-belysningsscenarier som inkluderar verkliga belysningsmodeller, inklusive skuggor.
| Fastighet | Beskrivning |
|---|---|
| Normal Map | NormalMaps skapar en effekt av en textur där en normal som pekar mot ljuset kommer att bli ljusare och en normal som pekar bort kommer att bli mörkare. Om du vill lägga till en NormalMap till ditt visuella mål, använder du en CompositionSurfaceBrush med LoadedImageSurface för att läsa in en NormalMap-resurs. |
| Omgivande | Omgivande egenskaper används främst för att styra den övergripande färgreflektionen. |
| Specular | Spegling skapar markeringar på objekt, vilket gör att de ser glänsande ut. Du kan styra nivån av spekulativ reflektion samt glansnivån. Dessa egenskaper manipuleras för att skapa materialeffekter som glänsande metaller eller glansigt papper. |
| Diffusa | Diffus reflektion sprider ljuset i alla riktningar. |
| Reflektansmodell | Med reflektansmodellen kan du välja mellan Blinn Phong och Fysiskt baserad Blinn Phong. Du skulle välja Fysiskt baserad Blinn Phong när du vill ha komprimerade spektulära markeringar. |
Exempel (SceneLightingEffect)
Exemplet nedan visar hur du lägger till en normal karta i en SceneLightingEffect.
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;
}
Relaterade artiklar
Windows developer