Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Beste technologie voor high performance desktop graphics

Pagina: 1
Acties:

  • NickThissen
  • Registratie: november 2007
  • Laatst online: 00:51
Ik werk aan een desktop applicatie die zogenaamde "overlay graphics" tekent. Deze graphics zijn bedoeld om bovenop een stream van een game geprojecteerd te worden. Denk bijvoorbeeld aan een Formule 1 race uitzending op tv, waar de huidige stand, rondetijden, etc op beeld komen, of de huidige stand bij een voetbal wedstrijd (simpel voorbeeld).

Momenteel is de software gebouwd in C# .NET waarbij ik WPF gebruik voor de graphics. De graphics zijn in principe WPF UI elements met allerlei effecten, deze worden vervolgens op een transparent window geplaatst en via data-binding wordt de tekst / data ingevuld.

Hoewel dit makkelijk te ontwikkelen is loop ik de laatste tijd tegen serieuze performance problemen aan. Ik wil graag gebruik maken van animaties en steeds meer effecten (denk aan pixel shader effecten zoals dropshadows en blending) en WPF lijkt dit niet goed aan te kunnen. Ik heb heel erg moeite om 60 fps animaties te halen en de animaties haperen en lopen gewoon niet mooi.

Ik heb overal gezocht voor performance tweaks maar ik vind maar weinig verbetering, en zelfs als ik een simpele versie bouw zonder ingewikkelde data-binding bijv zijn de animaties al niet smooth. Ik ben nu eigenlijk op zoek naar een betere technologie die hier beter voor geschikt is.

Kan iemand mij op de juiste weg helpen om een alternatief te vinden om de UI te tekenen, met het oog op high performance (smooth 60 fps minimaal en full-screen graphics)?

Twee dingen die ik zo kan bedenken met hun voor- en nadelen:
  • HTML / CSS / js (bijv Electron): wellicht is het een mogelijkheid om de UI volledig web-based te bouwen. Ik ben echter bang dat ik ook hier tegen performance issues aan ga lopen. Dit lijkt een groot project vooral omdat de huidige code-base in .NET is, en als het probleem niet oplost dan ga ik hier veel tijd aan verspillen. Wellicht is een mogelijkheid via Electron.NET om te communiceren tussen mijn bestaande .NET code (soort van client die de data die getoond moet worden doorstuurt) en een losse UI in Electron?
  • DirectX: in mijn zoektocht kom ik het meeste tegen om low-level DirectX te gaan gebruiken. Voor performance lijkt me dit inderdaad het beste, maar het lijkt erop dat ik dan een volledig eigen renderer moet gaan bouwen en dat is toch echt niet de bedoeling...
Er moeten toch wel betere alternatieven zijn om graphics op m'n scherm te toveren met high performance in gedachten?

Op het moment heb ik interesse in elke optie, maar een heel groot voordeel is wel als ik het kan combineren met de bestaande .NET codebase. Ik ben eigenlijk niet van plan de hele applicatie opnieuw te gaan bouwen, alleen de UI zou ideaal zijn.

Bedankt voor suggesties...

Mijn iRacing profiel


  • RobIII
  • Registratie: december 2001
  • Laatst online: 01:06

RobIII

Moderator Devschuur®

^ Romeinse 3 ja!

Kijk eens naar Unity ofzo?

RobIII wijzigde deze reactie 06-11-2019 11:32 (38%)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • michiel_
  • Registratie: juli 2005
  • Niet online
Unreal Engine 4 wordt hier o.a. voor gebruikt. Bijvoorbeeld bij Fox Sports / F1 bij Ziggo:
nieuws: Amerikaanse tv-zender maakt virtuele Nascar-studio met Unreal Engine

edit: Unity is misschien een beter idee als je in de C# wereld wil blijven

michiel_ wijzigde deze reactie 06-11-2019 11:40 (11%)


  • MrTKing
  • Registratie: oktober 2012
  • Laatst online: 13-12 11:10
Chromium i.c.m. C# -> https://cefsharp.github.io/

  • NickThissen
  • Registratie: november 2007
  • Laatst online: 00:51
Hmm, klinkt interessant..! Ik ken Unity alleen voor games. Heb je in gedachten om Unity enkel voor de UI te gebruiken en op een of andere manier de data binnen Unity te krijgen vanuit een andere (mijn bestaande) desktop app? Ik denk dat meteen aan communicatie via bijv sockets of lokale http server, of denk ik dan te moeilijk?

Mijn iRacing profiel


  • RobIII
  • Registratie: december 2001
  • Laatst online: 01:06

RobIII

Moderator Devschuur®

^ Romeinse 3 ja!

NickThissen schreef op woensdag 6 november 2019 @ 16:08:
Heb je in gedachten om Unity enkel voor de UI te gebruiken en op een of andere manier de data binnen Unity te krijgen vanuit een andere (mijn bestaande) desktop app?
Dat kan. Alles kan.
NickThissen schreef op woensdag 6 november 2019 @ 16:08:
Ik denk dat meteen aan communicatie via bijv sockets of lokale http server, of denk ik dan te moeilijk?
Ik zou dan eerder eens kijken naar gRPC (meer hier) of SignalR. Die zijn toch wel de way forward en in ieder geval stukken beter dan zelf gaan liggen klooien met rauwe sockets.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Sandor_Clegane
  • Registratie: januari 2012
  • Laatst online: 22:58

Sandor_Clegane

Fancy plans and pants to match

Maak van je TV stream een Texture en de mogelijkheden zijn eindeloos. De performance zal ook prima zijn.

  • NickThissen
  • Registratie: november 2007
  • Laatst online: 00:51
