Teknologian jakaminen

[The Road to Game Engine] Ascending to the Gods (7) - x86 Assembly Learning: Jos teet vaikeita asioita, saat jotain.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

20. toukokuuta - 4. kesäkuuta: Voita 2D-fysiikkamoottori.
4. kesäkuuta - 13. kesäkuuta: Selvitä "3D-matematiikan perusteet".
13. kesäkuuta - 20. kesäkuuta: Voita "3D Graphics Tutorial".
21. kesäkuuta - 22. kesäkuuta: Voita "Raycasting Game Tutorial".
23. kesäkuuta - 1. heinäkuuta: Voita "Windows Game Programming Master Skills".
2. heinäkuuta - 6. heinäkuuta: Voita "Atari 2600 Compilation Game Development".
7. heinäkuuta - 11. heinäkuuta: Voita "x86/x64 Assembly Language".

Seuraava tavoite: "3D Game Programming Master Skills"

Tällä kertaa kyseessä on toinen taistelu "vieraalla" planeetalla. Kävin eilen pyöräilemässä. Tämä ei ollut tavallinen 60 kilometriä. Psyykkinen tilani ei ole kovin hyvä tänään, voin sanoa, että purin hampaitani ja lopetin opetusohjelman.

Huomasin kuitenkin, että pidän myös tästä tunteesta. Ei niin tuntematon kuin Atari 2600 -kokoelma.

Assemblyn oppiminen on todella sellaista huippupeliä, jossa ei todellakaan voi tehdä virheitä. Tein enemmän muistiinpanoja kuin muistin yhden lukukauden aikana. Vaikka se on vain muutama lause, olen kirjoittanut muistiinpanoja tiiviisti. Olisi ollut mukavaa, jos olisin voinut työskennellä niin kovasti, kun olin yliopistossa.

Opin tällä kertaa kaksi opetusohjelmaa, yksi on X86-32-bittinen. Yksi on x86-64-bittinen. Molemmilla on omat vahvuutensa ja heikkoutensa. Esimerkiksi ensimmäisessä opetusohjelmassa ei opetettu funktioiden kutsumista loppuun asti. 64-bitin perusteet on selitetty hyvin, mutta edistyneitä sovelluksia ei käsitellä ollenkaan.

Tämän kurssin opiskelun jälkeen minulla on suurin käsitys siitä, että kokoonpano on suhteellisen "matala" asia ja suhteellisen "takapäin" asia Kieli (kielet".

Tämä antaa minulle vaikutelman, että jos käyttämäni ohjelmointikieli on aseita ja tykkejä, niin kokoonpanokieli on kylmä ase. Ajatteletpa sitä miten tahansa, se antaa sinulle melko "takapuolisen" vaikutelman. Minulla oli sama vaikutelma, kun opin Atari 2600:n kokoonpanoa.

Kuitenkin, kun opin x86-kokoonpanon, tämä vaikutelma muuttui täysin. Kokoonpano on yksinkertaisesti "seuraavan sukupolven" ase. Se ei ole kylmäase, vaan "korkea teknologia", lasermiekka.

Se on vain "vaikea käyttää", ei "heikko". Päinvastoin, hän on naurettavan vahva.

Kuulin ihmisten puhuvan kokoonpanon oppimisesta, ja useammin kuin kerran olen nähnyt, että nykyiset kääntäjät ovat erittäin edistyneitä. Tiedän nyt, että tämä asia on puhdasta pierua. MMX:stä AVX:ään et voi kirjoittaa tällaista rinnakkaiskäsittelykykyä riippumatta siitä, miten kirjoitat koodia, eikä mikään kääntäjä voi tehdä sitä. Sinun on käytettävä kokoonpanoa käyttääksesi tätä tehokasta toimintoa.

Ja sovellukseni on pelimoottori, jossa grafiikan eräkäsittelyä tarvitaan eniten.

Kun opin kokoonpanoa aiemmin, näin vain kirjassani, että kokoonpanoa tarvitaan edelleen joissakin paikoissa, joissa suorituskyky on tärkeää. Se on niin yksinkertainen kirjailijan tunne. En todellakaan odottanut assemblykielen olevan näin voimakas.

Tämä itse asiassa hyötyy nykyisestä ajattelustani "vähemmän on enemmän". Koska ajattelin ennen pelien tekemistä, olen aina ajatellut cross-platformia, PC:tä ja matkapuhelimien tekemistä. Nyt kun teen oman moottorin, vaatimukset eivät voi olla niin korkeat, enkä halua ajatella monista alustoista, joten keskityn PC-alustan tekemiseen hyvään. Siksi keksin ajatuksen kokoonpanon oppimisesta. Jos ajattelen aina cross-platformia, minulla ei ehkä ole tätä ideaa.

Professori Jin Yinanin luennossa oli lause, joka teki minuun syvän vaikutuksen:

Jos teet kovia asioita, saat jotain.

Tästä on melkein tullut yksi elämäni uskontunnustuksistani. Tällä kertaa tämän lauseen voima vahvistetaan jälleen.

Kokoonpanon oppiminen on tuonut minulle enemmän hyötyä kuin kuvittelin. En malta odottaa, että pääsen muokkaamaan joitain aiempaa koodiani. Esimerkiksi minulla oli aiemmin Alpha-sekoituskoodi, koska DirectX:n DirectDraw ei tue Alpha-kanavaa. Joten kirjoitin oman alfa-sekoitukseni tukemaan läpikuultavia objekteja. Tämä asia on äärimmäisen hidas Alunperin se oli 800 kuvaa, mutta se voidaan vetää 200 ruutuun hetkessä. Mutta vain päähenkilön lentokone käyttää tätä algoritmia. Jos käytät kokoonpanoa, uskon, että se voi olla paljon korkeampi. Tietenkin tämä on vain yritys parantaa sitä. Itse asiassa tärkein asia riippuu laitteistosta. Pelkästään Blt:llä kuvataajuus voi olla yli 4000. Tätä ei voida saavuttaa millään muunnosmenetelmällä.

Vielä on kuitenkin alueita, joita voidaan parantaa. Esimerkiksi SpritePack-toimintoni. Tätä asiaa ei voi ohjata laitteistolla, se kaikki toteutetaan algoritmillani. Tämä tehokkuuden parannusten kokoelma voi tarjota valtavasti arvoa.

Itse asiassa halusin alun perin oppia Python + koneoppimisen uudelleen. En tiedä mitä tänä aikana tapahtuu, ja haluan tietää kaiken. Koen, että tekoäly tulee olemaan erittäin tärkeä palapelin palapelin kehitystyössäni. Käytän nyt tekoälyä kuvien ja alkuperäisten maalausten luomiseen, ja se on erittäin helppokäyttöinen. Haluaisin oppia lisää tästä tiedon osa-alueesta.

Mutta en lukenut tänä aikana, vaan opiskelin vain opetusohjelmia, joten en kestänyt istua koko ajan. Jos opiskelin kirjan kanssa, voisin makuulla lukemisen aikana, joten päätin oppia "3D Game Programming Master Skills". Tämä lievittää vyötärölleni kohdistuvaa painetta.

Tarkista tämän ajan kuluttua, voitko oppia Pythonin.

Älä viitsi!