Blender VSE yang Terpakai Secara Tak Sengaja
(aras-p.info)- Aras bahkan tidak tahu bahwa Blender memiliki Video Sequence Editor (VSE), tetapi setelah mengunjungi Blender HQ ia berkontribusi paruh waktu selama sekitar dua bulan untuk peningkatan performa dan kualitas di Blender 4.1
- Perubahan yang paling mencolok adalah responsivitas timeline: pada proyek Sprite Fright dengan sekitar 3.000 strip terlihat, UI untuk scrolling dan panning meningkat dari sekitar 15fps menjadi lebih dari 60fps
- Multithreading, SIMD, dan penyederhanaan matematika diterapkan pada konversi RGB↔YUV berbasis ffmpeg, resampling audio Audaspace, konversi dan filtering gambar, serta pemrosesan efek VSE
- Pada tiga dataset Blender Studio, waktu render akhir film VSE di PC penulis menjadi sekitar 2x lebih cepat; rendering Sprite Fright turun dari hampir 13 menit menjadi 7 menit
- Total 37 pull request telah ditinjau dan di-merge; perubahan saat ini masuk ke Blender 4.1, dan pekerjaan VSE berikutnya akan berlanjut mulai Blender 4.2
Bagaimana akhirnya berkontribusi ke Blender VSE
- Aras pergi ke Amsterdam untuk menghadiri Unite 2023 dari Unity, lalu mengunjungi Blender HQ pada waktu luangnya
- Di sana, Francesco dan Sergey menanyakan apakah ia berminat berkontribusi ke VSE, dan setelah itu ia mulai menyentuh Video Sequence Editor di Blender
- Meski tidak terlalu memahami penyuntingan video, timeline, sequencer, color grading, ffmpeg, maupun audio mixing, ia memulai dari optimisasi performa, area yang relatif minim perdebatan
- Setelah sekitar dua bulan kerja paruh waktu, terkumpul serangkaian perbaikan yang akan masuk ke Blender 4.1
- Blender 4.1 sudah masuk beta dan bisa diperoleh dari daily builds reguler
Menggambar timeline dan responsivitas UI
- Timeline VSE adalah area di bagian bawah layar, dan jika seluruh proyek Sprite Fright edit di-zoom out, sekitar 3.000 strip terlihat sekaligus
- Sebelumnya, sekadar scrolling dan panning di timeline ini membuat pembaruan UI tertahan di kisaran 15fps
- Setelah perubahan, ia berjalan pada lebih dari 60fps
- PR terkait: #115311
- Bottleneck-nya adalah struktur yang mengirim draw call API grafis per dua segitiga; di profiler Superluminal, sebagian besar waktu dihabiskan di dalam fungsi “mulai menggambar satu quad” dan “selesai menggambar satu quad”
- Dalam proses ini, perilaku aneh pada tampilan waveform audio juga diperbaiki dan UI dirapikan; tampilan waveform kini aktif secara default
- Isu terkait: #115274
Peningkatan kualitas dan kecepatan tampilan scope
- VSE menyediakan opsi tampilan scope umum seperti histogram gambar, waveform, dan vectorscope
- Histogram sebelumnya digambar sebagai gambar berpiksel dengan saturasi sangat kuat, tetapi kini ditampilkan dengan polygon yang lebih halus, grid, dan saturasi lebih rendah
- PR terkait: #116798
- Opsi parade pada Waveform memiliki masalah terlalu cepat jenuh, dan setelah multithreading diterapkan menjadi 15x lebih cepat
- PR terkait: #115579
- Heksagon warna luar pada Vectorscope sangat berpiksel, sehingga diperbarui dengan menyalin design baru dari vectorscope image editor
- PR terkait: #117738
- Opsi zebra stripes untuk “menampilkan area overexposed” juga menjadi 2–3x lebih cepat
- PR terkait: #115622
- Ia juga menambahkan pandangan bahwa semua scope dan scope di image editor semestinya suatu saat diproses dengan GPU compute shader
Optimisasi konversi RGB↔YUV ffmpeg
- Blender terutama menggunakan library ffmpeg untuk membaca dan menulis audio serta video
- Di dalam Blender, yang digunakan bukan tool command-line ffmpeg, melainkan library kode seperti libavcodec;
libswscalebertanggung jawab atas konversi RGB↔YUV frame film libswscalemendukung konversi multithread, tetapi jika hanya memakaisws_getContext()dansws_scale(), ia berjalan sepenuhnya single-thread- Untuk memakai multithreading, parameter
"threads"harus disetel saat inisialisasi, sehingga perlu menggunakansws_alloc_context(),av_opt_set_int(), dansws_init_context()secara langsung - Selain itu, karena
sws_scale()tidak melakukan multithreading secara internal, ia harus memakaisws_scale_frame(), dan proses ini juga mengungkap masalah pada cara pembuatanAVFrame - Hasilnya, konversi RGB→YUV saat menulis file film menjadi jauh lebih cepat
- PR terkait: #116008
- Saat membaca file film, konversi YUV→RGB multithread juga digunakan, dan vertical flip digabung ke pekerjaan yang sama
- PR terkait: #116309
Resampling audio
- Saat merender video di VSE, ditemukan bahwa hampir separuh waktu untuk “menghasilkan frame video atau audio” dihabiskan di dalam library audio Audaspace yang digunakan Blender
- Bottleneck-nya bukan encoding audio, melainkan mixing sebelum encoding; sebagian besar terjadi ketika strip audio seperti 44,1kHz dicampurkan ke film 48kHz
- Audaspace memiliki dua mode resampling
- Pemutaran internal Blender: Linear resampler yang melakukan interpolasi linear antar sampel
- Rendering film: resampler berbasis algoritma Julius O Smith
- Kualitas resampler dibandingkan dengan meresampling suara sintetis yang frekuensi tunggalnya meningkat, lalu melihat spectrogram
- Targetnya adalah hasil dengan frekuensi tambahan sesedikit mungkin, seperti pengaturan “best” di Audacity
- Resampling preview Audaspace cepat dihitung tetapi menghasilkan banyak frekuensi tambahan, sedangkan resampling rendering memiliki kualitas spectrogram yang baik
- Kualitas resampling medium baru ditambahkan ke Audaspace, dan menurut penulis hasilnya hampir sama tetapi komputasinya sekitar 3x lebih cepat
- Blender kini menggunakan pengaturan medium ini saat rendering
- Di PC Windows Ryzen 5950X, rendering 2.000 frame Sprite Fright turun dari 92 detik menjadi 73 detik
- PR terkait: #116059
Konversi dan filtering gambar
- Di VSE, strip yang menghasilkan output visual seperti gambar, film, teks, dan scene dapat diberi posisi, rotasi, scale, dan crop
- Transformasi seperti ini dilakukan dengan cara mentransformasi gambar yang dihasilkan strip menjadi gambar baru, dan sebelumnya pun sudah diproses secara multithread di CPU
- Alasan pemrosesan dilakukan di CPU, bukan GPU, adalah karena implementasi GPU belum ada, dan CPU fallback saat ini masih dibutuhkan untuk use case rendering di render farm tanpa GPU
-
Perbaikan error half-pixel
- Kode lama memiliki beberapa error off by half a pixel; dalam banyak kasus error itu saling meniadakan atau tidak terlihat, tetapi muncul dalam situasi tertentu
- Saat gambar kecil diperbesar 16x, filter Bilinear menggeser gambar sebesar setengah piksel asli, dan warna latar magenta ikut menyusup
- Sebaliknya, saat gambar diperkecil tepat 2x, filter Bilinear sama sekali tidak melakukan filtering
- Error “off by something” pada Bilinear dan filter lainnya diperbaiki
- PR terkait: #116628
-
Penanganan tepi transparan Bilinear
- Sebelum Blender 4.0, VSE memiliki tiga opsi filter:
Nearest,Bilinear, danSubsampled3x3; dari ketiganya, hanya Bilinear yang menambahkan transparansi selebar setengah texel sumber di sekitar gambar hasil - Perilaku ini terlihat jelas saat media diperbesar, dan tidak ada yang ingat mengapa perbedaan seperti ini muncul
- Perilaku “blending ke transparansi” di kode filter Bilinear VSE dihapus
- Namun saat hanya rotasi yang diterapkan, penanganan transparansi lama memberi semacam antialiasing pada edge, sehingga sebagai gantinya transparency anti-aliasing diterapkan pada edge pixel gambar tujuan
- PR terkait: #117717
- Sebelum Blender 4.0, VSE memiliki tiga opsi filter:
-
Filter Cubic, Box, Auto
- Transform strip VSE biasa tidak memiliki opsi filter cubic, dan opsi itu hanya ada pada strip Transform Effect khusus
- Di Blender, “Bicubic” sebenarnya berarti filter Cubic B-Spline, setara dengan koefisien B=1, C=0 dari Mitchell-Netravali filter
- Penulis merangkumnya sebagai pilihan yang “tidak ringing, tetapi blur-nya besar”
- Dua jenis opsi cubic filtering masuk ke VSE
- PR terkait: #117100, #117517
- Filter “Subsampled 3x3” di Blender 3.5 sebenarnya adalah box filter yang di-hardcode berukuran 3x3, dan mulai rusak ketika diperkecil dengan rasio selain 3x3
- Filter ini diubah menjadi Box filter yang disesuaikan, bukan 3x3 tetap
- PR terkait: #117584
- Karena semakin banyak filter yang harus dipilih pengguna, Auto filter option ditambahkan sebagai default untuk strip VSE
- PR terkait: #117853
- Jika tidak ada scale atau rotasi:
Nearest - Jika diperbesar lebih dari 2x:
Cubic Mitchell - Jika diperkecil lebih dari 2x:
Box - Selain itu:
Bilinear
-
Peningkatan performa filtering
- Proses filtering gambar juga menjadi lebih cepat
- Menghapus virtual function dari loop internal, menerapkan sebagian SIMD pada Bilinear filtering: #115653
- Menyederhanakan Cubic filtering dan menambahkan SIMD: #117100
- Menyederhanakan matematika pada Box filter: #117125
- Memperbaiki masalah ketika optimisasi untuk melewati item di bawah solid image yang menutupi seluruh layar tidak berjalan saat ada scale: #117786
- Di PC penulis, pada proyek 3840x2160 dengan satu gambar 1920x1080 diperbesar 2x dan memakai Bilinear filtering, seluruh drawing sequencer preview turun dari 36,8ms menjadi 15,9ms
- Halaman interaktif untuk membandingkan filter upsample juga tersedia: aras-p.info/img/misc/upsample_filter_comp_2024
Optimisasi efek VSE
- Dataset film nyata dari Blender Studio tidak banyak memakai effect, tetapi effect VSE juga dioptimalkan terutama pada bagian yang terlihat di kode
- Sebagian besar perubahan adalah penerapan multithreading
- Glow effect: diterapkan multithreading, menjadi 6–10x lebih cepat #115818
- Wipe effect: diterapkan multithreading, perhitungan fungsi trigonometri berlebihan pada Clock wipe disederhanakan, menjadi 6–20x lebih cepat #115837
- Gamma Cross effect: mengubah pendekatan yang memakai table dan interpolation rumit demi menghindari satu pemanggilan akar kuadrat, sehingga menjadi 4x lebih cepat #115801
- Gaussian Blur effect: menghindari perhitungan duplikat, menjadi 1,5x lebih cepat #116089
Perubahan waktu render akhir
- Berdasarkan tiga dataset yang diterima dari Blender Studio, waktu render akhir film VSE di PC penulis menjadi sekitar 2x lebih cepat
- Rendering Sprite Fright edit turun dari hampir 13 menit menjadi 7 menit
- Penulis berharap ada peningkatan kecepatan tambahan, dan mengungkapkannya dengan kira-kira “tiga kali lagi peningkatan 2x akan cukup bagus”
Cara kerja dan langkah berikutnya
- Selain perubahan yang terlihat oleh pengguna, ada juga pull request untuk menambah test, refactoring, dan pekerjaan bersih-bersih; total 37 pull request selesai, ditinjau, dan di-merge
- Penulis menilai pekerjaan sebesar ini mungkin sulit dilakukan di “pekerjaan sungguhan”
- Ia mengatakan bahwa di Unity antara 2015–2022, dalam waktu yang sama mungkin hanya sekitar 30% dari pekerjaan di atas yang bisa dilakukan, mungkin bahkan lebih sedikit
- Ia menambahkan bahwa di Unity “ancient” sekitar 2010, hal itu mungkin saja bisa dilakukan
- Menurutnya, ketika faktor seperti skala perusahaan, proses, ekspektasi, komunikasi, dan politik saling terkait, pekerjaan yang sama di lingkungan perusahaan berbayar justru bisa menjadi lebih lambat atau dibatalkan di tengah jalan
- Ia berharap Blender tidak bergerak menuju skala, kompleksitas, dan workflow yang prosesnya justru melemahkan semangat dan memperlambat orang, alih-alih membantu mereka
- Karena Blender 4.1 sudah beta, dari sisi fitur statusnya selesai, dan perubahan terkait VSE untuk 4.1 saat ini masuk dalam release notes
- Pekerjaan Blender 4.2 dimulai, dan ia berencana terus mengutak-atik VSE tanpa rencana yang jelas setelah ini
- Perkembangannya bisa dilihat di bagian forum Weekly Updates
1 komentar
Komentar Hacker News
Kalau ini adalah “pekerjaan sungguhan”, rasanya saya tidak akan bisa melakukan hal seperti ini
Salah satu hal yang terasa tidak berjalan baik dalam karier saya adalah adanya jurang seperti ini: pada proyek tanpa bayaran yang mengharuskan saya memecahkan matematika yang benar-benar unik sendiri, dalam dua bulan saya bisa menghasilkan lebih banyak daripada biasanya selama dua tahun, tetapi pada proyek berbayar hasil saya umumnya biasa-biasa saja
Saya benar-benar sudah berusaha keras, tetapi tidak pernah berhasil menemukan titik tengahnya, dan tahun lalu ketika pekerjaan gratis yang saya lakukan mulai punya kemungkinan dibayar, saya akhirnya malah sama sekali tidak bisa menyentuhnya
Lalu saya menemukan teori alienasi Marx, dan semuanya mulai jauh lebih masuk akal. Ia berangkat dari pengamatan bahwa kerja adalah aktivitas yang pada dasarnya dilakukan oleh orang sehat, tetapi menurutnya itu tidak boleh disamakan dengan bekerja untuk orang lain dan terasing dari hasil kerja sendiri
https://en.m.wikipedia.org/wiki/Marx's_theory_of_alienation
Ada tempat yang punya sistem bagus berupa ruang penyangga 1–2 minggu untuk melakukan apa pun, dan itu membantu meredakan masalah seperti ini
Dalam proyek passion, karena tidak dibayar, ekspektasinya rendah, tidak ada kewajiban untuk harus melakukan sesuatu, dan pada dasarnya Anda bebas melakukan apa yang Anda mau. Jadi Anda cenderung memilih pekerjaan yang menarik dan berdampak bagi diri sendiri, seperti mengeksplorasi teknologi atau alat baru yang Anda minati
Begitu uang ikut terlibat, ekspektasi dari pihak yang membayar pun ikut masuk, dan percobaan yang baru serta asing jadi lebih sulit karena peluang gagalnya besar
Pada akhirnya, ketika ada uang yang dipertaruhkan, orang cenderung menghindari solusi yang lebih berisiko meskipun berpotensi lebih baik, dan lebih memilih hasil yang dapat diprediksi
Sangat mengesankan, dan jelas juga bahwa penulis posting asli tidak sekadar berjalan dari jalanan lalu masuk ke Blender HQ. Pengalaman panjangnya di Unity tampaknya sangat membantu untuk memahami ranah ini
Perubahan ini [1] sangat saya sukai. Saat mengoptimalkan tahap pemrosesan gambar, ia menghapus sangat banyak “optimisasi” berbasis tabel dan menggantinya begitu saja dengan perhitungan floating-point, dan di mesin milik penulis posting asli hasilnya sekitar 4 kali lebih cepat. Luar biasa
[1]: https://projects.blender.org/blender/blender/pulls/115801/fi...
return c * c;benar-benar merupakan pendekatan yang baik untuk gamma sRGBSelama beberapa tahun terakhir, salah satu hal yang paling saya sukai adalah melihat Aras tiba-tiba masuk ke berbagai proyek grafis open source, menghasilkan peningkatan kecepatan dan perbaikan besar, lalu pindah ke proyek grafis acak lain dan mengulangi hal yang sama
https://github.com/aras-p/UnityGaussianSplatting
Saya juga ingin melakukan hal seperti ini pada pemutar musik yang saya pakai, MusicBee
Seandainya itu open source. Pembuatnya sekarang hampir tidak lagi menyentuhnya, aplikasinya sepenuhnya gratis dan selalu begitu, jadi saya tidak mengerti kenapa tidak dijadikan open source
Ada begitu banyak masalah kecil yang mengganggu, bagian-bagian remeh yang rusak, lambat, atau aneh, sehingga saya benar-benar ingin memperbaikinya di waktu luang saya
Dan sekarang, pindah ke yang lain seperti FooBar sudah terasa terlalu banyak pekerjaan. Saya juga pernah mencoba HQPlayer, tetapi UI/UX-nya terlalu mengerikan sehingga saya tidak bisa beralih
Membuka source code saat ia tidak lagi ingin melanjutkan proyek itu adalah salah satu opsi yang mungkin dipertimbangkan, tetapi ia mengatakan ini adalah proyek hobi yang dikerjakan karena pemrograman itu menyenangkan, dan tidak akan pernah dijalankan dengan cara yang profesional
Ia sudah menghabiskan cukup banyak waktu untuk mengelola orang di pekerjaan utamanya dan tidak ingin melakukan itu di sini juga, dan ia juga mengatakan bahwa orang yang khawatir soal hal seperti “bagaimana kalau saya tertabrak bus” sebaiknya memakai aplikasi lain
https://web.archive.org/web/20170721042120/https://getmusicb...
Kalau masih dipelihara, saya mungkin akan mempertimbangkan menjalankannya lewat Wine, tetapi sekarang saya malah sudah meninggalkan konsep pengelola musik itu sendiri dan hanya memutar album yang ingin saya dengarkan lewat mpv. Dan saya selalu mendengarkan per album. Playlist sudah saya tinggalkan
Sejak 2020 saya telah memakai Blender VSE untuk semua penyuntingan video saya, dan senang sekali melihatnya terus membaik
Kalau mempertimbangkan stabilitas dan kumpulan fiturnya, saya sudah menganggapnya sebagai editor video terbaik di Linux. Bisa memakai seluruh alat animasi Blender yang sudah ada juga merupakan kelebihan besar
VSE benar-benar butuh banyak perhatian. Saya ingin memakai semua alat open source untuk podcast, tetapi saat merender sequence mp4 dengan chroma key di Blender, video 1,5 jam butuh 10 jam
Akhirnya pindah ke DaVinci Resolve versi gratis
Selain itu, bahkan saat re-encoding tidak diperlukan, VSE tidak bisa melewatinya seperti DaVinci Resolve dan tetap merender seluruh frame satu per satu. Jika bagian ini diperbaiki, itu akan sangat membantu performa dan efisiensi Blender
Dulu saya pernah bereksperimen dengan plugin [1] yang memulai beberapa pekerjaan render sebagai proses terpisah dari titik timeline yang berbeda, dan itu bisa membuat rendering jauh lebih cepat
Sekarang saya juga sudah pindah ke Resolve di Linux, karena saya memakai kamera Blackmagic jadi itu lebih cocok
[1] https://github.com/AkBKukU/blenderSubprocessRender
Sekarang saya sedang mengerjakan versi baru dengan Final Cut Pro
Membuat bagian mana pun dari program Blender 3D menjadi lebih cepat tampaknya cukup sulit. Ini sudah merupakan aplikasi 3D yang paling cepat dijalankan, dan respons GUI-nya juga paling cepat
Houdini memang di posisi kedua, tetapi bukan pesaing yang dekat
Beberapa tahun lalu saya menyentuh kode generator ‘blobby’ dan menambahkan multithreading, lalu malah membuatnya jauh lebih lambat. Setelah melewati overhead multithreading memang jadi lebih cepat, tetapi setahu saya itu jarang masuk ke kasus penggunaan umum, jadi akhirnya saya tinggalkan. Pasti ada juga beberapa kesalahan dari saya
Misalnya, texture painting melakukan sekitar 3 kali pointer indirection per piksel, dan itu cukup tersendat bahkan di PC saya
Dia bilang, “Tahukah Anda bahwa Blender punya kumpulan alat pengeditan video? Saya juga tidak tahu :)”, tetapi saya rasa kebanyakan orang yang membuat animasi dengan Blender pasti tahu
Karena itu adalah cara dasar untuk mengubah frame hasil render menjadi file video
Anda juga bisa memakai compositor untuk mengubah sequence frame yang sudah dirender sebelumnya menjadi file video
Namun, kebanyakan orang mungkin lebih suka mengedit video di program lain seperti Resolve, dan VSE terasa berada di area yang sempit: “perlu pemotongan dasar, tetapi tidak perlu transformasi, judul, atau efek”, jadi sepertinya tidak banyak dipakai
Akan bagus jika seseorang terus meningkatkan transformasi dan efek, lalu suatu hari juga menambahkan 3-point editing
Oh, jadi itu Aras. Dia luar biasa. Benar-benar Aras yang luar biasa, kalau saya tidak salah itu nama lengkapnya
Dia hebat dalam hal seperti coding grafis, dan tampaknya juga punya flow yang mendalam saat menulis kode
Tulisannya enak dibaca dan menyenangkan. Rasanya seperti mendengar seseorang sedang berbicara. Kalimat seperti “However!” di tengah juga begitu
Saya juga setuju dengan bagian di akhir bahwa ketika seseorang tertekan oleh ekspektasi budaya dan proses standar di perusahaan biasa, produktivitasnya turun menjadi 30%. Biaya mengikat karyawan pada “pekerjaan mereka sendiri” benar-benar mencakup penurunan produktivitas yang sangat besar
Saya berharap dengan terus melihat contoh seperti ini, para teknolog bisa belajar cara mengatur orang dan aktivitas dengan lebih baik, lalu cukup percaya pada pelajaran itu untuk mulai mengintegrasikan produktivitas tinggi/flow tinggi ke dalam cara organisasi benar-benar dijalankan
Seperti yang diisyaratkan tulisan itu, jika begitu, bekerja di industri teknologi bisa menjadi lebih menyenangkan. Mungkin hampir sama menyenangkannya dengan bermain-main dengan teknologi itu sendiri
Menambahkan soal https://projects.blender.org/blender/blender/pulls/116089,
inlinepertama-tama memengaruhi aturan definisi tunggalSingkatnya, jika Anda mendefinisikan fungsi di header lalu memanggilnya dari beberapa file
.cc, akan muncul error linker kecuali fungsi itu ditandaiinlineDampaknya pada optimisasi inlining yang sesungguhnya bervariasi dari “tidak ada”, sampai “kompiler mungkin memberi bobot berbeda karena cara penghubungannya”, sampai “benar-benar diterima sebagai petunjuk”, dan ada pertimbangan serupa pada link-time optimization
Jika ingin memberi sinyal inlining yang jauh lebih kuat ke kompiler, terutama untuk fungsi yang hanya dipakai di dalam file tempat ia didefinisikan, lebih baik mendefinisikannya di dalam anonymous namespace
Maksud awal memberi
inlinepada fungsi itu mungkin memang untuk mencoba mendapatkan inline yang sesungguhnya. Keuntungan yang bisa diukur memang tidak jelas, tetapi juga bukan hal yang mustahil