RobIII schreef op woensdag 6 november 2019 @ 16:12:
[...]

Dat kan. Alles kan.


[...]

Ik zou dan eerder eens kijken naar gRPC (meer hier) of SignalR. Die zijn toch wel de way forward en in ieder geval stukken beter dan zelf gaan liggen klooien met rauwe sockets.
SignalR heb ik wel wat ervaring mee, helaas na wat kort testen nog niet in Unity aan de praat gekregen, maar het lijkt wel mogelijk te zijn.
Zelf zat ik ook nog aan bijvoorbeeld memory mapped files te denken, lijkt wellicht iets makkelijker in gebruik, maar ik lees dat Unity daar weinig (tot geen) support voor heeft (want zit blijkbaar niet in Mono?).
Sandor_Clegane schreef op donderdag 7 november 2019 @ 06:08:
Maak van je TV stream een Texture en de mogelijkheden zijn eindeloos. De performance zal ook prima zijn.
Wat bedoel je hier mee? Begrijp niet waar je het over hebt sorry.

Mijn iRacing profiel


  • Sandor_Clegane
  • Registratie: januari 2012
  • Laatst online: 22:58

Sandor_Clegane

Fancy plans and pants to match

Zorg ervoor dat je je tv stream naar een texturemap omzet en je kan er van alles mee doen. Volgens mij ondersteunt Unity ook video als een texture.

Wat ik zelf heb gebruikt is een UDP server binnen Unity waar ik 360 graden jpegs in ontvang. dit werkt prima en is heel erg snel.

  • NickThissen
  • Registratie: november 2007
  • Laatst online: 00:51
De TV stream is niet relevant. Ik maak de graphics die boven op de TV stream komen.

Mijn iRacing profiel


  • Janoz
  • Registratie: oktober 2000
  • Laatst online: 17:55

Janoz

Moderator Devschuur®

!litemod

Zeker wel. Door je TV stream op een texture te zetten kun je die in unity beeldvullend renderen. Daarna kun je al je overlay elementen er gewoon overheen tekenen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • NickThissen
  • Registratie: november 2007
  • Laatst online: 00:51
Het gaat om het renderen van de overlay elementen. De TV stream hoef ik niet te renderen. De overlay elementen render ik ofwel op een transparent window welk over de TV stream heengelegd wordt, of ik render ze direct naar een Tricaster hardware via NDI waar ze vervolgens met andere streams (zoals de TV stream) gecombineerd worden.

Mijn iRacing profiel


  • Sandor_Clegane
  • Registratie: januari 2012
  • Laatst online: 22:58

Sandor_Clegane

Fancy plans and pants to match

Oh, daar wordt het een stuk simpeler van. Wat voor gegevens moet je in Unity hebben?

  • NickThissen
  • Registratie: november 2007
  • Laatst online: 00:51
Sandor_Clegane schreef op zaterdag 9 november 2019 @ 09:51:
Oh, daar wordt het een stuk simpeler van. Wat voor gegevens moet je in Unity hebben?
De gegevens die mijn "client" zeg maar output. De client is C# .NET en bevat bijvoorbeeld de states van alle elementen (visible/invisible) en de data die ze moeten laten zien. Als ik die data in Unity krijg via SignalR bijv (of andere manier) dan is het daarna "simpel" (echter heb ik geen ervaring met Unity dus dat zal weer een nieuwe uitdaging worden).

Mijn iRacing profiel


  • Xiphalon
  • Registratie: juni 2001
  • Laatst online: 12-12 22:05
Voor onze high-performance grafisch zware UI gebruiken we Skia, daar is een mooie .net binding voor, Skiasharp.

Wordt ook door Google gebruikt in Chrome.

  • mcdronkz
  • Registratie: oktober 2003
  • Laatst online: 10-12 22:04
Heb je een voorbeeld (screenshot) van de gewenste output?

Er zijn talloze manieren om data-feeds te transformeren naar (bewegend) beeld. Meest laagdrempelige omgeving lijkt me een webbrowser. Canvas / WebGL of zelfs CSS-transforms zouden toereikend moeten zijn voor animaties van > 60 fps.

Socket.IO kun je gebruiken voor je datavoorziening.

Voor het renderen zijn er waanzinnig veel opties, bijvoorbeeld PixiJS. Maar 't zou ook prima kunnen dat je met CSS animaties uit de voeten kunt.

  • Sandor_Clegane
  • Registratie: januari 2012
  • Laatst online: 22:58

Sandor_Clegane

Fancy plans and pants to match

NickThissen schreef op zaterdag 9 november 2019 @ 21:51:
[...]

De gegevens die mijn "client" zeg maar output. De client is C# .NET en bevat bijvoorbeeld de states van alle elementen (visible/invisible) en de data die ze moeten laten zien. Als ik die data in Unity krijg via SignalR bijv (of andere manier) dan is het daarna "simpel" (echter heb ik geen ervaring met Unity dus dat zal weer een nieuwe uitdaging worden).
Ik heb zelf een webserver geschreven die je in Unity kunt gebruiken en welke events afvuurt waarop je je in Unity kunt abonneren. Deze is op basis van HTTP listener en dan POST je gewoon data op een URL die je dan in Unity weer tevoorschijn tovert via een eventlistener. Draait in een aparte thread en staat los van de "main" gameloop.
Pagina: 1


Apple iPhone 11 Nintendo Switch Lite LG OLED C9 Google Pixel 4 FIFA 20 Samsung Galaxy S10 Sony PlayStation 5 Elektrische voertuigen

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True