Mayavi: BUG: Opacity streamlines berinteraksi dengan pemesanan visual modul visualisasi

Dibuat pada 6 Mar 2017  ·  10Komentar  ·  Sumber: enthought/mayavi

Mengubah opacity streamline ke apa pun selain nilai defaultnya (1.0) membawa streamline ke depan pemandangan bahkan ketika ada objek lain yang harus mengaburkannya.

Misalnya, saya merujuk Anda ke contoh garis medan magnet yang diberikan di sini: http://docs.enthought.com/mayavi/mayavi/auto/example_magnetic_field_lines.html.

Menjalankan kode seperti itu memberikan adegan berikut:
test_bug_1

Namun, jika kita mengubah opacity dari fieldlines sehingga berbeda dengan nilai default 1.0 (baik dengan menambahkan field_lines.actor.property.opacity = 0.99 atau secara manual menyesuaikan opacity di pipa Mayavi) kita mendapatkan sesuatu seperti adegan berikut:
test_bug_2
Garis-garis bidang sekarang berada di depan pemandangan, namun isokontur harus tetap tidak jelas seperti pada gambar sebelumnya.

Komentar yang paling membantu

Dengan versi VTK terbaru, ini berfungsi dengan baik untuk saya:

from mayavi import mlab
f = mlab.figure()
mlab.points3d(0,0,1,color=(.8,.8,.8),resolution=100,opacity=.99)
mlab.points3d(0,0,0,color=(.8,.8,.8),resolution=100,opacity=.99)
f.scene.renderer.use_depth_peeling = True

Juga, ada f.scene.renderer.maximum_number_of_peels yang berpotensi Anda gunakan. Ini adalah 4 secara default tetapi Anda dapat mengaturnya ke nol tanpa batas meskipun ini akan memperlambat rendering. Anda bisa bermain-main dengan ini.

Bolehkah saya menutup masalah ini? Saya pikir ini tampaknya memperbaiki banyak masalah yang pernah saya lihat sebelumnya.

Semua 10 komentar

Apakah ini masalah yang akan diperbaiki dalam waktu dekat? Jika tidak, saya akan menghargai mengetahui sehingga saya dapat menemukan cara lain untuk mengatasi masalah saya. Terima kasih

Ini tampaknya berlaku untuk objek lain juga. Saya menggunakan contour3d dengan points3d dan menyetel opacity poin ke apa pun selain 1.0 menyebabkan permukaan tidak mengaburkannya lagi.

Saya melihat apa yang saya pikir adalah masalah yang sama dengan dua objek point3d. Berikut adalah beberapa contoh yang menunjukkan bagaimana tampilan 2 bola yang dirender bergantung pada urutan rendering jika opacity diatur ke .99, tetapi tidak jika opacity disetel ke 1.

mlab.figure()
mlab.points3d(0,0,1,color=(.8,.8,.8),resolution=100,opacity=.99)
mlab.points3d(0,0,0,color=(.8,.8,.8),resolution=100,opacity=.99)

2

mlab.figure()
mlab.points3d(0,0,0,color=(.8,.8,.8),resolution=100,opacity=.99)
mlab.points3d(0,0,1,color=(.8,.8,.8),resolution=100,opacity=.99)

4

mlab.figure()
mlab.points3d(0,0,1,color=(.8,.8,.8),resolution=100)
mlab.points3d(0,0,0,color=(.8,.8,.8),resolution=100)

1

mlab.figure()
mlab.points3d(0,0,0,color=(.8,.8,.8),resolution=100)
mlab.points3d(0,0,1,color=(.8,.8,.8),resolution=100)

3

Masalahnya tampaknya tidak bergantung pada pilihan lampu atau light_manager ('vtk' atau 'raymond').

Saya kira satu solusi mungkin pertama-tama menyortir objek yang akan dirender berdasarkan kedalamannya di sepanjang sumbu ke dalam atau ke luar layar.

Anda mungkin perlu mengaktifkan opsi pemusnahan wajah depan. Coba ini:

mlab.figure()
g1 = mlab.points3d(0,0,1,color=(.8,.8,.8),resolution=100,opacity=.99)
g2 = mlab.points3d(0,0,0,color=(.8,.8,.8),resolution=100,opacity=.99)
g1.actor.property.frontface_culling = True
g2.actor.property.frontface_culling = True

Terima kasih Prabhu --- Saya pikir frontface_culling meningkatkan visual, tetapi urutan rendering masih merupakan faktor hanya dalam kasus semi-transparan.

Saya mereproduksi pengamatan itu dalam vtk saja (ini masalah tingkat yang lebih rendah).

Setelah membaca lebih lanjut, saya pikir ada satu atau dua solusi yang dibangun ke dalam vtk, tetapi solusi lain mungkin adalah mengurutkan objek sebelum rendering.

Berikut adalah beberapa tautan tentang vtk yang tampaknya relevan:
https://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/CorrectlyRenderingTranslucentGeometry
https://www.vtk.org/Wiki/VTK/Depth_Peeling

Dan beberapa tautan yang saya gunakan untuk mereproduksi kotak bola:
https://lorensen.github.io/VTKExamples/site/Python/GeometricObjects/Sphere/
https://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/Opacity

Terima kasih telah menambahkan diskusi dan tautan yang bermanfaat. Saya tidak terlalu berpengetahuan tentang VTK atau pengelupasan mendalam, tetapi solusi sederhana yang saya temukan yang berhasil untuk contoh asli saya dan proyek yang sedang saya kerjakan adalah memasukkan ini:

scene = mlab.gcf().scene
scene.renderer.set(use_depth_peeling=True)

yang saya adaptasi dari pertanyaan ini tentang masalah serupa ..

Terima kasih atas bantuan Matt dan Prabhu.

Saya mencoba depth_peeling, yang untuk kasus penggunaan saya yang sebenarnya lebih membantu daripada untuk contoh 2 bola ini. Tapi dibandingkan dengan menata ulang bola, ujung-ujungnya tampak kurang ... anti-alias saya pikir mungkin istilahnya?

f=mlab.figure()
f.scene.renderer.use_depth_peeling=1
g0=mlab.points3d(0,0,1,color=(.8,.8,.8),resolution=100,opacity=.99)
g1=mlab.points3d(0,0,0,color=(.8,.8,.8),resolution=100,opacity=.99)  
g0.actor.property.frontface_culling = True
g1.actor.property.frontface_culling = True

image

Untuk plot 3d saya, saya memiliki daftar poin dan daftar warna. Jadi, alih-alih mengupas secara mendalam, saya menggunakan fungsi ini untuk menyusun ulang daftar tersebut bersama-sama sebelum merencanakan:

def orderTransparentRender(cl,c):
    '''Opacity < 1 rendering results in appearance of spheres incorrectly in front of or behind other spheres
    One solution is setting f.scene.renderer.use_depth_peeling=1, however this seemed to result in less anti-aliased edges?
    This function sorts the cluster list cl and color list c together.
    '''
    cz=zip(cl,c)
    cz=sorted(cz,key=lambda x:-1*x[0][2])
    cz=zip(*cz)
    return cz[0],cz[1]

Kalau tidak, panggilan yang diurutkan bisa menjadi semua yang diperlukan. Saya mempelajarinya dari python docs: https://wiki.python.org/moin/HowTo/Sorting. Saya belajar tentang zip python di sini: https://stackoverflow.com/questions/1663807/how-can-i-iterate-through-two-lists-in-parallel

Dengan versi VTK terbaru, ini berfungsi dengan baik untuk saya:

from mayavi import mlab
f = mlab.figure()
mlab.points3d(0,0,1,color=(.8,.8,.8),resolution=100,opacity=.99)
mlab.points3d(0,0,0,color=(.8,.8,.8),resolution=100,opacity=.99)
f.scene.renderer.use_depth_peeling = True

Juga, ada f.scene.renderer.maximum_number_of_peels yang berpotensi Anda gunakan. Ini adalah 4 secara default tetapi Anda dapat mengaturnya ke nol tanpa batas meskipun ini akan memperlambat rendering. Anda bisa bermain-main dengan ini.

Bolehkah saya menutup masalah ini? Saya pikir ini tampaknya memperbaiki banyak masalah yang pernah saya lihat sebelumnya.

Terima kasih. Saya akan dapat bekerja dengan ini. Anda dapat menutup masalah ini.

Matthew Allcock | peneliti PhD
Universitas Sheffield | Sekolah Matematika dan Statistik
www.matthewallcock.co.uk

Pada hari Minggu, 26 Agustus 2018, 21:55 Prabhu Ramachandran, [email protected]
menulis:

Dengan versi VTK terbaru, ini berfungsi dengan baik untuk saya:

dari mayavi import mlab
f = mlab.figure()
mlab.points3d(0,0,1,color=(.8,.8,.8),resolusi=100,opacity=.99)
mlab.points3d(0,0,0,color=(.8,.8,.8),resolusi=100,opacity=.99)
f.scene.renderer.use_depth_peeling = Benar

Juga, ada f.scene.renderer.maximum_number_of_peels yang Anda bisa
berpotensi digunakan. Ini adalah 4 secara default tetapi Anda dapat mengaturnya ke nol untuk tidak
batas meskipun ini akan memperlambat rendering. Anda bisa bermain-main dengan ini.

Bolehkah saya menutup masalah ini? Saya pikir ini tampaknya memperbaiki banyak masalah yang saya miliki
terlihat sebelumnya.


Anda menerima ini karena Anda yang menulis utas.
Balas email ini secara langsung, lihat di GitHub
https://github.com/enthought/mayavi/issues/491#issuecomment-416071420 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AP4RUC8AYAnDAV6-wE88hHw5cPP-x01gks5uUwtGgaJpZM4MT7Rp
.

Terima kasih banyak.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

rpep picture rpep  ·  7Komentar

thoth291 picture thoth291  ·  10Komentar

stefanoborini picture stefanoborini  ·  11Komentar

GaelVaroquaux picture GaelVaroquaux  ·  13Komentar

rahulporuri picture rahulporuri  ·  3Komentar