Siapa, ombak, yang menghentikanmu,
Siapa yang mengikat larimu yang perkasa,
Siapa yang berada di kolam yang sunyi dan padat
Apakah aliran pemberontakan telah berubah?
A.S.Pushkin
Pertanyaan yang diajukan dalam judul mungkin menimbulkan kejutan: bukankah itu sebabnya permukaan air disebut datar karena cenderung menempati permukaan yang sempit? posisi horisontal; ketika berbicara tentang ketinggian, yang mereka maksud adalah semacam bidang, dan apa yang lebih datar dari permukaan air? Tidak heran mereka berkata begitu!
Kami tidak akan menentang gagasan tradisional, tetapi mari kita perjelas: ungkapan “permukaan air” berlaku jika air tidak bergerak. Namun hal ini praktis tidak pernah terjadi. Air memiliki karakter yang berbeda...
Beralih ke perairan alami
proyek, kami jarang menemukan konfirmasi
gagasan yang berlaku tentang cita-cita
ketinggian air horizontal, tapi berikut adalah contohnya
non-horizontalnya ada di mana-mana - dari
tetesan air ke laut. Non-horizontal
terlihat bahkan pada tingkat mikro. Misalnya,
ratakan dalam gelas kimia atau tabung tipis
air selalu berbentuk cekung bening,
sesuai dengan koefisien tertinggi
kepada pelayan tegangan permukaan di antara
cairan (kecuali merkuri). Dengan ini
alasan yang sama setetes air tidak menyebar
di atas kertas lilin, dan dalam gravitasi nol secara umum
tetap berbentuk bola.
Pelanggaran ketinggian air horizontal
permukaan juga terlihat pada tingkat makro. Di kejauhan
dari samudra dan lautan, permukaannya
bagi kita tampak sangat horizontal. Tapi jika
hamparan laut di depan matamu,
arahkan pandanganmu ke cakrawala - kamu
Anda tidak akan melihat garis lurus, tetapi busur... Dan dalam rencana-
wadah skala samudera dan lautan airnya
permukaannya benar-benar bulat, itu
mengulangi garis besarnya bola dunia, dan tangisannya-
nilainya ditentukan oleh hukum fisika.
Tentu saja, kelengkungan planet juga demikian
bukan “permukaan” air laut, melainkan secara berkala
terganggu oleh lewatnya gelombang panjang
pasang surut yang berhubungan dengan posisi
Bulan dan Matahari. Saat air pasang, kemiringannya adalah
diarahkan ke darat, saat air surut - ke arah
sisi sebaliknya.
Ketinggian gelombang pasang bervariasi
tempat-tempat di Bumi dan bergantung pada bentuk pantainya.
Pasang surut tertinggi di Bumi (15,6–18 m)
tercatat di Teluk Fundy (Atlantik
pantai Kanada). Di konferensi Eropa
pasang tertinggi tinente (hingga 13,5 m)
diamati pada Bank Barat Perancis, di
Brittany. Di Rusia, gelombang pasang seperti itu terjadi
ditemukan di Teluk Penzhinskaya di Laut Okhotsk - hingga
12,9 m Ini adalah tempat air pasang tertinggi
di seluruh Samudera Pasifik.
Selain ketidakseimbangan pasang surut di level tersebut
nya lautan, horizontalitasnya konstan
terdistorsi oleh gelombang angin
arus, gelombang badai, dan dekat pantai
gov - semburan ombak. Yang paling kuat
Bumi arus hangat Aliran Teluk terlihat
sungai "cembung", naik ke atas permukaan
ness Samudera Atlantik sebesar 1-2 m.
Jadi “permukaan lautan” hanyalah sebuah novel -
ekspresi kiasan, apa yang saya maksud
perhatian ahli geografi yang luar biasa
Penulis kelautan Jules Verne. Spanduknya
Kapten Nemo berulang kali membantah
idealisasi “permukaan laut”: “Mudah
riak mengalir melintasi permukaan air... Ringan
angin sepoi-sepoi sedikit mengacak-acak permukaan air... Tidak ada
gelombang yang muncul di permukaan air..." Dan ini dia
kesimpulan utama: “Permukaan air beku, hingga
yang mengejutkannya, bertentangan dengan ekspektasinya sama sekali
Ternyata tidak semulus cermin.”
Jadi “permukaan” air jarang terjadi.
Pushkin bahkan melihat Laut Hitam yang “lembut”.
rusa dalam suasana hati yang berbeda:
Bersuara, bersuara, layar patuh.
Kekhawatiran di bawahku, lautan suram.
Dan emosi apa yang menguasai kita saat kita melihatnya
permukaan laut yang mengancam dalam lukisan
I.K.Aivazovsky! Lautan dekat dengan kita
Pelukis kelautan tidak pernah tenang.
Tapi mungkin untuk mencari “cermin”
air ada baiknya beralih ke area yang lebih kecil
badan air? Tidak bisakah kita menemukan contoh ide di sana?
Apakah itu benar-benar pesawat air yang datar?
Tidak, bertentangan dengan kepercayaan populer,
ketinggian air di permukaan danau besar
juga tidak bisa sepenuhnya horizontal. Dia
memiliki “distorsi” berupa panjang yang eye-catching
gelombang yang tidak terlalu mencolok - yang disebut seiches.
Mereka muncul di bawah pengaruh eksternal
kekuatan: perubahan tekanan atmosfer,
arah dan kecepatan angin, seismik
gempa, bank ambruk.
Seiches dicirikan oleh periode yang besar
di rumah (dari beberapa menit hingga puluhan jam)
dan amplitudo yang nyata (dari milimeter hingga
beberapa meter). Ya, di Danau Jenewa
(Swiss) amplitudo seiche mencapai 2 m s
untuk jangka waktu lebih dari satu jam. Dan cukup
Azov yang terisolasi dan dangkal
laut, seiches diamati dengan periode hingga 23
jam dan amplitudo 10-25 cm.
Hal serupa terjadi di Finlandia
teluk, tempat terjadinya topan yang dalam dan kuat
mi angin barat menciptakan “kemiringan”
tingkat dan gelombang panjang, menyebar,
berguling ke mulut Neva, menyebabkan yang terkenal
banjir di St.Petersburg. Pushkin, tidak
tidak memiliki pengamatan yang sistematis,
menjelaskan secara singkat dan akurat alasan sebaliknya
aliran Neva, yaitu perubahan kemiringannya:
Namun kekuatan angin dari teluk
Memblokir Neva
Dia berjalan kembali, marah, mendidih,
Dan membanjiri pulau-pulau...
Model seiche yang paling sederhana mudah dibuat
amati dalam semangkuk air. Mengayunnya sendirian
kali, Anda bisa melihat bagaimana ombak muncul,
berulang kali dipantulkan dari samping, berpindah
gosokkan pada permukaan. Mereka mendorong-
xya, saling tumpang tindih secara kacau,
menciptakan sistem gelombang yang kompleks.
Namun distorsi yang paling signifikan adalah horizontal
zonasi ketinggian air terjadi pada
yang paling mobile badan air- ulang-
Jelas sekali, aliran air apa pun tidak bisa
menjadi sangat horizontal justru karena
mengalir, artinya mempunyai kemiringan, karena,
Seperti kata pepatah, tanpa kemiringan, air tidak akan mengalir. DAN,
melihat profil memanjang sungai, kami
kita selalu melihat arah kemiringan sebagai dasar
sungai dan permukaannya.
Namun jika dasar sungai cukup stabil,
ketinggian air di dalamnya berubah terus-menerus.
Bukan suatu kebetulan jika diukur dengan meter air
posting dibuat setidaknya dua kali per
hari, saat air tinggi dan banjir - setiap
Sudah waktunya. Selama periode inilah sungai khususnya mengalir
agresif, terutama ketika mereka mengancam
“melompat tinggi” (sekali lagi, hanya sebuah gambar)
ekspresi menyiratkan yang tertinggi
Kenaikan dan keluar level yang lebih besar air sungai di belakang
batas salurannya sendiri).
Jelas bahwa perlu untuk mengetahui caranya
sungai bisa naik tinggi. Mayoritas
kota-kota muncul pada saat tidak ada
tidak ada informasi tentang kemungkinan fluktuasi
ketinggian air di sungai, dan sekarang jumlahnya banyak
sangat menderita karena berulang secara berkala
bencana banjir yang sedang berlangsung. Umum
banjir yang diketahui di sungai Cina, India,
Amerika, beberapa negara-negara Eropa. Banjir
pertemuan berlangsung di St. Petersburg, Arkhangelsk,
Krasnoyarsk, Blagoveshchensk, Krymsk dan
kota lain dan daerah berpenduduk Rusia.
Mengingat pengalaman menyedihkan banjir tua
kota, desain dan konstruksi
yang baru dilakukan dengan pertimbangan wajib
kadar air tertinggi. Tapi bagaimana cara menentukannya
besarnya kenaikan tersebut? Untuk ini, Anda perlu
mengetahui pola rezim air sungai dan
danau, memiliki serangkaian pengamatan yang panjang
mereka. Sesuai kronologis jadwal harian
perubahan signifikan pada ketinggian air (disebut
hidrograf) seseorang dapat menilai sifat air
nutrisi, waktu dan ukuran
situasi ekstrim.
Ketinggian kenaikan muka air sungai di
waktu air tinggi atau banjir tergantung
banyak alasan: di beberapa sungai ini bagus
pada cadangan salju dan intensitas pencairannya,
di sisi lain - jumlah curah hujan dan durasinya
terjadinya hujan, pada kondisi ketiga
kedinginan dan pecahnya es, persahabatan
aliran es, yang keempat - arah angin-
selokan dan gelombang pasang surut air. Tapi lebih kuat
dipengaruhi oleh luas daerah tangkapan air dan
sifat dasar sungai. Jelas, semakin kuat
salurannya terkendala tepian sungai, maka semakin besar pula sungainya
Saya ingin melampaui batasnya dan bahkan lebih tinggi lagi
dia harus bangun. Dan sebaliknya: di
dataran banjir berawa yang luas di mana tidak ada apa-apa
mencegah sungai menyebar lebih luas, air naik
minor. Sangat menenangkan
mempengaruhi sungai... danau dan rawa. Daripada mereka
lebih banyak di daerah aliran sungai, semakin sedikit co-
fluktuasi ketinggian air.
Berapa sebenarnya kenaikan permukaan air?
di sungai dan danau? Dan bukankah itu buahnya
cerita imajinasi artistik tentang
lompatan multimeter di permukaan sungai, di atas air
ny poros, tentang desa-desa yang tersembunyi di bawah air,
tentang banjir di ruang yang luas, sepadan
pelek dengan luas beberapa negara bagian?
Seperti yang ditunjukkan oleh ahli hidrologi jangka panjang,
observasi observasional, peristiwa seperti itu tidak hanya
terjadi dan sedang berlangsung, namun hal tersebut dapat menjadi op-
klasifikasi terbatas.
Kenaikan permukaan air tertinggi tercatat
diperkirakan terjadi di sungai-sungai dataran rendah yang mengalir jernih
tepian yang menonjol karena tidak adanya dataran banjir. DI DALAM
dalam kondisi ini, bahkan di sungai kecil, terjadi fluktuasi
levelnya mencapai 2-4 m, dan pada tingkat sedang dan besar
tinggi - air bisa naik ke ketinggian
bangunan bertingkat. Tentang "biru yang indah"
Danube" telah didengar oleh semua orang, namun tidak semua orang mengetahui apa itu
dua ribu kilometer dari mulutnya, di Austria,
amplitudo fluktuasi permukaan air Danube
mencapai hampir 15 m, tercatat di Budapest
tingkat lompatan lebih dari 10 m. Namun, di Eropa
Rekor lompat tinggi dipegang oleh... Oka.
Di wilayah Kaluga, amplitudo fluktuasi level
air selama periode lebih dari 120 tahun telah diamati
deniya mencapai 19 m! Dengan latar belakang ini, ia bangkit
perairan di Don akan tampak moderat - “semuanya
"pergi" 12-14 m, dan di sepanjang Volga atas (sebelum penciptaan
mengatur waduk) air di atas 10 m
tidak bangun.
Batasan yang cukup tinggi telah diatasi -
sungai utara kita mengalir. Air yang kuat
aliran sungai dibatasi oleh curam dan kuat
pantai, mampu naik ke ketinggian
10-12 m Amplitudo osilasinya sangat besar
tingkat sauna di Pechora. Hampir dalam segala hal
sepanjang perbedaan antara minimum
dan level maksimum mencapai 12 m.
Anak sungai Pechora yang sama “gelisahnya” adalah sungai
Amerika Serikat. Raksasa utara lainnya - Severnaya
Dvina hampir sama baiknya dengan tetangganya. DI DALAM
di wilayah Ust-Pinega, fluktuasi jangka panjang
level melebihi 12 m. Cukup “melenting”
dan Sungai Sukhona, terutama di bagian hilirnya.
Tidak ada kenaikan permukaan air setinggi sepuluh meter
mengalami Veliky Ustyug sekali.
Namun, meskipun terkenal dengan bahasa Rusia-
"banjir sungai-sungainya seperti lautan"
juara dalam “melompat” harus dicari
di Asia. Kenaikan permukaan air terbesar terjadi di
di negara kita - hingga 32 m - diamati di sungai
Tunguska. Untungnya, tidak ada ekonomi
Tidak ada objek di area ini. Dan di antara dunia
sungai-sungai raksasa yang menjadi “lompatan” tertinggi
mengalir Sungai Yangtze di Cina. Di tempat sempit dekat kota
Ichan itu mencapai 50 m. Kekuatan apa yang dibutuhkan?
tapi harus mengambil ketinggian seperti itu!
Sungai dengan dataran banjir pun tidak bisa
mendekati hasil yang serupa. Biasanya
amplitudo fluktuasi ketinggian air di dalamnya
tidak melebihi 1,5–2 m di hulu, in
rata-rata - 15-20 m. Karena alasan ini, Volga
di bagian hilir, dan Ural sepanjang keseluruhannya tidak di bawah-
lebih tinggi dari 10 m.
Dampaknya bahkan lebih rendah lagi pada sungai yang mengalir masuk
di dalam lahan basah biasa
riy - masuk Siberia Barat, di Polesie. Di sini
sungai besar - Ob, Pripyat - amplitudo
fluktuasi level hampir mencapai 8-10 m, di
sungai kecil - 1-1,5 m.
Hasil terendah menunjukkan
danau dan sungai pegunungan. Fluktuasi jangka panjang
menurunkan permukaan air bahkan di sungai yang dalam
tidak melebihi 4-6 m. Ini termasuk
Angara, Volkhov, Neva. Ya, sepanjang sejarah
pengamatan di dekat Novaya Ladoga, amplitudo getaran
Ketinggian air di Volkhov adalah 3,3 m.
Bahkan lebih sedikit lagi untuk Neva, yang alirannya hampir sama
sepenuhnya diatur oleh Ladoga.
Dalam hal ini, timbul pertanyaan: bagaimana-
Apakah kita perlu meninggikan danau? Berbeda dengan sungai,
kapasitas danau yang besar tidak memungkinkan mereka melakukan hal tersebut
dengan cepat dan mudah menyerah pada perubahan cuaca
ya - pencairan salju yang bersahabat, intens
hujan, angin kencang, dll. Oleh karena itu, am-
amplitudo levelnya jauh lebih kecil, khususnya
dekat danau padat. tingkat Danau Ladoga,
misalnya, selama periode pengamatan lebih dari
140 tahun berfluktuasi dalam kisaran 1,5-2,5 m, di
Baikal, fluktuasi tingkat sekuler tidak mendahului
tinggi 2,2 m.
Di wilayah Rusia, yang paling “bangkit-
tapi" Danau Ilmen, amplitudo levelnya
selama seluruh periode pengamatan melebihi 7 m.
(Bagaimana mungkin seseorang tidak mengingat legenda tentang kota Kitezh,
masuk ke dalam air?) Hal ini dijelaskan oleh fakta bahwa
berapa luas permukaan air Ilmen
sekitar 90 kali luasnya lebih sedikit memelihara-
dari kolam renangnya. Itu sebabnya danau ini sangat berangin
bereaksi terhadap sedikit perubahan kadar air
tanah miliknya yang sangat besar. Hampir sama
tetangga utaranya di Vologda berperilaku
peringkat - Danau Kubenskoe, pendakian tertinggi
level di sana mencapai 5-6 m
danau di utara dan barat laut Rusia di bawah-
berkisar dalam 2-3 m.
Namun ada yang unik di dunia ini
contoh horizontal yang hampir mutlak
kualitas air - ini adalah Besar yang tidak memiliki saluran pembuangan
Danau garam di Amerika Serikat bagian barat laut. Anda-
lapisan garam yang telah mengering hingga menjadi kerak mengulangi level tersebut
air dan memastikan permukaan rata
permukaan yang sedang diuji
dan balap mobil super cepat.
Tetapi jika “distorsi” level adalah hal yang biasa
bahkan untuk danau, maka di sungai jumlahnya lebih banyak lagi
nyata. Tidak ada keraguan tentang kemiringan memanjang
aliran air. Tapi apakah sudah jelas bahwa ada
merica? Kewajaran petunjuknya:
jika ada, air akan menyeberang
sungai - antar tepian. Asumsi ini
mungkin tampak tidak masuk akal - lagi pula, ini tidak benar
harus terjadi!
Namun kemiringan airnya melintang
dasar sungai itu ada. Ini mudah untuk diverifikasi,
menyaksikan kehidupan sungai besar dataran rendah.
Perhatikan perilaku hewan air
mengalir pada musim yang berbeda dalam setahun. Prismo-
pergi ke sungai di musim semi, saat air tinggi, selama
Saya seorang hanyut es. Es mengambang bebas terapung
mendekat, bahkan terkadang berpelukan
ke pantai, dan sering terjadi kemacetan es
"merangkak" pada mereka. Hal ini menunjukkan bahwa
ada kemiringan yang diarahkan dari tengah
sungai ke tepian. Jika Anda mengikuti sungai
di akhir banjir, saat air surut, mudah dilakukan
tapi akan menyadari bahwa semua orang mengambang bebas
benda (batang kayu, cabang, berbagai puing)
menempel di tengah sungai, mengidentifikasi dengan jelas
menggonggong inti aliran air. Yang sama
yang “melukiskan perenang berdada lancip
kano." Oleh karena itu, ada bias
diarahkan dari tepian ke tengah sungai.
Wisatawan air berpengalaman bisa mengonfirmasinya
kehadirannya tidak hanya memanjang, tetapi juga melintang
ny arus di dasar sungai, terutama di mana
arah batang berubah.
Apa yang menjelaskan munculnya
sudut melintang berarah musiman
rahim? Ahli hidrologi percaya itulah penyebabnya
adalah perubahan signifikan dalam laju aliran
air di dasar sungai. Untuk sebagian besar sungai, volumenya
air saat banjir atau saat banjir mungkin
meleleh sepuluh kali lipat. Sebab, saat dasar sungai
meluap dengan air, aliran terbesar-
kemampuan pengetahuan berada di tengah
bagian sungai yang terkena pengaruh gesekan pada tepian dan
bagian bawahnya relatif kecil dan tidak signifikan
mempengaruhi laju aliran. Sebagai akibat
tekanan yang lebih besar, ketinggian air di sini menjadi
melayang lebih tinggi daripada di lepas pantai. Dan kemudian mereka berkata:
“Sungainya meluap.” Kadang-kadang hal ini bahkan terlihat
mata; di sungai besar dan dalam melebihi-
distribusi tingkat median di pesisir
mencapai 1 m dalam hal ini, dengan lebar sungai
1,5-2 km, kemiringan melintang melebihi 0,001,
yang banyak bahkan untuk kemiringan memanjang UE-
aliran air alami. Karena perbedaan ini
tingkat di sungai ada pergerakan air dari
tengah saluran ke tepian, yang terbawa arus
es mengapung di belakang Anda.
Pada akhir banjir, kandungan air dan kedalaman sungai
menurun dan pengaruh penghambatannya meningkat
tenggelamnya dasar dan pantai. Hal ini mengarah ke
permukaan air di dekat pantai lebih tinggi,
daripada di tengah sungai, muncul gerakan di saluran
aliran air searah dari pantai ke tengah.
Terlihat jelas benda-benda yang mengapung di sungai
akan cenderung ke tengah-tengahnya, begitu menurut mereka
lokasi di aliran dapat ditentukan
dan fase rezim air - naik atau turun.
Tentu saja definisinya dangkal,
karena kita tidak melihat apa yang terjadi di kedalaman
tempat tidur. Sungai dengan terampil menyembunyikan ujungnya di dalam air,
dan orang hanya bisa menebaknya sebagai tambahan
kecepatan memanjang di sungai ada
arus sirkulasi lada.
Menyebabkan fenomena ini dibuka
hanya di pertengahan abad terakhir. Eksperimental
Kisah M.A.Velikanov (1958),
N.I. Makkaveev dan lainnya (1961) menetapkan hal itu
bahwa permukaan sungai dapat berubah
bentuk, bentuk lereng yang bermacam-macam
dipengaruhi oleh kenaikan atau penurunan
konsumsinya, adanya gaya sentrifugal
putaran, gaya rotasi bumi, angin dan
Paling kasus yang kompleks pergerakan udara
menghilang di kelokan dasar sungai, di mana, seiring dengan gaya
gravitasi, kecepatan aliran dipengaruhi oleh pusat
kekuatan mengalir yang “menekan” aliran menuju air
bank bengkok (rusak) dan beberapa
menaikkan permukaan air. Sebagai akibat
kelebihan tekanan hidrostatis di dalam
lapisan bawah, air “diperas” dan diarahkan
bergerak menuju pantai cembung.
Jadi, dua melintang
arus: satu - "permukaan", berdampak
ke pantai cekung, yang lain - "bawah", di-
dikoreksi dalam sisi yang berlawanan. DI DALAM
masing-masing membengkokkan arah sirkulasi
milikmu. Di belokan kanan ada semburan air
bergerak searah jarum jam, ke kiri - ke arah
ke arah militer. Beginilah cara sebuah lingkaran dibuat
sirkulasi di sungai.
Pencampuran dengan longitudinal utama
mengalir, arus yang diarahkan berbeda
permukaan dan di bagian bawah membuat spiral
(“heliks”) pergerakan air. Beberapa sungai
begitulah cara mereka mengalir – “dalam bentuk spiral” dari tikungan ke
membungkuk ke arah hilir.
Lagi gerakan yang lebih sulit aliran sungai masuk
periode musiman yang "kritis". Dengan berat
banjir musim gugur bentuk air cembung
permukaan menciptakan dua divergen ke arah
tepian lereng dan te-
bacaan. Pada saat yang sama, mencapai dasar, mereka berubah
arah dan, bertabrakan di tengah,
bergegas ke permukaan. Di bulan-bulan musim panas
pergerakan air terjadi secara berbeda:
aliran permukaan diarahkan ke tengah
sungai bertabrakan dan menuju ke kedalaman, di mana
menyimpang ke arah pantai. Dengan demikian,
pada periode tersebut aliran sungai terdiri dari dua
bergerak sejajar namun berlawanan
aliran spiral yang memutar.
Pengamatan menunjukkan hal yang paling banyak
tingkat stabil di sungai dan danau di musim panas dan
air rendah musim dingin. Ini adalah periode ketika arus masuk
air terbatas bahkan mungkin berhenti,
dan levelnya sendiri sangat minim. Dan sering
permukaan air kehilangan keterbukaan alaminya
yaitu, di musim panas ditutupi dengan air yang menyukai panas-
vegetasi (duckweed, alga),
dan di musim dingin - es. Keduanya menahan diri
fluktuasi gelombang permukaan air.
Perairan seperti itu sangat puitis dan dicintai.
seniman. Ingat kolam yang ditumbuhi tanaman
dalam lukisan karya V. M. Vasnetsov “Alyonushka” atau
kolam ditutupi dengan bunga lili air di lanskap
Claude Monet...
Mengenai pengaruh pemerataan
lapisan es, bahkan di sini pun hal itu hanya mungkin
kagumi kekuatan observasi Pushkin,
yang menemukan perbandingan yang akurat dan elegan:
Lebih rapi dari parket yang modis
Sungai bersinar, tertutup es.
Tidak diragukan lagi, sungai dan kolam “membeku”.
Terkadang mereka memberi kesan seperti cermin air.
Dan, memang, horizontalitas yang nyata
ada, tetapi hanya di sedikit perairan
benda, paling sering kecil, tertutup-
ty, terisolasi dari pengaruh eksternal,
itupun untuk jangka waktu yang singkat dan tertentu
sepotong panjang. Jadi, untuk pertanyaan itu,
cantumkan di judul, itu lebih sering terjadi
jawabannya negatif. Dan jika itu setengah-
hidup, lalu dengan reservasi besar...
Seringkali dalam aplikasi tiga dimensi, lebih tepatnya di game, terdapat ruang air. Jika dulu dimungkinkan untuk bertahan dengan persegi panjang biru yang menunjukkan cairan, sekarang gambar air seperti itu tampak konyol dan sama sekali tidak memenuhi persyaratan tak terucapkan untuk grafik realistis. Para pengembang dihadapkan pada pertanyaan: bagaimana cara menggambarkan permukaan air?
Apa saja yang termasuk di dalamnya? Mari kita cari tahu.
1. Refleksi – tampilan pada permukaan air dari ruang yang terletak di atasnya. Poin ini mungkin yang paling penting ketika menggambarkan air yang kurang lebih realistis.
2. Pembiasan – tampilan ruang yang terletak di bawah permukaan air.
3. Nebula/kepadatan air - perubahan warna refraksi tergantung pada kedalaman (semakin dalam letak ruang dibandingkan dengan permukaan air, semakin gelap/berawan tampilannya).
4. Pencahayaan.
5. Ombak juga merupakan poin penting untuk menciptakan permukaan air yang realistis.
Sekarang mari kita cari tahu apa dan bagaimana diimplementasikan dari sudut pandang aplikasi.
1. Pertama, mari kita definisikan apa itu air. Ada beberapa kasus:
- segi empat
- model poli rendah
- model multipoligonal.
Tergantung pada tugas yang ada, salah satu metode implementasi dipilih. Yang paling sederhana adalah permukaan air berbentuk persegi (dua poligon). Gerakan fisik absen. Memengaruhi permukaan gelombang hanya dapat dicapai dengan bantuan kartu khusus perpindahan.
Model poligon rendah - tidak berbeda dengan model sebelumnya, hanya saja permukaannya terdiri dari beberapa poligon yang berosilasi menurut hukum tertentu (dalam kasus paling sederhana, sinusoidal). Hal ini menciptakan tampilan pergerakan gelombang yang “lebih dinamis”.
Model multi-poligon adalah cara yang sangat berbeda. Gelombang adalah susunan primitif yang berubah secara dinamis. Gambaran ombak paling jujur, tetapi juga opsi paling boros sumber daya. Sebaiknya hanya digunakan saat dibutuhkan level tertinggi kualitas.
Opsi pertama atau kedua paling sering digunakan.
2. Refleksi. Pantulan di permukaan air tidak lain hanyalah tekstur. Satu-satunya kesulitan adalah teksturnya terus berubah dan satu tekstur konstan saja tidak cukup (dengan pengecualian refleksi palsu - tekstur langit; metode ini tidak realistis dan sebaiknya digunakan hanya untuk mempercepat rendering, jika diperlukan). Mari kita cari tahu dari mana mendapatkan gambar ini. Pemantulan di permukaan air merupakan gambaran ruang di atas air, namun dipantulkan secara horizontal.
Untuk mendapatkannya Anda hanya perlu “memantulkan” kamera secara relatif terhadap permukaan air.
3. Refraksi. Semuanya serupa, hanya saja gambar pembiasannya adalah gambar yang persis seperti yang dilihat kamera, tidak memperhitungkan air itu sendiri.
4. Pencahayaan. Tidak ada yang aneh, pencahayaannya sederhana, sama seperti pada objek lainnya (agar airnya tidak berwarna monokromatik).
5. Gelombang. Seperti yang telah kami katakan, gelombang dapat digambarkan dengan dua cara (gelombang palsu menggunakan tekstur dan gelombang benar menggunakan geometri).
Jika semuanya jelas dengan geometri (posisi setiap titik berubah tergantung pada hukum fisika atau peta kebisingan), maka yang palsu menjadi sedikit lebih membingungkan, namun pada saat yang sama lebih sederhana.
Gelombang palsu dapat dicitrakan menggunakan dua hal: cahaya dan distorsi refleksi/refraksi. Paling hasil yang berkualitas dicapai melalui membagikan dua cara ini.
Dengan menggunakan peta normal, kami menyalakan air seolah-olah
Memang ada gelombang bantuan.
Dengan bantuan distorsi, kita “mengolesi” refleksi/refraksi di sepanjang struktur gelombang.
Seperti yang telah disebutkan, kami akan menerangi menurut struktur gelombang menggunakan peta normal.
Peta Biasa
Peta normal adalah file grafik yang saluran r/g/bnya berisi koordinat vektor normal, bukan warnanya. Biasanya terlihat seperti ini (peta yang mudah untuk melihat struktur objek, diterangi dengan warna biru-ungu).
Kami akan mendistorsi gambar di permukaan air (baik itu refraksi atau refleksi, atau kombinasi keduanya) menggunakan peta perpindahan koordinat tekstur.
Peta perpindahan koordinat tekstur (peta du/dv)
Peta perpindahan koordinat tekstur (atau peta du/dv) juga merupakan peta dengan struktur suatu objek, tetapi warnanya bisa sangat berbeda (dari abu-abu kecoklatan hingga kuning-merah). Peta seperti itu dalam saluran warna menyimpan jarak dimana koordinat tekstur berubah. Berdasarkan hal ini, formatnya dapat berbeda, baik saluran tunggal (peta dengan gradien hitam-putih) dan multisaluran (misalnya, dua saluran, untuk menyimpan offset sepanjang sumbu x dan sepanjang sumbu y. -sumbu secara terpisah).
Jadi, mari kita gunakan pengetahuan yang kita peroleh untuk membuat rencana kecil untuk menimba air di aplikasi kita. Kita butuh:
1. segi empat;
2. dua tekstur tambahan (peta normal dan peta du/dv);
3. beberapa metode untuk rendering refleksi normal;
4. shader yang akan merender semuanya.
Baiklah, mari kita lanjutkan ke implementasi.
2. Implementasi
#define FVF_XYZ_TEX1 (D3DFVF_XYZ|D3DFVF_TEX1) struktur VERTEX_XYZ_TEX1 ( VERTEX_XYZ_TEX1() ( ); VERTEX_XYZ_TEX1(D3DXVECTOR3 _pos, D3DXVECTOR2 _tex) ( pos = _pos; tex = _tex; ); 3 pos;Buat struktur dan definisi untuk format vertex. Kita hanya akan menyimpan koordinat titik dan koordinat tekstur, tidak memerlukan apa-apa lagi.
kelas CWATER ( pribadi : LPDIRECT3DSURFACE9 psBackBuffer; LPDIRECT3DSURFACE9 psTextureReflect; D3DXMATRIX oldMatView; LPDIRECT3DVERTEXBUFFER9 vb_Water; LPDIRECT3DSURFACE9 pSurfaceZBuffer; LPDIRECT3DSURFACE9 pLastSurfaceZBuffer; // Resolusi tekstur refleksi dan buffer kedalaman tambahan int iTeksturResolusi; mengapung fLebarAir; mengapung fKedalaman Air; // Panjang dan lebar permukaan air publik : LPDIRECT3DTEXTURE9 tex_Reflect; // Tekstur refleksi void PreRenderForReflection(Kamera *Kamera);void PostRenderForReflection(Kamera *Kamera);
CAIR();
~CAIR(); kekosongan Init(float _fWidthWater, float _fDepthWater, float fTexScale); // Inisialisasi batal Draw(); ); Inilah kelas utama untuk air. Di sini kita melihat beberapa variabel yang bahkan tidak disebutkan sebelumnya. Mari kita cari tahu mengapa itu terjadi?
Kita akan menggambar refleksi (dan refraksi jika diinginkan) ke dalam tekstur. Ini berarti pertama-tama kita perlu membuat permukaan untuk tekstur ini. Kami akan menyimpannya di psTextureReflect. Sebelum menambahkan ruang ke dalamnya, Anda perlu menunjukkan ke perangkat bahwa rendering sedang dilakukan pada tekstur dan bukan pada buffer belakang. Tetapi untuk menggambar dengan benar ke buffer belakang nanti, Anda perlu mengingatnya dan mengembalikannya. Kami akan mengingatnya di psBackBuffer.
Ini adalah bagaimana kita mengubah Target Render yang aktif, tetapi untuk menghindari masalah saat menggambar ke dalam tekstur (digambar seolah-olah buffer kedalaman dinonaktifkan atau kliping tidak diatur dengan benar), kita perlu melakukan sesuatu yang lain. Faktanya adalah ukuran buffer belakang sama dengan nilai tertentu (biasanya 1024x768), dan ketika kita menggambar suatu tekstur, kemungkinan besar resolusinya berbeda, yang berarti buffer kedalaman ini tidak cocok untuk itu. Anda hanya dapat menggunakannya jika ukuran buffer lebih besar atau
sama dengan ukuran
tekstur tempat kita menggambar.
Ternyata kita harus membuat dua permukaan lagi (untuk mengingat masa lalu dan menyimpan buffer saat ini). Ini adalah pSurfaceZBuffer dan pLastSurfaceZBuffer.
iTextureResolution – resolusi tekstur untuk refleksi (semakin tinggi, semakin baik refleksinya, tetapi juga metode yang lebih intensif sumber daya).
void CWATER::Init(float _fWidthWater=10.0f, float _fDepthWater=10.0f, float fTexScale=1.0f) ( fWidthWater=_fWidthWater; fDepthWater=_fDepthWater; D3DXCreateTexture(D3DDevice, iTextureResolution, tureResolution, 1, RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &tex_Reflect ); = D3DXVECTOR3(0.0f, 0.0f, 0.0f); p[k].tex = D3DXVECTOR2(0.0f,0.0f); (0.0f, 0, 0.0f); ,0.0f); p[k].pos = D3DXVECTOR3(0.0f, 0, fDepthWater); , fKedalamanAir); p[k].tex = D3DXVECTOR2(fTexScale, fTexScale);++k;
batal *pBuf;vb_Water->Kunci(0, 6 * ukuran(VERTEX_XYZ_TEX1), &pBuf, 0); memcpy(pBuf, p, 6 * ukuran(VERTEX_XYZ_TEX1)); vb_Air->Buka Kunci();
void CWATER::PreRenderForReflection(Kamera *Cam) ( D3DXVECTOR3 CamPos = Cam->GetCamPos(); D3DXVECTOR3 ViewPos = Cam->GetViewPos(); Cam->GetViewMat(&oldMatView); D3DXVECTOR3 h = CamPos; float tmp = CamPos.y -ObjPos.y; h.y = CamPos.y - 2*tmp; float tmpv = ViewPos.y-ObjPos.y; &h,&hv,&D3DXVECTOR3(0.0f, 1.0f, 0.0f)); &MatrixView); SetRenderTarget(0, psTextureReflect); D3DDevice->GetDepthStencilSurface(&pLastSurfaceZBuffer);Namun fungsi ini melakukan sekitar setengah dari seluruh pekerjaan rendering refleksi. Di sini kita mengambil posisi kamera dan posisi yang dilihatnya (posisi pandangan, bukan arah), ingat matriks tampilan saat ini. Selanjutnya ada intrik kecil untuk menggerakkan kamera ke tempat yang tepat (agar pantulan benar, kita gerakkan kamera relatif terhadap permukaan air, bisa dilakukan dengan cara lain, misalnya melalui pantulan. fungsi dari bidang air (dari perpustakaan D3DX), dll, tetapi intinya tetap satu). Kami membentuk dan menginstal matriks baru baik. Selanjutnya, simpan dan atur nilai rendering baru untuk perangkat (permukaan). Dan tentunya kita membersihkan teksturnya.
void CWATER::PostRenderForReflection(Kamera *Cam) ( Cam->SetViewMat(&oldMatView); D3DDevice->SetRenderTarget(0, psBackBuffer); D3DDevice->SetDepthStencilSurface(pLastSurfaceZBuffer); )Setelah pantulan digambar ke dalam tekstur, semuanya harus dikembalikan ke tempatnya, seperti sebelum transformasi kamera.
Sekarang mari kita lihat paruh kedua dari keseluruhan rendering permukaan air - gambar shader.
float statis4x4 Mr= ( 0,5, 0, 0, 0, 0, 0,5, 0, 0, 0, 0, 0,5, 0, 0,5, 0,5, 0,5, 1 );Inilah yang memungkinkan kita menggambar refleksi dengan benar – “matriks refleksi”. Dia adalah dirinya yang sebenarnya dan tidak perlu mengubah apa pun di sini. Konstan, boleh dikatakan.
float f_height_wave; //tinggi gelombang float4x4 WVP; //dunia * tampilan * matriks proyeksi waktu mengapung seragam; //waktu delta - waktu yang berlalu per frame tekstur tex_tex; //tekstur refleksi tekstur tex_bumpMap; //tekstur dengan benjolan tekstur tex_bumpdudv1; //tekstur dengan koefisien pergeseran koordinat float3 vec_light_dir; //vektor arah cahaya float4Posisi Mata; //posisi kamera float4 Warna Terang; //warna terang float4 MatColor; //warna air mengapung4x4 Dunia; //matriks dunia melayang Ambient; //cahaya latar belakangSemuanya jelas di sini, kecuali f_height_wave. Ini adalah koefisien perpindahan koordinat tekstur.
Gelombang "tinggi" = 12
Gelombang "tinggi" = 2
Tidak ada yang aneh juga di sini, prosedur standar.
VS_OUTPUT vs_main(VS_INPUT MASUK) ( VS_OUTPUT KELUAR; //menghitung posisi air pada sistem koordinat layar KELUAR.pos = mul(IN.pos,WVP); //lihat arah OUT.ViewDir = EyePosition - mul(IN.pos,Dunia); KELUAR.pspos = KELUAR.pos;//hitung koordinat tekstur baru OUT.tex2.x = IN.texc.x + sin (waktu)*0.4;//itu. menggeser koordinat tekstur ini OUT.tex2.y = IN.texc.y - cos (waktu)*0,3;//untuk kedua kartu atas dan bawah OUT.tex3.x = IN.texc.x - sin (waktu)*0.4;//searah jarum jam mengelilingi lingkaran
OUT.tex3.y = IN.texc.y + cos (waktu)*0.3;
float4 ps_main(float2 texCoord2: TEXCOORD0, float2 texCoord3: TEXCOORD1, float4 pspos: TEXCOORD2, float3 ViewDir:TEXCOORD3): WARNA ( hasil float4; float3 colorOne = 2.0f * tex2D (bumpMap, texCoord2.xy) - 1. 0f; float3 colorTwo = 2.0f * tex2D (bumpMap, texCoord3.xy*0.5) - 1.0f; float3 normal = normalisasi (colorOne+colorTwo + float3 (0.0,0.5,0.0)); float3 WorldNormal = normalisasi (mul (normal,(float3x3 )World ) ); float3 teksturcoordoffset = 2.0f * tex2D (bumpdudv1,texCoord2.xy) - 1.0f; = normaloffset; diTexProj = mul(pspos,Mr); hasil = tex2Dproj(tex, diTexProj); // float3 Reflect = mencerminkan(-LightDir, WorldNormal); float3 Reflect = mencerminkan (-LightDir, 1.14*I *WorldNormal);float4 Specular = pow (0,5*(1,0+(titik (Reflect, ViewDir))) ,256); hasil = LightColor * MatColor * hasil * I + Specular*LightColor; hasil.a = 1,0; hasil pengembalian; ) Di fragment shader, kami menghitung rata-rata normal (dan Anda dapat melakukannya sesuka Anda, ada banyak opsi). Sebelum normalisasi (ini masih normal), kita sesuaikan normalnya dengan sedikit mencondongkannya ke arah vektor (0,1,0), karena permukaan airnya horizontal. Anda tidak perlu melakukan ini, tetapi hasilnya terlihat lebih baik dengan cara ini (tentu saja, Anda dapat mengedit peta normal, tetapi
metode inijauh lebih mudah). Kemudian kita menerjemahkan normal kita ke dalam koordinat dunia (hanya untuk tujuan penerangan). Kita melakukan hal yang sama seperti yang kita lakukan pada normal untuk mengimbangi koordinat tekstur (texturecoordoffset(2)). Selanjutnya, kalikan dengan koefisien “tinggi gelombang”. Dan kemudian sampai pada bagian yang paling menarik: kita menambahkan offset pada posisi permukaan air
koordinat layar
Sekarang mari kita lihat penggunaan kelas kita. Tambahkan file dengan kelas air:
Catatan. Kelas kecil (EffectClass.h) telah ditambahkan ke kode sumber untuk memuat efeknya.
Kelas tidak dibahas dalam artikel, karena hanya berhubungan secara tidak langsung dengannya.
Buat air dan dua tekstur (peta normal dan peta perpindahan koordinat tekstur).
Fungsi pengambilan air:
void DrawWater() ( tt +=DeltaTime*0.3f; dunia D3DXMATRIX,matView,matProj; D3DXMatrixTranslation (&world, Water.ObjPos.x, Water.ObjPos.y, Water.ObjPos.z); ActiveCamera->GetViewMat(&matView) ; D3DDevice->GetTransform(D3DTS_PROJECTION,&matProj); pActiveEffect.AddToConstMatWVP("WVP",&dunia); pActiveEffect.AddToConstTexture("tex_tex",Water.tex_Reflect); f)); pActiveEffect.AddToConstVec3("MatColor",&D3DXVECTOR3(0.7f,0.7f,0.7f)); -1.0Fffect.AddtoCstVec3 ("VEC_LIGHT_DIR", & DIR); TT); ,2.0f); pActiveEffect.AddToConstTexture("tex_bumpMap",tex1);pActiveEffect.End(); )
tt adalah variabel global yang “tumbuh” dengan setiap frame. Kecepatan pergerakan kamera, kecepatan gelombang, dll bergantung padanya. (itu melambangkan waktu). Segala sesuatu yang terjadi sebelum pActiveEffect.Begin() hanyalah mengisi data untuk shader, jadi tidak perlu berhenti di sini.
PActiveEffect.Begin(); pActiveEffect.Mulai(0); pActiveEffect.Selesai();
pActiveEffect.End();
Kombinasi ini hanya menentukan
teknik aktif
dan bagian.
Water.Draw() menyebabkan air diambil.
Tex1->Rilis();
tex2->Rilis();
Nah, pada fungsi menggambarnya:
DRAW_ALL_SCENE_OBJECTS_EXCEPT_WATER_ Air.PreRenderForReflection(ActiveCamera);
_DRAW_ALL_SCENE_OBJECTS_EXCEPT_WATER_ Air.PostRenderForReflection(ActiveCamera);
DrawWater();
Selanjutnya kita menggambar semua objek, memanggil persiapan untuk menggambar refleksi, menggambar semua objek lagi (jika ada beberapa, jangan lupa mengubah matriks dunia), tetapi ke tekstur, dan mengembalikan nilai yang sebelum menggambar tekstur dengan memanggil PostRenderForReflection . Terakhir, kita menggambar air itu sendiri dengan pantulan di atasnya (panggil fungsi DrawWater).
Itu saja!
4. Kode sumber
Di sini Anda dapat mengunduh contoh artikel dengan kode sumber.
Saya harap semuanya berhasil untuk Anda! Di dalam kerak bumi, peran air sangatlah luar biasa. V.I.Vernadsky
Hal ini juga dicatat bahwa Belahan bumi utara Planet ini pada dasarnya merupakan “benua” (39,4 persen daratan), dan bagian selatan “samudera” (19 persen). Sebagian besar permukaan benua terlihat jika Anda berada di atas muara sungai. Loire: Di sekitar "kutub benua" daratan mencakup 47 persen wilayah yang terlihat. “Kutub samudera” akan berada di dekat Selandia Baru (air menutupi 89 persen permukaannya). Cakupan lega bumi signifikan: dari 8.848 meter - puncak Chomolungma hingga 11.020 meter - dasar Palung Mariana. Namun jika dibandingkan dengan radius geoid, nilai ini tidak signifikan: elevasi permukaan positif hanya 11/10.000, dan negatif 17/10.000. Kedalaman rata-rata lautan 6/10.000, tinggi rata-rata daratan adalah sekitar 1/10.000. Oleh karena itu, perbedaan relief bumi pada bola bumi dengan radius 10 meter akan berkisar antara 1 hingga 17 milimeter relatif terhadap permukaan laut. Oleh karena itu kesimpulannya: air di bumi sangat sedikit, meskipun menurut berbagai perkiraan volume air permukaan adalah 1380-1450 juta kilometer kubik. Mungkin jumlah air yang masuk sama perut bumi
. Menurut S.M. Grigoriev, dangkal dan Air tanah berada dalam keseimbangan dinamis sampai ke dasar permukaan Mohorovicic, dan air bertindak sebagai pendingin aktif, zat pengangkut pelarut. sedikit menonjol adalah kumpulan benua yang dibedah dengan lemah dengan rangkaian pegunungan yang sempit. Beberapa puluh ribu tahun yang lalu (pada masa Pleistosen), permukaan Laut Dunia lebih rendah 100 meter. Dan, meskipun hamparan laut yang luas merupakan daratan kering, bentuk benua tidak jauh berbeda dari sekarang. Kontur benua tidak akan banyak berubah meskipun permukaan Laut Dunia turun 2-3 ribu meter. M.V.Muratov (1975) menganggap ini sebagai ciri dasar cekungan samudera - permukaan bumi yang sebenarnya, tidak bergantung pada besarnya permukaan air. Perbedaan utamanya adalah struktur yang berbeda ruang benua dan samudera sebagai antipode geologis, yang dijelaskan oleh faktor planet yang telah beroperasi selama lebih dari 4 miliar tahun.
Ahli kelautan H. Wright menulis pada tahun 1961: “... hamparan luas air yang kita lihat saat ini telah bertambah setetes demi setetes sepanjang kehidupan planet kita karena air merembes dari perut bumi.” Kemungkinan besar, munculnya faktor eksternal cangkang air mengacu pada era yang jauh dari zaman kita selama 3 atau bahkan 3,5 miliar tahun. Dan, mungkin, garis besar benua tidak banyak berubah selama ini. Tentu saja, lautan dalam muncul relatif baru. Dan proses salinisasi Samudra Dunia merupakan faktor geologis yang kuat, karena air larut lebih intensif batu pemeran utama. E. A. Dolginov (1978) mencatat hal itu kebanyakan teluk laut terletak di zona dan wilayah yang terdiri dari paus hitam, gneis, dan batuan beku dengan komposisi dasar, dan tanjung serta semenanjung benua dibangun dari granitoid dan granit-gneis yang lebih stabil. Hal ini terutama terlihat jelas di zona fyord, yang biasanya terbentuk di lokasi tanggul dengan komposisi dasar.