1 poin oleh GN⁺ 2024-09-04 | 1 komentar | Bagikan ke WhatsApp
  • Visualisasi musik bergaya Pong menyelaraskan momen bola menyentuh paddle dengan beat lagu dengan menyesuaikan fisika game dan memperlakukan posisi paddle sebagai variabel optimasi
  • Bola bergerak dengan kecepatan konstan dan masing-masing paddle bisa berpindah ke mana saja di setengah bagiannya di layar, sementara titik kontak menentukan sudut pantul dan bola memantul pada dinding atas-bawah
  • Menempatkan paddle dekat tengah memungkinkan timing apa pun dicocokkan, tetapi pemakaian layar menjadi kecil dan gerakannya datar sehingga sulit menjadi visualisasi yang bagus
  • Dengan menentukan posisi horizontal paddle pada tiap waktu beat dan kecepatan horizontal bola, masalah ini diformulasikan sebagai persoalan pemrograman linear yang memaksimalkan pukulan paddle yang jauh dari tengah sambil memenuhi kendala fisika dan irama
  • Implementasinya memakai CVXPY untuk menyelesaikan kendala linear, lalu menghitung sudut pantul dan posisi vertikal dari posisi paddle dan kecepatan bola yang diperoleh, kemudian membuat animasi dengan interpolasi keyframe

Pengaturan fisika untuk mencocokkan Pong dengan beat musik

  • Tujuannya adalah menyinkronkan momen bola memantul dari paddle dalam game arkade klasik Pong dengan beat lagu, sehingga tercipta visualisasi di mana paddle bergerak mengikuti musik
  • Untuk itu, sebagian fisika game diubah
    • Bola bergerak dengan kecepatan konstan
    • Masing-masing paddle bisa bergerak ke mana saja di setengah bagiannya sendiri di layar
  • Ada juga aturan yang tetap dipertahankan dari Pong asli
    • Titik kontak saat bola menyentuh paddle menentukan sudut pantul
    • Paddle tidak memiliki batas kecepatan
    • Bola memantul pada batas atas dan bawah layar
  • Pengaturan fisika ini memberi derajat kebebasan untuk mengenai bola pada waktu yang diinginkan

Keterbatasan solusi penempatan di tengah

  • Jika dua paddle ditempatkan dekat tengah layar, kebutuhan timing apa pun bisa dipenuhi
    • Ruang horizontal memang kecil, tetapi karena bola bisa memantul pada dinding atas-bawah, ruang vertikal pada dasarnya cukup
    • Jika durasi tembakan yang diinginkan panjang, bola bisa dipukul lebih mendekati arah vertikal untuk memperlambat kecepatan horizontal
  • Cara ini menunjukkan bahwa solusi selalu ada untuk semua input, tetapi secara visual tidak menarik
  • Untuk visualisasi yang baik, pemanfaatan ruang layar itu penting
    • Jika permainan terkurung di area kecil, tampilannya terasa sesak dan lemah
    • Penonton menikmati gerakan dinamis saat paddle menahan bola yang nyaris tak terjangkau
  • Jadi intinya adalah, sambil tetap mengikuti beat dan aturan fisika, menentukan di mana paddle harus memukul bola pada setiap beat agar layar dipakai lebih luas

Mengubahnya menjadi optimasi kendala

  • Masalah ini bisa diperlakukan sebagai persoalan optimasi kendala yang memiliki fungsi tujuan, variabel, dan syarat kendala
    • Tujuannya adalah meningkatkan pemakaian layar
    • Variabelnya adalah posisi tempat bola memantul
    • Kendalanya adalah fisika game dan beat lagu
  • Dengan membentuknya sebagai optimasi kendala, posisi paddle optimal bisa dihitung dengan solver yang sudah ada alih-alih merancang algoritme secara langsung
  • Jika fisikanya diubah, cukup perbarui kendalanya, dan fungsi tujuan juga mudah diuji-coba
  • Tidak perlu memodelkan keseluruhan 2D
    • Karena kecepatan total bola konstan, jika kecepatan horizontal ditentukan maka kecepatan vertikal juga ikut ditentukan
    • Posisi vertikal bola pada waktu mana pun bisa dihitung lewat simulasi
    • Posisi vertikal paddle harus cocok dengan posisi vertikal bola agar bisa memukulnya, lalu ditambah delta kecil untuk mendapatkan sudut yang diinginkan
    • Posisi paddle di antara dua pukulan dihubungkan mulus dengan interpolasi linear

Nilai masukan dan kendala linear

  • Masukan tetapnya adalah lebar layar dan kecepatan bola
    • W: lebar layar
    • S: kecepatan bola
  • Timing beat diperoleh dari file MIDI
    • T = {t_0, t_1, ..., t_n} adalah waktu setiap beat saat bola harus menyentuh paddle
    • Ke depan, bisa juga dieksplorasi cara ekstraksi yang lebih otomatis langsung dari audio
  • Selisih antara waktu beat yang berdekatan membentuk durasi tiap tembakan
    • D = {d_0, d_1, ..., d_{n-1}}
    • d_i = t_{i+1} - t_i
  • Variabel optimasinya adalah posisi horizontal dan kecepatan horizontal
    • P = {p_0, p_1, ..., p_{n-1}} adalah jarak horizontal dari pusat layar saat paddle memukul bola
    • Indeks genap mewakili paddle kiri, indeks ganjil mewakili paddle kanan
    • V = {v_0, v_1, ..., v_{n-1}} adalah kecepatan horizontal bola setelah setiap pukulan
    • Agar lebih mudah membentuk kendala, v_i selalu didefinisikan positif tanpa memedulikan apakah bola sedang bergerak ke kiri atau ke kanan
  • Kendala fisika menentukan rentang posisi paddle dan kecepatan bola
    • 0 ≤ p_i ≤ W/2
    • 0 < v_i ≤ S
  • Kendala sinkronisasi beat memastikan bola tiba di paddle berikutnya tepat waktu
    • p_{i-1} + p_i = d_i v_i
    • Sisi kiri adalah total jarak perpindahan horizontal di antara dua pukulan paddle yang berurutan
    • Sisi kanan adalah hasil kali durasi tembakan dan kecepatan horizontal bola

Fungsi tujuan dan pembuatan animasi

  • Untuk menghindari solusi degeneratif yang terus bertahan di tengah, paddle didorong untuk menjauh dari pusat layar
  • Fungsi tujuannya memaksimalkan jumlah jarak paddle dari pusat
    • Maximize Σ p_i
  • Semua kendala bersifat linear, sehingga bisa diselesaikan dengan solver pemrograman linear (LP)
  • Implementasinya menggunakan CVXPY
    • CVXPY menyelesaikan masalah optimasi konveks, dan LP adalah salah satu subset-nya
    • Seluruh fiturnya tidak diperlukan untuk tugas ini, tetapi dukungannya untuk fungsi tujuan dan kendala yang lebih kompleks memudahkan eksperimen kreatif
  • Solver mengembalikan posisi horizontal tempat paddle harus memukul bola dan kecepatan horizontal bola
    • Dari nilai ini, sudut pantul bisa dihitung
    • Posisi vertikal dihitung lewat simulasi
  • Animasi akhir memakai posisi bola dan paddle pada saat pukulan sebagai keyframe
    • Di antara dua pukulan, posisi diinterpolasikan agar gerakannya halus
  • Kodenya dirilis sebagai open source: Github Repo

