Mayavi: 前景オブジェクトの順序が正しくない(オブジェクトの可視性が間違っている)

作成日 2018年06月21日  ·  27コメント  ·  ソース: enthought/mayavi

私は3Dvizに習熟しているとは言えず、これがマヤビの問題であるかどうかはわかりません(間違った木を樹皮で覆った場合はお詫びします)が、次の予期しない動作が見られます。

環境:

conda、anaconda 3、condaではなくpip install mayavi vtk pyqt5を使用してmayaviをインストールしました(#652と同様の問題にぶつかった後)

Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Linux
Name: mayavi
Version: 4.6.0
Name: vtk
Version: 8.1.0
Location: /home/xxxyyy/anaconda3/envs/ELA/lib/python3.6/site-packages

再現

# example from https://stackoverflow.com/a/10740780
from mayavi import mlab
import numpy as np

# Generate some random hypocenters
x, y, z, mag = np.random.random((4, 500))

# Make a curved well bore...
wellx, welly, wellz = 3 * [np.linspace(0, 1.5, 10)]
wellz =  wellz**2

# Plot the hypocenters, colored and scaled by magnitude
mlab.points3d(x, y, z, mag)

# Plot the wellbore
mlab.plot3d(wellx, welly, wellz, tube_radius=0.1)

mlab.show()

色付きのボールが灰色のパイプを囲み、その一部を下に隠します。
別のOS-Windows上の以前のバージョンのmayavi(mayaviバージョンTBC、おそらく4.5)で期待される動作が得られます

incorrect_foreground

最も参考になるコメント

私は過去数週間、Python3を使用して同じ問題(誤った深度順序レンダリング)に苦しんでおり、ここでも私の経験を共有したいと思いました(2019-04-15現在)。

同じページにいるので、これが私が見ているバージョンです:

  • マヤビ:4.6.2
  • 特性:5.0.0
  • トライツイ:6.0.0
  • vtk:8.1.2
  • 想定:4.7.1
  • pyface:6.0.0
  • PyQt5:5.12.1
  • PyQt4:4.11.4(_from dpkg_)
  • PySide:1.2.2(_from dpkg_)
  • PySide2:5.12.2

Mayavi / VTK / traitsは、「wx」ツールキットまたは「qt4」ツールキットのいずれかを使用できます。 'qt4'ツールキットには、QTAPIを指定するオプションがあります。 選択肢は、「pyqt」、「pyqt5」、「pyside」、および「pyside2」です。 これらは、環境変数ETS_TOOLKIT(wxまたはqt4に設定)およびQT_API(pyqt、pyqt5、pyside、またはpyside2に設定。ETS_TOOLKITがqt4に設定されている場合にのみ適用可能)で指定されます。

Mint 18.3(およびおそらくUbuntu 16.04バリアント)では、公式のPython3は3.5.2です。 一部のモジュールはapt / dpkgで利用できますが、インストールするにはpipを使用する必要があるモジュールもあります。 wxPythonをPython3にインストールできませんでした。 Qtを使用すると、結果は異なります。

  • ETS_TOOLKIT = qt4およびQT_API = pyqt:正しくレンダリングされます
  • ETS_TOOLKIT = qt4およびQT_API = pyqt5:間違った順序でレンダリングします
  • ETS_TOOLKIT = qt4およびQT_API = pyside:正しくレンダリングされます
  • ETS_TOOLKIT = qt4およびQT_API = pyside2:間違った順序でレンダリングします

Mint 19.1(およびおそらくすべてのUbuntu 18.04バリアント)では、結果は同様です。 Python3のバージョンは3.6.7です。 ここでpip3を使用してwxPython(4.0.1)をインストールできたことを除いて、すべてのモジュールは以前と同じです。 この場合、ETS_TOOLKIT = wxを設定すると、正しい深度の順序が得られます。 qt4ツールキットに関しては、結果はMint 18.3の結果と同じでした(つまり、pyqtとpysideは正しくレンダリングされましたが、pyqt5とpyside2は正しくレンダリングされませんでした)。

PySide2をソースからコンパイルしてみたところ、コンパイルすることができました。 ただし、レンダリングはまだ間違っています。

また、pyenvを使用してさまざまなバージョンのPython3(特に、3.5.2と3.7.3)をテストしてみました。 どちらの場合も、公式のPySideコードが3.4以降のPythonバージョンをサポートしていないことを除いて、pip3を介して必要なモジュールをインストールできます。 PyQt5と同様に、PySide2が利用可能です。 これらはどちらも正しく機能しません。 wxPythonをコンパイルできませんでした。

この時点で、それはVTKの問題ではなく、QTの問題であるかどうか疑問に思っています(私は今wxPythonをあきらめています)。 しかし、不思議なことに、私の仕事用ラップトップ(Mint 18.3を使用)では、pyenvを使用してPython 3.7.3を実行していました。この場合、深度の順序正しくレンダリングされました-PyQt5またはPySide2のいずれかを使用しました(自宅のラップトップでは両方QT_APIが間違った深度順序を指定しました)。 では、違いは何でしたか? 私の知る限り、唯一の違いはOpenGL / GLXドライバーでした。自宅のラップトップはSGIドライバーを実行し(glxinfoの報告による)、職場のラップトップはNVIDIAドライバーを使用しています。

最後に、VirtualBox(Mint 19.1 with xfce)を使用していくつかのテストを実行してみました。 私はまださまざまな組み合わせを試していますが、これまでのところ結果は同じです。 (glxinfoはOpenGL / GLXドライバーをSGIとして報告します)。

全てのコメント27件

'globe'の周りに配置されたplot3dポイントで同じ問題が発生しているようです。

    sphere = mlab.points3d(0, 0, 0, scale_mode='none',
                           scale_factor=2,
                           # color=(0.67, 0.77, 0.93),
                           color=ocean_blue,
                           resolution=50,
                           opacity=.85,
                           name='Earth')
    #
    # These parameters, as well as the color, where tweaked through the GUI,
    # with the record mode to produce lines of code usable in a script.
    sphere.actor.property.specular = 0.45
    sphere.actor.property.specular_power = 5
    # Backface culling is necessary for more a beautiful transparent
    # rendering.
    sphere.actor.property.backface_culling = True

pyqt / pysideバックエンドの+ 1、mayavi @ 4.6.0および[email protected]を使用したDebianストレッチでのテスト

これはVTKの一般的な問題であり、#574および#491で以前に見られました。 これを調べたり、解決策を見つけたりする時間がありませんでした。

@ jmp75同じ問題が発生しました。どのバージョンのmayaviが機能したかを確認していただけますか?

@lhvalentini Windows10でAnaconda2(python 2.7.15)を使用し、パッケージmayavi4.5.0およびvtk6.3.0を使用してこれを動作させています。

皆さん、これが不透明度の問題である場合、それは別の問題です。

OPコードを試しましたが、正しく機能します。 これがOS固有の問題である場合は、VTK8.1.1とマスターのMayaviを搭載したMacOSマシンで間違いなく適切に見えるため、ドライバーの問題である可能性があります。 これを修正するためにMayaviで何かが変更されたとは思えません。

@prabhuramachandran (a)根本原因を

RHEL 7、PyQt5、およびMayavi 4.6.2で問題を再現できます(上記の色付きのボールの例を使用)。 PyQt5をアンインストールしてwxPythonをインストールすることで、正しく動作させることができました。 残念ながら、PyQt5が必要です。 私が使用している2台のマシンの1つで、VirtualGL(RHEL 7、PyQt5、およびMayavi 4.6.2を引き続き使用)で実行でき、問題は解決します。 ただし、他のマシン(本番マシン)では、VirtualGLによってMayaviがクラッシュします。

PyQt5を使用するときにこれを修正する方法に関する提案はありますか?

私がPyQt5で問題を再現したが、wxPythonでは再現しなかったという事実は、何か手がかりを提供しますか?

Linux Mint 18、64ビット(Anaconda、Python 3.6、Qt 5.6.2、pyqt 5.6.0、VTK 8.1.1、Mayavi 4.6.2、conda-forgeからインストール)でも同様の問題が発生します。

バニラmlab.test_points3d()実行しただけの場合、オブジェクトの順序は正しくありません。

test
test2
前述の設定scene.renderer.use_depth_peelingf.scene.renderer.maximum_number_of_peelsを試してみましたが、成功しませんでした。
理由は何でしょうか?

アップデート。 この問題は、LinuxでのQt5の問題のように見えます。 私はこれをubuntuマシンで見ることができますが、OSXでは見ることができません。Windowsについてはよくわかりません。 Qt4バックエンドでは表示されません。 したがって、Qt5とQVTKRenderWindowInteractorを使用すると、レンダリングがどういうわけか混乱しているように見えます。 私はこの問題をVTKの人々にも上流に報告しました。 問題が何であるかわからない。

ここでも同じ問題があります。 Qt4に戻り、すべて正常に動作します。

LinuxでQt4(ipythonの%gui qt4でアクティブ化)を使用すると、この問題が発生します。 多分それは私がインテルグラフィックスを持っているからです(既知の問題ですでに言及されている何かに関連しています)。

Qt4もインストールする必要がありました。 それ以前は、オプションに「qt4」を入力するだけではエラーメッセージは表示されませんでしたが、代わりにQt5を使用していました。

わかりました、qt4が私の側にインストールされていないことに気づいていません@ ronceray 、エラーは発生しません)...

