Compartilhamento de tecnologia

[The Road to Game Engine] Ascendendo aos Deuses (7) - x86 Assembly Learning: Se você fizer coisas difíceis, você ganhará algo.

2024-07-12

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

20 de maio a 4 de junho: Supere o mecanismo de física 2D.
4 a 13 de junho: Superação dos "Fundamentos da Matemática 3D".
13 a 20 de junho: Superação do "Tutorial de gráficos 3D".
21 a 22 de junho: Supere o "Tutorial do jogo Raycasting".
23 de junho a 1º de julho: Supere as "habilidades mestres em programação de jogos do Windows".
2 a 6 de julho: Superação do "Desenvolvimento de jogos de compilação Atari 2600".
7 a 11 de julho: Superação da "linguagem Assembly x86/x64".

Próximo objetivo: "Habilidades mestres em programação de jogos 3D"

Desta vez é outra batalha num planeta “alienígena”. Ontem andei de bicicleta por 60 quilômetros. Não foram 60 quilômetros comuns. Os últimos 20 quilômetros foram todos em estradas de montanha. Meu estado mental não está muito bom hoje, posso dizer que apenas cerrei os dentes e terminei o tutorial.

No entanto, descobri que também gosto dessa sensação. Não tão desconhecido quanto a compilação do Atari 2600.

Aprender montagem é realmente como aquele tipo de jogo top, onde você realmente não pode cometer erros. Fiz mais anotações do que conseguia lembrar em um semestre. Embora sejam apenas algumas frases, escrevi notas densamente. Teria sido bom se eu pudesse ter trabalhado tanto quando estava na faculdade.

Aprendi dois tutoriais desta vez, um é X86-32 bits. Um é x86-64 bits. Ambos têm seus próprios pontos fortes e fracos. Por exemplo, o primeiro tutorial não ensinou como chamar funções até o final. Os princípios básicos de 64 bits são bem explicados, mas os aplicativos avançados não são abordados.

Depois de estudar este curso, percebi que costumava pensar que assembly é uma coisa relativamente de "baixo nível" e relativamente "atrasada". Afinal, as linguagens de hoje são rotuladas como de "alto nível". línguas".

Isso me dá a impressão de que se a linguagem de programação que uso são armas e canhões, então a linguagem assembly é uma arma fria. Não importa como você pensa sobre isso, isso lhe dá uma impressão bastante “atrasada”. Tive a mesma impressão quando estava aprendendo a montar o Atari 2600.

Porém, depois que aprendi o assembly x86, essa impressão mudou completamente. A montagem é simplesmente uma arma de “próxima geração”. Não é uma arma fria, mas uma “alta tecnologia”, uma espada laser.

É apenas "difícil de usar", não "fraco". Pelo contrário, ele é ridiculamente forte.

Eu costumava ouvir pessoas falando sobre aprender assembly e mais de uma vez vi que os compiladores de hoje são muito avançados. Mesmo se você aprender assembly, o código que você escreve não será tão eficiente quanto antes. Agora eu sei que essa coisa é puro peido. Do MMX ao AVX, você não pode escrever esse tipo de capacidade de processamento paralelo, não importa como você escreve o código, e nenhum compilador pode fazer isso. Você deve usar assembly para usar essa função poderosa.

E meu aplicativo é um mecanismo de jogo, onde o processamento em lote de gráficos é mais necessário.

Quando aprendi montagem antes, acabei de ver em meu livro que a montagem ainda é necessária em alguns lugares onde o desempenho é importante. É um sentimento tão simples do autor. Na verdade, eu não esperava que a linguagem assembly fosse tão poderosa.

Na verdade, isso se beneficia do meu pensamento atual de “menos é mais”. Porque eu pensava em fazer jogos, sempre pensei em multiplataforma, em fazer PC e em fazer celulares. Agora que faço meu próprio motor, os requisitos não podem ser tão altos e não quero pensar. sobre plataforma cruzada, então me concentro em tornar a plataforma de PC boa. Foi por isso que tive a ideia de aprender montagem. Se penso sempre em multiplataforma, posso não ter essa ideia.

Houve uma frase numa palestra proferida pelo professor Jin Yinan que me impressionou profundamente:

Se você fizer coisas difíceis, ganhará alguma coisa.

Isso quase se tornou um dos credos da minha vida. Desta vez, o poder desta frase é confirmado novamente.

Aprender montagem me trouxe mais benefícios do que eu imaginava. Mal posso esperar para modificar alguns dos meus códigos anteriores. Por exemplo, eu costumava ter um código de combinação Alpha, porque o DirectDraw do DirectX não oferece suporte ao canal Alpha. Então escrevi minha própria mistura alfa para suportar objetos translúcidos. Essa coisa é extremamente lenta. Originalmente tinha 800 quadros, mas poderia ser reduzido para 200 quadros em um instante. Mas apenas a aeronave do protagonista utiliza esse algoritmo. Se você usar assembly, acredito que pode ser bem maior. Claro, esta é apenas uma tentativa de melhorá-lo. Na verdade, o principal depende do hardware. Com apenas Blt, minha taxa de quadros pode chegar a mais de 4.000. Isto não pode ser alcançado por nenhum método de conversão.

No entanto, ainda existem áreas que podem ser melhoradas. Por exemplo, minha funcionalidade SpritePack. Essa coisa não pode ser controlada por hardware, tudo é realizado pelo meu algoritmo. Esta compilação de melhorias de eficiência pode agregar um valor tremendo.

Na verdade, originalmente eu queria aprender Python + aprendizado de máquina novamente. Não sei o que está acontecendo nesse período e quero saber tudo. Sinto que a IA será uma peça muito importante do quebra-cabeça no desenvolvimento do meu jogo. Agora uso IA para criar imagens e pinturas originais, e é muito fácil de usar. Gostaria de aprender mais sobre esse aspecto do conhecimento.

Mas eu não li nesse período, apenas estudei os tutoriais, então não aguentava ficar sentado o tempo todo. Se eu estivesse aprendendo com um livro, poderia deitar-me enquanto lia, então optei por aprender "Habilidades mestres em programação de jogos 3D". Isso alivia a pressão na minha cintura.

Após esse período de tempo, veja se você consegue aprender Python.

vamos!