Datormagazin
    Facebook
    Senaste testerna
    • Test: Huawei Watch GT 3 SE
    • Test: Beoplay EX
    • Test: Sony Xperia 1 III
    • Test: Cooler Master Masterair MA624 Stealth och MA612 Stealth ARGB
    • Test: Huawei Mate 40 Pro
    DatormagazinDatormagazin
    • Hem
    • Nyheter
    • Tester
      1. Toppklass
      2. DMZ Rekommenderar
      3. Gaming
      4. Jämförande test
      5. Se alla

      Test: Asus ROG Azoth

      3 januari, 2023

      MSI RTX 4090 Suprim X

      9 december, 2022

      Test: Logitech Litra Glow

      9 september, 2022

      Test: Logitech Aurora Collection

      10 augusti, 2022

      Test: Netgear Nighthawk M6 Pro

      31 mars, 2023

      Test: Zagg – komplett skydd för mobila enheter

      26 mars, 2023

      Test: Kingston Ironkey Vault Privacy 80ES

      18 mars, 2023

      OnePlus Buds Pro 2

      14 mars, 2023

      Produktgenomgång: MSI GeForce RTX 4070Ti Suprim X

      28 mars, 2023

      Test: Philips Evnia Curved Gaming Monitor (27M2C5500W)

      26 februari, 2023

      Test: MSI MAG B650 Tomahawk WiFi

      19 februari, 2023

      Test: Gigabyte RTX 4080 Gaming OC

      30 januari, 2023

      Test: Logitech Ergo K860 vs. Microsoft Sculpt Ergonomic Keyboard

      19 augusti, 2021

      Vi utser den bästa multiskrivaren

      20 maj, 2021

      Test: Cooler Master Masterair MA624 Stealth och MA612 Stealth ARGB

      12 maj, 2021

      Test: Oneplus 9 Pro och Oneplus 9

      21 april, 2021

      Test: Netgear Nighthawk M6 Pro

      31 mars, 2023

      Varför online-casinon accepterar en mängd olika betalningsmetoder

      31 mars, 2023

      Test: JBL Tour Pro 2

      29 mars, 2023

      Så har casinobranschen utvecklats i symbios med datorer och och internet

      28 mars, 2023
    • DMZ-riggen
    • Programtips
    • Gaming
    • Fråga experten
      • Hårdvara
      • Mjukvara
    • DMZ Retro
    • Shop
    • Om DMZ
      • Om Datormagazin
      • Annonsera
      • Nyhetsbrevet
      • Kundtjänst
      • Press & PR
    Facebook
    Datormagazin
    Hem»Artikel»Topphändelser»Tricksen bakom ett lyckat scenintro
    w Hartverdrahtet
    Topphändelser

    Tricksen bakom ett lyckat scenintro

    Mikael FalkviddAv Mikael Falkvidd17 mars, 20173 kommentarerca 8 minuters läsning

    Demoscenen har i många år producerat fantastiska multimedieupplevelser, och många av de duktigaste demoprogrammerarna arbetar på företag som Oculus Rift, Pixar och Dice. Elitidrottare använder höghöjdsträning och bromsande fallskärmar för att träna upp sin maximala förmåga, medan demoprogrammerare sätter upp regler för maximal kodstorlek för att utmana och trimma sina färdigheter till det yttersta.

    Av Mikael Falkvidd

    I den vanligaste introklassen måste hela introt rymmas i en fil på 4 096 byte. Det inkluderar kod, grafik och ljud. Målet med ett demo är att det ska vara bättre än vad folk trodde var möjligt.

    Ett lyckat demo visar vad hårdvaran klarar, skaparnas artistiska förmåga (grafik, musik) och deras tekniska förmåga (duktiga programmerare). Målet är inte att tjäna pengar, även om det hänt när företag som Intel och Creative anlitat demoprogrammerare för att marknadsföra sina produkter.

    Oldskool eller newskool

    Scendemon delas ofta in i två grupper: oldskool och newskool. Oldskool-demon måste kunna köras på en av de klassiska spel/datorplattformarna. Amiga 500, Amiga 1200, C64 och Atari är vanligast, men det finns demoklasser för mindre enheter som Gameboy och till och med grafräknare från Texas Instruments. För oldskool-demon blir begränsningarna ganska naturliga: Demot måste få plats på det lagringsmedium som enheten använder, och det måste kunna köras i realtid med de beräknings- och minnesresurser som finns tillgängliga.

    För newskool är det PC-plattformen som dominerar, även om det finns andra plattformar. Här är hårdvaran inte en lika krävande begränsning. En Amiga 500 med en processor på 7,14 megahertz och 512 kilobyte minne ger helt andra utmaningar än en Core i7-5820K på 3,3 gigahertz, som dessutom har ett modernt grafikkort med sex gigabyte minne.

    Utmaningarna

    Det finns dock en hel del likheter i vilka utmaningar en demoprogrammerare ställs inför. För att få plats inom 4 kB-gränsen går det inte att använda färdig grafik. Som en jämförelse kan nämnas att du på 4 kilobyte inte ens fått ner loggan för en av Sveriges större nyhetswebbplatser (4 864 byte när vi kollade). All grafik måste genereras av någon form av algoritm. Detsamma gäller musiken. En vanlig mp3-fil använder omkring 16 kilobyte per sekund, vilket innebär att inspelat ljud är uteslutet.

    Inte nog med att grafik och ljud ska genereras, ett intro ska ha kod för att generera rörlig bild och lägga på specialeffekter, och det behövs kod för att spela upp ljudet. För att få plats med allt detta krävs en hel del tricks.

    Komprimering

    Vi börjar med ett mycket enkelt demo:

    int main(int argc, char** argv){

            return 0;

    }

    Allt denna kod gör är att avsluta sig. Efter kompilering får vi en exe-fil som väger in på 57 754 byte. Inte bra, långt över vår gräns på 4 096 byte, och vi har inte ens lagt in någon riktig kod än. Den stora storleken beror delvis på att Windows exe-filformat kräver en viss struktur, och denna struktur tar mycket plats.

    I en vanlig Windowsinstallation skickas det med verktyg för komprimering (make cab.exe) och avkomprimering (extrac32.exe). Vi kan därför använda dessa verktyg utan att skicka med dem inuti vårt intro.

    Genom att komprimera exe-filen i cab-format och skapa en bat-fil, som ser ut så här, kan vi spara en del utrymme:

    c:\windows\system32\extrac32.exe

    demo.cab

    demo.exe

    del demo.exe

    Bat-filens storlek räknas givetvis in i demot, men några byte kan sparas genom att byta namn på filerna:

    c:\windows\system32\extrac32.exe .c

    .x

    del.x

    Genom att utnyttja att filer inte behöver heta något före punkten och att del-kommandot inte behöver något mellanslag om filen saknar förled sparar vi 19 byte.

    Det är även möjligt att placera cab-filen inuti bat-filen. Om kommandotolken hittar en byte med värdet 0x00 kommer den att pausa tolkningen av tecken tills den hittar en ny rad (0x0D följt av 0x0A). Därför kan vi lägga in ett 0x00-tecken i början av bat-filen, följt av innehållet i cab-filen. Därefter lägger vi in 0x0D+0x0A följt av extrac32-kommandot.

    Lösningen kan ses som innovativ, och var ett av de vanligaste sätten att komprimera intro fram till 2005. En stor nackdel är att en fil måste skrivas till disk. Det är inte så snyggt, och demoprogrammerare strävar efter perfektion.

    Crinkler

    Sommaren 2005 släpptes Crinkler (www.crinkler.net), som utvecklas av Rune Stubbe (Mentor/TBC) och Aske Simon Christensen (Blueberry/Loonies). Målet med projektet är ”att vara den renaste, effektivaste och mest kompatibla komprimeraren för 4k-intron på Windows”. Programmet ersatte snabbt cab-komprimeringsmetoden. Crinkler har mer avancerade komprimeringsalgoritmer än vad extrac32 har stöd för och lyckas därför komprimera exe-filen bättre. Resultatet är en exe-fil som kan köras direkt, utan att spara en temporär fil på disk.

    I en exe-fil finns obligatoriska fält som Windows aldrig läser. Detta utnyttjar Crinkler bland annat för att lagra sin avkomprimeringsalgoritm, vilket gör att algoritmen inte behöver ta upp extra plats.

    För att uppnå sin höga effektivitet arbetar Crinkler som ett länkverktyg, vilket innebär att den läser in demots objektfiler istället för den färdiga exe-filen. Det går att använda Crinkler fristående, men programmet är konstruerat för att kunna ersätta länkprogrammet i Visual Studio för att det ska vara så enkelt som möjligt att använda programmet.

    Onödiga bibliotek och felhantering

    Med hjälp av Crinkler kommer du långt, men du kommer snart att upptäcka att det inte räcker. Standardbiblioteket i C innehåller funktioner som printf, malloc, sin och cos. Använder du dessa funktioner länkas de in i ditt program och tar upp plats. Genom att undvika att använda standardfunktionerna sparar du utrymme.

    Vid vanlig applikationsutveckling är felhantering bra. Men för ett demo som inte behöver hantera användarinput eller främmande data och som är optimerat för att köras på en modern version av Windows är felhantering inte lika viktigt.

    Det går dessutom att stänga av kontroll av stacken och undantagshantering. I ett exempel från Dave ”Polaris” Valentine och William ”s_tec” Swanson sparades 879 byte genom att undvika standardfunktioner och felhantering.

    Gör koden komprimerbar med nollor

    Det är vanligt att animationer, objekt och genererade ljud använder flyttalskonstanter. Kanske ska ditt objekt roteras 1,4 grader per bildruta. Talet 1,4 lagrat som flyttal blir 00111111 10110011 00110011 00110011 binärt och tar då upp 4 byte i din exe-fil. Det kanske inte gör något om animationen går något långsammare. Genom att rotera 1,375 grader istället lagras talet som 00111111 10110000 00000000 00000000. Med denna teknik kan komprimeringen ofta få ner storleken på flyttalen till mellan 1,8 och 2 byte per tal, en besparing på minst 50 procent. Det låter kanske onödigt, men varje byte räknas.

    Assemblerfunktioner

    Vissa funktioner tar mycket plats. Genom att implementera funktionerna för hand i assembler kan du spara plats. Eftersom du vet på förhand vilka data funktionen kommer att anropas med kan du ta genvägar och spara både utrymme och beräkningstid. Det finns även möjlighet att använda färdiga bibliotek med funktioner som redan är optimerade.

    Generera musik och grafik

    Eftersom det inte finns plats att lagra färdig grafik eller ljud, måste dessa genereras. Genereringen av grafik sker med matematiska funktioner. Fraktaler är vanliga, till exempel Mandelbrotsmängden.

    För att generera musik används oftast en mjukvarusynt. Den mest populära synten för 4k-demon i Windows är 4klang, utvecklat av Dominik Ries (Gopher/Al catraz) och Paul Kraus (pOWL/Alcatraz). Programmet har ett grafiskt gränssnitt för att komponera musiken. Uppspelaren kan köras på Windows, Linux och OS X.

    Inspireras av etablerade demoprogrammerare

    Genom att studera andras demon kan du lära dig mycket. Du hittar massor av demon på http://www.pouet.net/prodlist.php där du kan ladda ner och köra dem på din egen dator. De flesta går dessutom att se direkt online via webbplatser som Youtube och demozoo.org.

    Flera demogrupper har släppt källkoden till sina demon. Några har dessutom släppt hjälpbibliotek och verktyg för att göra effektiv och utrymmessparande kod.

    Läs mer på http://www.displayhack.

    Lär dig skriva ett eget demo

    För dig som blivit sugen på att skriva ett eget demo finns det gott om resurser på nätet. Du är naturligtvis inte begränsad till Windows, utan kan välja din egen favoritplattform. Många av teknikerna är desamma oavsett plattform, men genom att utnyttja plattformens styrkor kan du nå ännu längre. Se faktarutan här intill för guider som kan hjälpa dig komma igång.

     

    Webbresurser

    DEMO 4k-intro för Linux med gott om dokumentation, https://github.com/lynxed/intrusion

    Komponera ljudeffekter med 4klang, http://bit.ly/2jykz9a

    Skriv demo i Javascript, http://bit.ly/2idN4Hc

    Left 4k Dead – Ett Javabaserat spel på under 4 096 byte av  Markus Persson (Notch/Mojang) med all källkod. Sidan är tyvärr borttagen men kan nås via The Internet Archive, http://bit.ly/2j33LGr

    Nybörjarguide för demoprogrammering i Windows, http://bit.ly/2jd37n0

    Detaljerad guide för att skriva ett demo med rullande text, http://bit.ly/2idSDFH

     

    Demopartyn under 2017

    På demopartyn finns inte bara möjlighet att tävla med egna demon och se andras alster, du får även chans att prata med likasinnade. Se http://www.demoparty.net/2017/.

    Datormagazin Retro #6 – t-shirt
    guide utveckling
    Dela. Facebook Twitter LinkedIn E-post WhatsApp

    Missa inte

    DMZ Rekommenderar

    Test: Netgear Nighthawk M6 Pro

    31 mars, 2023ca 6 minuters läsning
    Tester

    Test: JBL Tour Pro 2

    29 mars, 2023ca 7 minuters läsning
    Samarbete

    Produktgenomgång: MSI GeForce RTX 4070Ti Suprim X

    28 mars, 2023ca 1 minuts läsning
    Tester

    Test: Zagg – komplett skydd för mobila enheter

    26 mars, 2023ca 8 minuters läsning
    Läs 3 kommentarer

    3 kommentarer

    1. Anders Lundberg på 24 mars, 2017 20:25

      Den bästa och mest intressanta artikeln jag läst på länge! Tackar så jättemycket för läsningen.

      Svara
      • Mikael Falkvidd på 24 mars, 2017 23:16

        Riktig kul att höra Anders, tack!

        Svara
    2. Andreas Rejbrand på 25 mars, 2017 14:31

      Jag håller med om att den här artikeln var ovanligt spännande! Men jag hade gärna sett mer om de matematiska algoritmer som används för att generera bild och ljud. På sista tiden har jag själv experimenterat med cellulära automater [1].

      [1] http://rejbrand.se/rejbrand/newsfilter.asp?q=cellular+automat

      Svara

    Svara Ångra svar

    Senaste kommentarerna
    • Anders om Operativsystem på en pinne
    • Elvo om Test: Gigabyte RTX 4080 Gaming OC
    • Krister om Intel delar och slår ihop avdelningar
    • Anders om Netgear lanserar mobil 5G-router med WiFi 6E
    • Anders om Lenovo Yoga Slim 7i Carbon
    Fler nyheter

    Eve Motionblinds – gör dina dumma rullgardiner smarta

    8 mars, 2023

    Fler cyberhot 2022 enligt Trend Micro

    7 mars, 2023

    Asustor lanserar dubbel expansionskort

    8 februari, 2023

    Företag skäms för sina webbplatser

    2 februari, 2023

    Toppklass

    Test: Asus ROG Azoth

    3 januari, 2023

    Test: Logitech Litra Glow

    9 september, 2022

    Test: Asus ROG Strix Z690-I Gaming WIFI

    21 april, 2022

    Test: Kingston KC3000

    26 januari, 2022
      Nyhetsbrev

      Prenumerera på vårt nyhetsbrev Uppsnappat!

      Du har väl inte missat vårt nyhetsbrev? Anmäl dig i dag så får du IT-nyheter, programtips, guider och expertsvar direkt i din inkorg.


      Nyhetsbrevet skickas ut upp till två gånger per vecka till cirka 14 000 prenumeranter.

      Kontaktinformation
      Kontaktinformation

      Omsoc Publishing AB
      Datormagazin
      Box 440 73
      100 73 Stockholm
      Sweden

      Telefonnummer: +46 8–208 118
      E-post: datormagazin@datormagazin.se

      Missa inte

      Test: Apple Homepod (gen2)

      31 januari, 2023

      AMD Epyc 4 är här – vi rapporterar från lanseringen i San Fransisco

      11 november, 2022

      Test: Beoplay EX

      19 september, 2022
      Datormagazin
      Facebook YouTube RSS
      • Om cookies
      • Hantering av personuppgifter
      • Köpvillkor www.datormagazin.se
      © 2023 Datormagazin/Omsoc Publishing AB, org-nr: 559034-9014 – Ansvarig utgivare: Anders Öhman

      Skriv ovan och tryck Enter för att söka. Tryck Esc to cancel.