Skip to content

Instantly share code, notes, and snippets.

@davidrios
Last active April 16, 2023 00:16
Show Gist options
  • Save davidrios/1246e9c0289b56833a087ceca65306b1 to your computer and use it in GitHub Desktop.
Save davidrios/1246e9c0289b56833a087ceca65306b1 to your computer and use it in GitHub Desktop.
3
00:00:34,000 --> 00:00:37,000
E aí, pessoal, bem-vindos de volta.
4
00:00:37,000 --> 00:00:42,390
O que você acabou de assistir foi uma simulação em tempo real de um motor de combustão interna
5
00:00:42,390 --> 00:00:44,000
que venho trabalhando nos últimos meses.
6
00:00:44,000 --> 00:00:49,000
Sempre fiquei bastante desapontado com a qualidade dos sons de motores de carros em jogos,
7
00:00:49,000 --> 00:00:55,000
e quando jogava no PlayStation 2 anos atrás, sem saber absolutamente nada sobre programação,
9
00:00:55,000 --> 00:01:01,000
muitas vezes me perguntava por que não era possível simular realisticamente o motor inteiro.
10
00:01:01,000 --> 00:01:06,000
Bom, decidi que era finalmente hora de responder a essa pergunta por conta própria.
11
00:01:06,000 --> 00:01:11,000
Aqui está um exemplo de um desses sons ruins de motor de carro.
13
00:01:21,000 --> 00:01:26,000
Eu sei que a maioria deles é otimizada para desempenho, então não espero que sejam perfeitos,
15
00:01:26,000 --> 00:01:29,000
mas ainda acho que podem ser melhorados.
16
00:01:29,000 --> 00:01:32,000
Mas o que exatamente os torna ruim em primeiro lugar?
17
00:01:32,000 --> 00:01:36,000
Bem, em primeiro lugar, motores têm sons diferentes em condições diferentes.
18
00:01:36,000 --> 00:01:40,180
Então, por exemplo, um motor vai soar diferente quando estiver ocioso em comparação com quando
19
00:01:40,180 --> 00:01:43,000
estiver sob carga pesada ou quando estiver desacelerando,
20
00:01:43,000 --> 00:01:47,000
e sinto que isso muitas vezes é ignorado em muitos desses jogos.
21
00:01:47,000 --> 00:01:52,340
Motores também possuem características de resposta não-linear, e o que quero dizer com isso é que
22
00:01:52,340 --> 00:01:56,000
o pedal do acelerador não dita a velocidade do motor,
23
00:01:56,000 --> 00:01:59,000
como pode ser o caso de motores elétricos.
24
00:01:59,000 --> 00:02:04,000
Ele simplesmente abre algumas placas do acelerador e permite que o motor escolha livremente sua própria velocidade,
26
00:02:04,000 --> 00:02:08,000
e isso é obviamente regulado pela quantidade de ar que entra no motor.
27
00:02:08,000 --> 00:02:10,000
Na vida real, isso se parece com isso:
29
00:02:17,000 --> 00:02:20,000
Observe como o motor pode levar algum tempo para reagir a essa entrada,
30
00:02:20,000 --> 00:02:26,000
e há muitos fatores complexos que dão a cada motor um caráter único.
31
00:02:26,000 --> 00:02:31,000
Meu objetivo com este projeto foi replicar toda essa complexidade em forma digital
32
00:02:31,000 --> 00:02:36,000
e criar um motor virtual com o qual posso interagir em tempo real.
33
00:02:36,000 --> 00:02:38,000
Então deixe-me explicar como isso funciona.
34
00:02:38,000 --> 00:02:42,500
A primeira coisa é um simulador de corpo rígido que simula todas as interações entre
35
00:02:42,500 --> 00:02:44,000
os componentes internos,
36
00:02:44,000 --> 00:02:47,000
como o virabrequim, as bielas e os pistões.
37
00:02:47,000 --> 00:02:50,000
Geralmente, isso é chamado de conjunto rotativo.
38
00:02:50,000 --> 00:02:55,000
Eu escrevi este motor de física alguns meses atrás, e fiz um vídeo sobre isso, se você estiver interessado.
40
00:02:55,000 --> 00:02:59,000
Agora, quero enfatizar que isso não é algum tipo de visualização.
41
00:02:59,000 --> 00:03:03,000
Isso é totalmente legítimo. É uma simulação de corpo rígido,
42
00:03:03,000 --> 00:03:07,770
e apenas para provar, posso remover algumas das ligações e, de repente, temos
43
00:03:07,770 --> 00:03:09,000
seja lá o que for isso.
44
00:03:09,000 --> 00:03:14,000
Então, em outras palavras, todas as forças entre as ligações, incluindo coisas como inércia
45
00:03:14,000 --> 00:03:18,000
e até mesmo o atrito deslizante entre as paredes do cilindro e os pistões,
46
00:03:18,000 --> 00:03:21,000
são levados em consideração nesta simulação.
47
00:03:21,000 --> 00:03:25,000
Também implementei uma simulação de fluidos fisicamente realista
48
00:03:25,000 --> 00:03:29,000
para lidar com o fluxo de ar entre os cilindros e as outras partes do motor.
49
00:03:29,000 --> 00:03:36,000
Tentei tomar o menor número de atalhos possível, então não há realmente nenhum truque ou artifício aqui.
51
00:03:36,000 --> 00:03:41,380
As moléculas de ar e a velocidade em massa desse ar são simuladas de maneira realista à medida que
52
00:03:41,380 --> 00:03:43,000
viajam pelo motor,
53
00:03:43,000 --> 00:03:48,000
e uma quantidade fisicamente precisa de energia é liberada quando o combustível é queimado.
54
00:03:48,000 --> 00:03:53,000
Até mesmo a velocidade de propagação da chama no cilindro é simulada com muita precisão.
55
00:03:53,000 --> 00:03:59,000
Toda essa simulação, aliás, tem que rodar em torno de 80.000 quadros por segundo para se manter estável,
57
00:03:59,000 --> 00:04:02,000
então teve que ser fortemente otimizada.
58
00:04:02,000 --> 00:04:04,000
E vou mostrar o que acontece se rodar mais devagar.
59
00:04:04,000 --> 00:04:08,000
Basicamente, seu motor simplesmente explodirá imediatamente na quarta dimensão.
60
00:04:17,000 --> 00:04:22,000
A onda de pressão criada no sistema de escape é enviada diretamente para uma thread separada
62
00:04:22,000 --> 00:04:25,000
que então a converte em um sinal de áudio.
63
00:04:25,000 --> 00:04:30,000
O sinal de áudio final consiste em um pouco de ruído branco simples, um pouco de equalização,
64
00:04:30,000 --> 00:04:36,000
e um filtro que aproxima o padrão de propagação do som dentro do sistema de escape.
65
00:04:36,000 --> 00:04:40,080
Aqui está uma demonstração começando com a onda de pressão base, que soa um pouco
66
00:04:40,080 --> 00:04:42,000
sem graça,
67
00:04:42,000 --> 00:04:46,000
e uma vez que todo o processamento adicional está lá, você pode ver que soa um pouco
68
00:04:46,000 --> 00:04:47,000
mais familiar.
79
00:05:29,000 --> 00:05:42,000
A simulação é tão precisa que pode prever curvas de potência com base
80
00:05:42,000 --> 00:05:46,000
em um conjunto de especificações do motor, geralmente dentro de 10%.
81
00:05:46,000 --> 00:05:49,000
E vou mostrar como isso funciona em um minuto.
82
00:05:49,000 --> 00:05:53,000
Essas especificações do motor são definidas em um script Piranha, onde você pode conectar
83
00:05:53,000 --> 00:05:57,000
vários componentes individuais para formar um motor completo.
84
00:05:57,000 --> 00:06:02,000
Piranha é minha própria linguagem de script personalizada que eu criei e uso em alguns
85
00:06:02,000 --> 00:06:03,000
dos meus outros projetos.
86
00:06:03,000 --> 00:06:06,000
Você pode aprender sobre ela em outros vídeos no meu canal.
87
00:06:06,000 --> 00:06:09,000
Certo, então vamos ver uma demonstração básica.
88
00:06:09,000 --> 00:06:14,000
Podemos começar com um motor padrão que você pode encontrar em um caminhão dos anos 70.
89
00:06:14,000 --> 00:06:22,000
Especificamente, este é um 454, que significa 454 polegadas cúbicas, ou 7,4 litros.
90
00:06:22,000 --> 00:06:26,000
Eu já montei um desses de verdade, então eu sei bastante sobre eles.
91
00:06:26,000 --> 00:06:31,000
Todos os parâmetros que coloco na simulação são baseados em dados do mundo real.
92
00:06:31,000 --> 00:06:38,000
Certo, primeiro vamos pressionar A para ligar a ignição e depois pressionar S para engatar o motor de arranque,
94
00:06:38,000 --> 00:06:40,000
assim como em um motor real.
96
00:06:43,000 --> 00:06:47,000
Pressionando várias teclas no teclado, posso abrir ou fechar o acelerador,
97
00:06:47,000 --> 00:06:50,000
o que é claro, faz o motor mudar de velocidade.
98
00:06:50,000 --> 00:06:53,000
Pressionando a tecla D, posso habilitar o dinamômetro,
99
00:06:53,000 --> 00:06:57,000
para que possamos medir o torque e a potência desse motor.
101
00:07:16,000 --> 00:07:20,000
Se procurarmos os números originais fornecidos pela GM em 1974,
102
00:07:20,000 --> 00:07:25,000
podemos ver que eles estão muito próximos dos valores previstos na simulação.
103
00:07:25,000 --> 00:07:30,000
Até as curvas são aproximadamente da mesma forma, com ambos o pico de torque e pico de potência
104
00:07:30,000 --> 00:07:34,000
acontecendo em uma velocidade do motor aproximadamente igual.
105
00:07:34,000 --> 00:07:39,000
Agora, apenas mudando as peças no motor, você pode realmente mudar a forma como ele soa.
107
00:07:39,000 --> 00:07:44,000
Então, se eu colocar algumas peças de alto desempenho em um comando de válvulas com um perfil de lóbulo ligeiramente
109
00:07:44,000 --> 00:07:50,000
diferente, você pode ver que o motor produz mais potência, mas também soa perceptivelmente diferente.
111
00:07:50,000 --> 00:07:53,000
Eu não mudei nenhuma das configurações de síntese de áudio.
112
00:07:53,000 --> 00:07:57,000
Isso é baseado apenas nos componentes internos do motor.
114
00:08:07,000 --> 00:08:10,000
Para ter uma melhor sensação da potência do motor,
115
00:08:10,000 --> 00:08:16,000
também implementei esta simulação de veículo com simulação de embreagem, transmissão e trem de força.
117
00:08:16,000 --> 00:08:21,000
Ela também aproxima a resistência ao rolamento do veículo, bem como a resistência do ar.
119
00:08:38,000 --> 00:08:42,000
Na minha opinião, a maior melhoria em relação a muitos dos modelos que já vi
120
00:08:42,000 --> 00:08:45,000
é o som da frenagem do motor, que é realmente muito bom.
121
00:08:45,000 --> 00:08:50,000
Então, a frenagem do motor, ou o excesso de rotação, é quando você faz o motor funcionar mais rápido do que deveria
122
00:08:50,000 --> 00:08:52,000
dada a posição do acelerador,
123
00:08:52,000 --> 00:08:58,000
o que produz um efeito de frenagem e você pode pensar nisso como uma potência negativa.
125
00:08:58,000 --> 00:09:01,000
E isso também muda perceptivelmente o tom do motor.
127
00:09:27,000 --> 00:09:33,000
Até agora neste vídeo, eu só mostrei motores V8, mas isso não é a única coisa que este simulador pode fazer.
129
00:09:33,000 --> 00:09:39,000
Na verdade, é completamente genérico, então você pode simular um V6, um quatro cilindros em linha,
130
00:09:39,000 --> 00:09:45,000
você até pode simular configurações de motor não padrão, como um V3,
131
00:09:45,000 --> 00:09:49,000
ou você poderia ter seis cilindros de um lado e quatro do outro.
132
00:09:49,000 --> 00:09:53,000
Realmente não importa. Ele pode lidar com praticamente qualquer coisa.
133
00:09:53,000 --> 00:09:58,000
Então se você tiver alguma ideia de motores específicos que quer que eu teste, por favor descreva-os nos comentários,
135
00:09:58,000 --> 00:10:02,000
e definitivamente farei um vídeo de acompanhamento deste.
136
00:10:02,000 --> 00:10:09,000
Apenas para provar que realmente funciona, entrei com os parâmetros deste motor V-twin Kohler,
138
00:10:09,000 --> 00:10:14,000
e você normalmente encontra eles em serrarias ou trituradores de madeira e outros equipamentos industriais.
140
00:10:14,000 --> 00:10:19,410
Tenho muita familiaridade com este motor em particular na vida real, e posso confirmar que a simulação produz
142
00:10:20,000 --> 00:10:25,940
uma replicação muito precisa do som, e os números de cavalos de potência são praticamente
143
00:10:25,940 --> 00:10:28,000
exatamente iguais aos da vida real.
152
00:11:08,000 --> 00:11:12,790
Agora, por mais que eu quisesse discutir todos os detalhes técnicos deste projeto,
153
00:11:12,790 --> 00:11:16,000
tem simplesmente muita coisa para cobrir em um único vídeo.
154
00:11:16,000 --> 00:11:22,000
Li literalmente livros inteiros ao pesquisar este assunto, e também li muitos artigos de pesquisa.
156
00:11:22,000 --> 00:11:27,690
Sinceramente, não tenho ideia se alguém se interessaria por esses detalhes, então por favor
157
00:11:27,690 --> 00:11:29,000
me avise se for o seu caso.
158
00:11:29,000 --> 00:11:34,420
Além disso, até o momento em que este vídeo foi lançado, o código está aberto no meu GitHub, então confira
159
00:11:34,420 --> 00:11:36,000
se você estiver interessado.
160
00:11:36,000 --> 00:11:39,000
O link está na descrição.
161
00:11:39,000 --> 00:11:42,000
Espero que tenham gostado do vídeo, e obrigado por assistir.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment