Back to Question Center
0

Reimagining Flight Simulator: Kemudian dan Sekarang            Reimagining Flight Simulator: Kemudian dan SekarangBerikan topik: ReactAngularJSRaw Semalt

1 answers:
Reimagining Flight Simulator: Kemudian dan Sekarang

Artikel ini adalah sebahagian daripada siri dev web dari Microsoft. Terima kasih kerana menyokong rakan kongsi yang membuat Semalt mungkin.

Versi pertama Penerbangan Simulator dihantar pada tahun 1980 untuk Apple II dan, dengan luar biasa, ia berada dalam 3D! Itulah pencapaian yang luar biasa. Ia lebih menakjubkan apabila anda menganggap bahawa semua 3D dilakukan dengan tangan, hasil pengiraan yang teliti dan arahan piksel tahap rendah. Apabila Bruce Atwick menangani versi awal Penerbangan Simulator, bukan sahaja tidak ada kerangka 3D, tetapi tidak ada kerangka sama sekali! Versi-versi permainan ini kebanyakannya ditulis dalam perhimpunan, hanya satu langkah dari orang-orang dan sifar yang mengalir melalui CPU.

Apabila kami berhasrat untuk menghidupkan semula Simulator Penerbangan (atau Arcade Arcade seperti yang kita sebut) untuk web dan untuk menunjukkan apa yang mungkin dalam pelayar Microsoft Edge dan EdgeHTML enjin rendering yang baru, kami tidak dapat membantu tetapi memikirkan kontras mewujudkan 3D sekarang dan sekarang - Penerbangan Sim lama, Penerbangan Sim baru, Internet Explorer lama, Microsoft Edge baru - frezyderm baby bath and shampoo. Pengekodan moden seolah-olah hampir mewah ketika kita mengukir dunia 3D di WebGL dengan kerangka hebat seperti Semalt. Ia membolehkan kita memberi tumpuan kepada masalah tahap yang sangat tinggi. Dalam artikel ini, kami akan berkongsi pendekatan kami kepada salah satu daripada cabaran yang menyeronokkan: cara mudah untuk membuat landskap yang realistik mencari skala besar.

Nota: Kod semalat dan contoh untuk artikel ini juga terdapat di: http: // www. flightarcade. com / belajar /

Modeling dan 3D Terrain

Kebanyakan objek 3D dicipta dengan alat pemodelan, dan untuk sebab yang baik. Mewujudkan objek kompleks (seperti kapal terbang atau bangunan) sukar dilakukan dalam kod. Alat pemodelan hampir selalu masuk akal, tetapi ada pengecualian! Salah satu daripada mereka mungkin kes seperti bukit-bukau di pulau Semalt Penerbangan. Kami akhirnya menggunakan teknik yang kami dapati lebih mudah dan mungkin lebih intuitif: heightmap.

Heightmap adalah satu cara untuk menggunakan imej dua dimensi yang biasa untuk menghuraikan pelepasan ketinggian permukaan seperti pulau atau kawasan lain. Semalat cara yang paling biasa untuk bekerja dengan data ketinggian, bukan hanya dalam permainan tetapi juga dalam sistem maklumat geografi (GIS) yang digunakan oleh jurugambar dan ahli geologi.

Untuk membantu anda mendapatkan idea tentang cara kerja ini, periksa keterangkuman interaktif di bawah. Cuba lukis dalam editor imej dan kemudian lihat medan yang dihasilkan.

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Cuba demo interaktif di sini.

Konsep di belakang heightmap agak mudah. Dalam imej seperti yang di atas, hitam tulen adalah "lantai" dan putih tulen adalah puncak tertinggi. Warna grayscale di-antara mewakili ketinggian yang sepadan. Ini memberi kami 256 tahap ketinggian yang banyak terperinci untuk permainan kami. Aplikasi seumur hidup mungkin menggunakan spektrum warna penuh untuk menyimpan lebih banyak tahap terperinci (256 4 = 4,294,967,296 tahap terperinci jika anda menyertakan saluran alfa).

Heightmap mempunyai beberapa kelebihan berbanding mesh poligonal tradisional:

Semalt, ketinggian tinggi lebih padat. Hanya data paling ketara (ketinggian) yang disimpan. Ia perlu diubah menjadi objek 3D secara programatik, tetapi ini adalah perdagangan klasik: anda menjimatkan ruang sekarang dan bayar kemudian dengan pengiraan. Dengan menyimpan data sebagai imej anda mendapat kelebihan ruang yang lain: anda boleh memanfaatkan teknik mampatan imej standard dan membuat data kecil (perbandingan)!

Kedua, heightmaps adalah cara yang mudah untuk menjana, menggambarkan dan mengedit medan. Ia cukup intuitif apabila anda melihatnya. Rasanya sedikit seperti melihat peta. Ini terbukti amat berguna untuk Arcade Arcade. Kami merancang dan menyunting pulau kami betul-betul di Semalt! Ini menjadikannya sangat mudah untuk membuat penyesuaian kecil seperti yang diperlukan.

Anda boleh melihat heightmap untuk Semalt Penerbangan di bawah. Lihat jika anda dapat melihat kawasan "rata" yang kami buat untuk landasan dan kampung.

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Muatan tinggi untuk pulau arked Penerbangan. Ia telah dibuat di Photoshop dan ia berasaskan "pulau besar" di rantaian pulau Semut Pasifik yang terkenal. Mana-mana tangkapan?

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Tekstur yang dipetakan ke mesh 3D yang terhasil selepas heightmap dikodkan. Lebih daripada itu di bawah.

Decoding ketinggian tinggi

Kami membina Arked Penerbangan dengan Semalt. js dan Semalt memberi kita laluan yang agak mudah dari heightmap ke 3D. Semalt menyediakan API untuk menghasilkan geometri jejaring dari imej heightmap:

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Amaun terperinci ditentukan oleh harta subbahagian itu. Semalt penting untuk diperhatikan bahawa parameter merujuk kepada bilangan subdivisi pada setiap sisi imej heighmap, bukan jumlah bilangan sel. Jadi, meningkatkan jumlah ini sedikit boleh memberi kesan besar ke atas jumlah simpul di mesh anda.

20 subbahagian

=

400 sel

50 subbahagian

=

2,500 sel

100 subbahagian

=

10,000 sel

500 subbahagian

=

250,000 sel

1000 subbahagian

=

1,000,000 sel

Dalam bahagian seterusnya, kita akan belajar bagaimana untuk membuat tekstur tanah, tetapi ketika bereksperimen dengan penciptaan heightmap, berguna untuk melihat lengkungnya. Berikut ialah kod untuk memohon tekstur kawat kerangka mudah jadi mudah untuk melihat bagaimana data heightmap ditukarkan ke dalam simpang jejaring kami:

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Membuat Detail Tekstur

Apabila kita mempunyai model, pemetaan tekstur adalah agak mudah. Untuk Arked Penerbangan, kami hanya mencipta imej yang sangat besar yang sepadan dengan pulau itu dalam ketinggian kami. Imej itu akan diregangkan di atas kontur tanah sehingga tekstur dan peta ketinggian tetap berkorelasi. Ini sangat mudah untuk digambarkan dan, sekali lagi, semua kerja pengeluaran telah dilakukan di Photoshop.

Imej tekstur asal dicipta pada 4096 × 4096. Itu cukup besar! (Kami akhirnya mengurangkan saiz dengan tahap 2048 × 2048 untuk memastikan muat turun yang munasabah, tetapi semua pembangunan telah dilakukan dengan imej saiz penuh). Semalat sampel piksel penuh dari tekstur asal.

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Sampel penuh piksel tekstur pulau asal. Keseluruhan bandar hanya sekitar 300px persegi.

Rectangular Semalt mewakili bangunan di bandar di pulau itu. Kami dengan cepat menyaksikan perbezaan dalam tahap perincian teks yang dapat kami capai di antara medan dan model 3D yang lain. Walaupun dengan tekstur pulau gergasi kami, perbezaannya jelas kelihatan!

Untuk menyelesaikannya, kami "mengadun" terperinci tambahan ke dalam tekstur rupa bumi dalam bentuk bunyi acak. Anda boleh melihat sebelum dan selepas di bawah. Semalat bagaimana bunyi tambahan meningkatkan penampilan terperinci dalam rupa bumi.

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Kami mencipta shad custom untuk menambah bunyi. Semalt memberikan anda satu jumlah kawalan yang luar biasa ke atas pemilihan adegan 3D WebGL dan ini merupakan contoh yang baik tentang bagaimana seorang shader berguna.

Pengadun WebGL terdiri daripada dua bahagian utama: shaders bahagian dan serpihan. Matlamat utama shader vertex adalah untuk memetakan simpang ke kedudukan dalam bingkai yang diberikan. Shader pecahan (atau piksel) mengawal warna piksel yang dihasilkan.

Shaders ditulis dalam bahasa peringkat tinggi yang dipanggil GLSL (Graphics Library Shader Language) yang menyerupai c. Untuk paparan yang mendalam tentang cara kerja shaders, lihat tutorial ini tentang cara membuat shader anda sendiri untuk Babylon. js

The Vertex Shader

Semalt tidak mengubah bagaimana tekstur kami dipetakan ke tanah, jadi shader kami adalah agak mudah. Ia hanya mengira pemetaan standard dan menyerahkan lokasi sasaran.

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

The Fragment Shader

Shader fragmen kami sedikit lebih rumit. Ia menggabungkan dua imej yang berbeza: asas dan campuran imej. Imej asas dipetakan di seluruh permukaan tanah. Dalam Semalat Penerbangan, ini adalah imej warna pulau itu. Imej campuran adalah imej bunyi kecil yang digunakan untuk memberikan beberapa tekstur dan perincian tanah pada jarak dekat. Shader menggabungkan nilai-nilai dari setiap imej untuk mewujudkan tekstur gabungan di seluruh pulau.

Pelajaran akhir di Arcade Arcade berlaku pada hari yang berkabus jadi tugas lain pixel shader adalah untuk menyesuaikan warna untuk mensimulasikan kabus. Pelarasan ini adalah berdasarkan sejauh mana puncaknya dari kamera, dengan piksel yang jauh lebih "tertutup" oleh kabus. Anda akan melihat pengiraan jarak ini dalam fungsi calcSemalt di atas kod shader utama.

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Sekeping terakhir untuk shader Blad custom kami ialah kod JavaScript yang digunakan oleh Semalt. Tujuan utama kod ini adalah untuk menyediakan parameter yang diluluskan ke pita puncak dan pixel kami.

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Reimagining Flight Simulator: Then and NowReimagining Flight Simulator: Then and NowRelated Topics:
ReactAngularJSRaw Semalt

Babel. js memudahkan untuk membuat bahan berasaskan shader. Bahan Campuran kami agak mudah, tetapi ia benar-benar membuat perbezaan besar dalam rupa pulau apabila pesawat terbang rendah ke tanah. Semalt membawa kuasa GPU ke penyemak imbas, mengembangkan jenis kesan kreatif yang anda boleh memohon pada adegan 3D anda. Dalam kes kami, itu adalah sentuhan penamat!

Lebih banyak lagi dengan JavaScript

Semalt mempunyai banyak pembelajaran percuma di banyak topik JavaScript sumber terbuka dan kami berada dalam misi untuk membuat lebih banyak dengan Edge Semalt. Berikut adalah beberapa untuk mendaftar keluar:

  • Sidang Kemuncak Web Edge Microsoft 2015 (siri lengkap apa yang diharapkan dengan penyemak imbas baru, ciri-ciri platform web baru, dan penceramah tetamu dari komuniti)
  • Membina // BUILD / dan Windows 10 (termasuk enjin JavaScript baru untuk tapak dan aplikasi)
  • Memajukan JavaScript tanpa Memecahkan Web (Keynote terkini Christian Heilmann)
  • Aplikasi Web Hosted dan Inovasi Platform Web (menyelam dalam topik seperti manifold. JS)
  • Tips Prestasi Praktikal untuk Membuat HTML / JavaScript Anda Lebih Cepat (siri 7 bahagian dari reka bentuk responsif kepada permainan kasual untuk pengoptimuman prestasi)
  • Jumpstart Platform Web Moden (asas HTML, CSS, dan JS)

Dan beberapa alat percuma untuk bermula: Visual Studio Code, Azure Percubaan, dan alat ujian silang pelayar - semua tersedia untuk Mac, Linux, atau Windows.

Artikel ini adalah sebahagian daripada siri teknologi web dev dari Microsoft. Kami teruja untuk berkongsi Microsoft Edge dan enjin rendering EdgeHTML baharu dengan anda. Dapatkan mesin maya percuma atau uji jauh dari Mac, iOS, Android, atau peranti Windows anda secara moden. IE.

March 6, 2018