PyQt 4.12.3は実行されませんでしたが、バージョン4.12.1で動作させることができました。

PyQt5よりもはるかに遅いですが、この前景の問題はありません...別のグラフィックカードをセットアップする必要がありません!

Fedora 27-> Fedora 29からアップグレードし、最新のNVIDIAグラフィックスドライバー

私は過去数週間、Python3を使用して同じ問題(誤った深度順序レンダリング)に苦しんでおり、ここでも私の経験を共有したいと思いました(2019-04-15現在)。

同じページにいるので、これが私が見ているバージョンです:

  • マヤビ:4.6.2
  • 特性:5.0.0
  • トライツイ:6.0.0
  • vtk:8.1.2
  • 想定:4.7.1
  • pyface:6.0.0
  • PyQt5:5.12.1
  • PyQt4:4.11.4(_from dpkg_)
  • PySide:1.2.2(_from dpkg_)
  • PySide2:5.12.2

Mayavi / VTK / traitsは、「wx」ツールキットまたは「qt4」ツールキットのいずれかを使用できます。 'qt4'ツールキットには、QTAPIを指定するオプションがあります。 選択肢は、「pyqt」、「pyqt5」、「pyside」、および「pyside2」です。 これらは、環境変数ETS_TOOLKIT(wxまたはqt4に設定)およびQT_API(pyqt、pyqt5、pyside、またはpyside2に設定。ETS_TOOLKITがqt4に設定されている場合にのみ適用可能)で指定されます。

Mint 18.3(およびおそらくUbuntu 16.04バリアント)では、公式のPython3は3.5.2です。 一部のモジュールはapt / dpkgで利用できますが、インストールするにはpipを使用する必要があるモジュールもあります。 wxPythonをPython3にインストールできませんでした。 Qtを使用すると、結果は異なります。

  • ETS_TOOLKIT = qt4およびQT_API = pyqt:正しくレンダリングされます
  • ETS_TOOLKIT = qt4およびQT_API = pyqt5:間違った順序でレンダリングします
  • ETS_TOOLKIT = qt4およびQT_API = pyside:正しくレンダリングされます
  • ETS_TOOLKIT = qt4およびQT_API = pyside2:間違った順序でレンダリングします

Mint 19.1(およびおそらくすべてのUbuntu 18.04バリアント)では、結果は同様です。 Python3のバージョンは3.6.7です。 ここでpip3を使用してwxPython(4.0.1)をインストールできたことを除いて、すべてのモジュールは以前と同じです。 この場合、ETS_TOOLKIT = wxを設定すると、正しい深度の順序が得られます。 qt4ツールキットに関しては、結果はMint 18.3の結果と同じでした(つまり、pyqtとpysideは正しくレンダリングされましたが、pyqt5とpyside2は正しくレンダリングされませんでした)。

PySide2をソースからコンパイルしてみたところ、コンパイルすることができました。 ただし、レンダリングはまだ間違っています。

また、pyenvを使用してさまざまなバージョンのPython3(特に、3.5.2と3.7.3)をテストしてみました。 どちらの場合も、公式のPySideコードが3.4以降のPythonバージョンをサポートしていないことを除いて、pip3を介して必要なモジュールをインストールできます。 PyQt5と同様に、PySide2が利用可能です。 これらはどちらも正しく機能しません。 wxPythonをコンパイルできませんでした。

この時点で、それはVTKの問題ではなく、QTの問題であるかどうか疑問に思っています(私は今wxPythonをあきらめています)。 しかし、不思議なことに、私の仕事用ラップトップ(Mint 18.3を使用)では、pyenvを使用してPython 3.7.3を実行していました。この場合、深度の順序正しくレンダリングされました-PyQt5またはPySide2のいずれかを使用しました(自宅のラップトップでは両方QT_APIが間違った深度順序を指定しました)。 では、違いは何でしたか? 私の知る限り、唯一の違いはOpenGL / GLXドライバーでした。自宅のラップトップはSGIドライバーを実行し(glxinfoの報告による)、職場のラップトップはNVIDIAドライバーを使用しています。

最後に、VirtualBox(Mint 19.1 with xfce)を使用していくつかのテストを実行してみました。 私はまださまざまな組み合わせを試していますが、これまでのところ結果は同じです。 (glxinfoはOpenGL / GLXドライバーをSGIとして報告します)。