1 komentar

 
GN⁺ 2024-09-04
Komentar Hacker News
  • Mengingatkan pada sebuah proyek sekitar 20 tahun lalu ketika saya mengodekan audio yang dimainkan beberapa orang secara bersamaan untuk sebuah pameran seni
    Semakin intens permainannya, semakin terlihat bahwa bunyi bola/dinding sedang memainkan musik, dan strukturnya adalah tiga pemain sebenarnya memainkan satu lagu bersama-sama
    Tiga kabinet arcade ditempatkan saling berhadapan sehingga tiap pemain tidak bisa melihat layar pemain lain, dan kecepatan/arah bola sedikit disesuaikan agar menyentuh pemukul atau dinding pada titik yang tepat secara musikal sehingga menghasilkan bunyi yang benar
    Josh juga memasang referensinya di situsnya: https://www.autogena.org/work/ping

    • Keren. Jadi ada komposisi tetap, lalu gameplay-nya sedikit disesuaikan agar cocok dengannya?
  • Sebagai variasi ide ini, saya membayangkan melatih agen reinforcement learning pada game Atari atau Super Mario, tetapi menambahkan reward/input berbasis musik untuk menghasilkan permainan yang tampak “musikal”
    Tidak begitu tahu seberapa bagus hasilnya dilihat, atau apakah itu sepadan

    • Saya pemula di machine learning, tetapi OpenAI pernah membuat pustaka Python untuk reinforcement learning video game, dan fork-nya masih aktif dipelihara [1]
      Seingat saya beberapa tahun lalu, dalam satu atau dua hari, paling lama sekitar akhir pekan, sudah bisa dijalankan. Itu memakai emulator RetroArch dan mendukung sangat banyak emulator serta konsol
      https://github.com/Farama-Foundation/Gymnasium
      Ada juga video YouTube yang bagus dari SethBling tentang machine learning dengan Super Mario World:
      https://www.youtube.com/watch?v=qv6UVOQ0F44
      Saya sarankan mencobanya sendiri. Di tengah hype AI sekarang, video game rasanya agak diremehkan, dan saya melihat banyak potensi dalam mesin yang belajar keterampilan sambil bermain game. Kemungkinan memilih atau membuat game baru untuk mengajarkan keterampilan tertentu juga besar. Namun pada titik itu, mungkin lebih baik membuang audio dan visual lalu berkomunikasi dengan mesin lewat teks atau data murni
      Di sisi lain, saya pernah melihat video convolutional neural network yang menerima tiap piksel gambar sebagai input, jadi terpikir bahwa melatihnya dengan data suara atau piksel spektrogram juga bisa menghasilkan hasil positif. Adegan bermain game mengikuti musik, atau bermain seperti menari mengikuti melodi, harmoni, dan cerita, pasti akan menarik
      Segala sesuatu yang dibuat manusia terlebih dahulu ada dalam imajinasi manusia, dan Anda juga punya otak seperti itu. Mengejar visi di dalam pikiran lalu menariknya ke realitas fisik adalah hal yang indah, dan tampak seperti hadiah bagi seluruh umat manusia
    • Crypt of the NecroDancer mengeksplorasi ide ini dengan memberi bonus dalam game jika gerakan karakter disesuaikan dengan ritme
    • Sepertinya tidak terlalu bagus. Mario tidak punya cukup ritme untuk sangat membangkitkan kesan musikal
      Suara di versi asli terikat pada frame rate, jadi pada dasarnya hal seperti ini sedikit terjadi. Port PAL berikutnya berjalan pada frame rate yang lebih lambat dan sifat ini pun rusak
  • Mengingatkan pada visualisasi poliritme di YouTube. Contoh bagusnya lihat LucidRhythms
    https://www.youtube.com/@LucidRhythms
    Menyesuaikan lagu yang sudah ada secara terbalik ke visualisasi mungkin hampir mustahil, tetapi akan menarik jika bilah-bilah berbeda mewakili nada berbeda dan bola terpecah saat akor

    • Menaruh N paddle juga sepertinya keren. Agar tidak terlalu mudah, beri biaya saat paddle terlalu berdekatan, optimalkan nada atau ketukan mana yang ditangani tiap paddle, dan kenakan biaya juga untuk perubahan pitch yang tiba-tiba, sehingga tiap paddle bisa terspesialisasi pada rentang nada tertentu
  • Benar-benar keren. Saya terpukau melihat paddle bergerak seiring beat berjalan
    Ada hal-hal yang terasa pas hanya dengan dilihat, sehingga terasa indah, dan proyek ini salah satunya

  • Karya pendahulu: Eisenfunk - Pong (https://www.youtube.com/watch?v=cNAdtkSjSps)

    • Namun tetap cukup berbeda. Pada contoh itu, bunyi bip muncul dengan kecepatan tetap, jadi videonya disinkronkan manual ke BPM lagu
      Pada dasarnya itu lebih mirip visualisasi buatan tangan untuk setiap kick drum kedua
      Sementara karya yang diajukan ini not-notnya tidak berada pada tempo not seperempat sederhana, dan “dianimasikan” otomatis berdasarkan constraint optimization. Karena itu visualisasinya juga jauh lebih menarik
  • Sangat bagus. Hanya saja, karena tidak bisa mengirim hati kalau tidak berlangganan, rasanya agak kurang cocok bagi saya

  • Secara teknis oke, tetapi beberapa kali paddle dan bola bergerak hampir pada kecepatan yang sama sehingga terlihat seperti paddle terus mendorong bola
    Karena alasan ini, sebaiknya p[i] = 0 tidak diizinkan. Kalau d[i] yang besar langsung diikuti d[i+1] yang sangat kecil, itu mungkin tak terhindarkan, tetapi sepertinya bisa dibuat agar dihindari bila memungkinkan

    • Bisa memberi penalti pada fungsi objektif yang sebanding dengan d'[i]
  • Membuat saya membayangkan menaruh installation di ruang saya, memakai MT-80S bersama display
    Apakah saya bisa benar-benar memahami timing ini? Saya tidak terlalu pintar di bidang ini, tetapi tertarik
    https://www.matrixsynth.com/2014/07/roland-mt-80s-midi-playe...

  • Benar-benar menarik, tetapi anehnya otak saya sangat membenci ini
    Rasanya seperti mengusik semacam model kausalitas dalam diri saya, dan terasa sulit ditonton. Aneh

    • Hal yang paling jelas hilang bagi saya adalah dinamika. Terutama pada passage cepat ketika ada “ghost note” di antara nada-nada yang jauh lebih keras, rasanya seperti ada sesuatu yang hilang
      Meski begitu, anehnya tetap memuaskan untuk dilihat. Saya juga penasaran apakah pengalaman memainkan beberapa instrumen ada hubungannya dengan perasaan ini. Bagi saya, instrumen seperti xilofon atau steelpan terasa cukup mirip dengan ini
    • Bola tampak memantul dari tengah paddle, bukan dari tepinya, jadi terus terlihat janggal. Mungkin saya melihat masalah yang sama
  • Atari punya perangkat visualisasi musik video pada akhir 1970-an. Itu dirancang oleh salah satu pengembang game Pong, dan merupakan yang pertama atau salah satu produk konsumen pertama dari jenis ini
    https://en.wikipedia.org/wiki/Atari_Video_Music
    Jika pernah menonton film Over the Edge, Claude dan Johnny punya satu di rumah