VTKMLのこのスレッドは同じ問題に言及しているようです。 残念ながら、それは答えられないままにされました...

思い切って、Debianラップトップで報告する価値のある何かを試しました。 これは、Debianwikiで説明されているNVIDIAOptimusラップトップです。 基本的に、これらのシステムにはNVIDIAとIntelの2つのグラフィックカードがあります。

短編小説:私が投稿した元のテストスクリプトと同じである他のすべてのものは、Intelカードでは正しくレンダリングされが、NVIDIAハードウェアでは

環境(関連パッケージ):

envisage                  4.7.2                    pypi_0    pypi
mayavi                    4.6.2                    pypi_0    pypi
pyface                    6.0.0                    pypi_0    pypi
pygments                  2.3.1                    pypi_0    pypi
pyqt5                     5.12.2                   pypi_0    pypi
pyqt5-sip                 4.19.17                  pypi_0    pypi
python                    3.6.8                h0371630_0  
traits                    5.1.1                    pypi_0    pypi
traitsui                  6.0.0                    pypi_0    pypi
vtk                       8.1.2                    pypi_0    pypi

optirun使用方法については、Debianwikiを参照してください。 optirun python ~/src/tmp/qtbug.pyは正しく機能しました。 サンプルアプリを使用して、 optirunある場合とない場合の違いを説明するには、次のようにします。

glxgears -infoは戻ります

GL_RENDERER   = Mesa DRI Intel(R) HD Graphics 630 (Kaby Lake GT2) 
GL_VERSION    = 3.0 Mesa 18.3.4
GL_VENDOR     = Intel Open Source Technology Center

一方、 optirun glxgears -info

GL_RENDERER   = Quadro M1200/PCIe/SSE2
GL_VERSION    = 4.6.0 NVIDIA 418.56
GL_VENDOR     = NVIDIA Corporation

別の確認を追加するために、ここDell Precision5520上のArchLinuxで、問題がIntelチップで実行されているのがわかりますが、 optirun経由のnvidiaカードでは実行されていません。 これは、Python 3.7、Qt5、およびmayaviがすべてArchの公式リポジトリを介してインストールされている場合です。

同じ問題、PyQt5バックエンドでmayaviを実行すると、DebianStretchでMesa / SGIドライバーを使用してレンダリング順序が正しくなくなりますが、 ETS_TOOLKIT=wx環境変数セットで機能します。

PyQtの代わりにwxPythonを使用してこれを解決しました。

このスレッドは、問題を解決する上で非常に貴重でした。コメントに感謝します。

同じ問題で、wxで動作させることができなかったので、python-pyqt4をインストールし、 ETS_TOOLKIT=qt4QT_API=pyqtと、これで解決しました。

上記の構成の1つについて別の確認を追加したいと思います。 私はOSとしてUbuntu18.04を搭載したLinuxマシンで作業しています。 私のシステムにはIntelグラフィックカードがあります。 私はanaconda3を使用して、荷電粒子の動きをアニメーション化しています。 最終結果は、その中心を通る線を持つらせんになるはずです。 mayavi 4.6.2、vtk 8.1.2、pyqt5.9.2を使用するPython3.6.8環境では、次のようになります。
snapshot
赤い線がらせんの外側にあるように見えることに注意してください。これは間違っています。

この問題を修正するために、anaconda3で新しいPython 3.5環境を作成し、次の順序でパッケージをインストールしました。

conda-forgeのpyqt4.11.4
pypiからのvtk8.1.2
conda-forgeのmayavi4.6.2

を使用してシェルに関連する変数を設定します
エクスポートETS_TOOLKIT = qt4
QT_API = pyqtをエクスポートします

以下に示すように、コードを実行して正しい図を取得しました
snapshot_right
それを理解してくれた上記のすべての賢い人々に感謝します。 乾杯!

今日の初めに(上記の色付きのボールの例を使用して)問題を再現した後、次のようなコンダ環境で問題を解決することができました。

1)Python 3.8.5
2)VTK 9.0.1(whlファイルを使用してインストール)
3)pyqt5
4)マヤビの最新の「最先端」バージョン(4.7.3.dev0)。

それで、おそらくVTK 9はこの問題を修正しますか?

pyqt5とMayavi4.7.2(conda-forgeから)を使用したVTK9.0.1でこの問題が修正されていることを確認できます。

はい、確かに、この問題はVTK-9.0.1と最新のMayaviで解決されていることを確認できますが、VTKが修正の元となったようです。 以前は失敗していたLinuxマシンでテストしました。 これは素晴らしい。 報告していただきありがとうございます。

このページは役に立ちましたか?
0 / 5 - 0 評価