Mayavi: Неправильный порядок в объектах переднего плана (неправильная видимость объекта)

Созданный на 21 июн. 2018  ·  27Комментарии  ·  Источник: enthought/mayavi

Я далек от опыта работы с 3D-визуализацией и не уверен, что это проблема Mayavi как таковая (извиняюсь, если я лаю не на то дерево), но я наблюдаю следующее неожиданное поведение:

Среда:

conda, anaconda 3, установила mayavi с использованием pip install mayavi vtk pyqt5 а не conda (после столкновения с проблемой, аналогичной # 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()

Цветные шары должны окружать серую трубу, скрывая ее части внизу.
Я получаю ожидаемое поведение с предыдущей версией mayavi в другой ОС - Windows (версия mayavi TBC, вероятно, 4.5)

incorrect_foreground

Самый полезный комментарий

Я боролся с той же проблемой (неправильный рендеринг глубины), используя Python3 в течение последних нескольких недель, и подумал, что поделился бы своим опытом и здесь (по состоянию на 2019-04-15).

Мы находимся на одной странице, вот версии, на которые я смотрю:

  • mayavi: 4.6.2
  • черты: 5.0.0
  • traitsui: 6.0.0
  • vtk: 8.1.2
  • предусмотреть: 4.7.1
  • pyface: 6.0.0
  • PyQt5: 5.12.1
  • PyQt4: 4.11.4 (_из dpkg_)
  • PySide: 1.2.2 (_от dpkg_)
  • PySide2: 5.12.2

Mayavi / VTK / traits может использовать набор инструментов wx или qt4. С помощью инструментария 'qt4' есть дополнительная возможность указать QT API; варианты: 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; все модули такие же, как и раньше, за исключением того, что здесь мне удалось установить wxPython (4.0.1) с помощью pip3. В этом случае установка ETS_TOOLKIT = wx дает правильный порядок глубины. Что касается инструментария qt4, результаты были такими же, как и результаты Mint 18.3 (т.е. pyqt и pyside отображены правильно; pyqt5 и pyside2 - нет).

Я попытался скомпилировать PySide2 из исходного кода и смог его скомпилировать; однако рендеринг все еще неправильный.

Я также пробовал использовать pyenv для тестирования различных версий Python3 (в частности, 3.5.2 и 3.7.3). В обоих случаях я мог установить необходимые модули через pip3, за исключением того, что официальный код PySide не поддерживает версии Python выше 3.4. PySide2 доступен, как и PyQt5; ни один из них не работает правильно. Мне не удалось скомпилировать wxPython.

На данный момент мне интересно, не проблема ли это VTK, а проблема QT (сейчас я отказался от wxPython). Но как ни странно, на моем рабочем ноутбуке (с мятой 18,3), с pyenv я имел Python 3.7.3 работает, и в этом случае порядок глубина была оказана правильно - либо PyQt5 или PySide2 ( в то время как на моем домашнем ноутбуке как из QT_API дал неправильный порядок глубины). Так в чем разница? Насколько я могу судить, единственным отличием был драйвер OpenGL / GLX: на моих домашних ноутбуках используется драйвер SGI (как сообщает glxinfo), а на моем рабочем ноутбуке используется драйвер NVIDIA.

Наконец, я также попытался запустить пару тестов с VirtualBox (Mint 19.1 с xfce). Я все еще пробую разные комбинации, но пока результаты те же. (Glxinfo сообщает о драйвере OpenGL / GLX как о SGI).

Все 27 Комментарий

Кажется, у меня такая же проблема с точками 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

+1 для бэкэнда pyqt / pyside, тестирование на Debian stretch с [email protected] и [email protected]

Похоже, что это общая проблема VTK, и она уже наблюдалась ранее в # 574 и # 491. У меня не было времени изучить это или найти решение.

@ jmp75 у меня была такая же

@lhvalentini Я использую Anaconda 2 (python 2.7.15) в Windows 10 с пакетами mayavi 4.5.0 и vtk 6.3.0.

Ребята, если это проблема с непрозрачностью, это другая проблема.

Я попробовал код OPs, и он у меня работает правильно. Если это проблема, связанная с ОС, это, вероятно, проблема с вашими драйверами, поскольку она определенно подходит мне на моем компьютере Mac OS с VTK 8.1.1 и Mayavi от мастера. Я сомневаюсь, что в Mayavi что-то изменилось, чтобы это исправить.

@prabhuramachandran Я

Я могу воспроизвести проблему (используя приведенный выше пример цветных шариков) на RHEL 7, PyQt5 и Mayavi 4.6.2. Мне удалось заставить его работать правильно, удалив PyQt5 и установив wxPython. К сожалению, мне нужен PyQt5. На одной из двух машин, с которыми я работаю, я могу запустить ее под 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_peeling и f.scene.renderer.maximum_number_of_peels , но безуспешно.
Есть идеи, в чем может быть причина?

Обновление. Эта проблема выглядит как проблема Qt5 в Linux. Я могу видеть это на своих машинах с ubuntu, но не на OS X. Не уверен в окнах. Я не вижу этого с бэкэндом Qt4. Похоже, что при использовании Qt5 и QVTKRenderWindowInteractor каким-то образом происходит сбой рендеринга. Я также сообщил об этой проблеме ребятам из VTK. Не уверен, в чем проблема.

Здесь та же проблема. Я вернулся на Qt4, и все работает нормально.

У меня эта проблема в Linux с Qt4 (активируется с помощью ipython% gui qt4). Хотя, может быть, это потому, что у меня Intel Graphics (что-то связанное уже упоминалось в известных проблемах).

Мне тоже пришлось установить Qt4; как-то до этого просто добавление «qt4» в параметры не приводило к сообщению об ошибке, а вместо этого использовалось Qt5.

хорошо, я не понял, что qt4 не был установлен на моем конце (действительно, @ronceray , это не дает ошибки) ...

PyQt 4.12.3 не запускался, но мне удалось заставить его работать с версией 4.12.1 ..

Намного медленнее, чем PyQt5, но у него нет этой проблемы переднего плана ... избавляет меня от установки другой видеокарты!

Я обновился с Fedora 27 -> Fedora 29 и установил последние графические драйверы NVIDIA . После этого mayavi работает должным образом с использованием pyqt5.

Я боролся с той же проблемой (неправильный рендеринг глубины), используя Python3 в течение последних нескольких недель, и подумал, что поделился бы своим опытом и здесь (по состоянию на 2019-04-15).

Мы находимся на одной странице, вот версии, на которые я смотрю:

  • mayavi: 4.6.2
  • черты: 5.0.0
  • traitsui: 6.0.0
  • vtk: 8.1.2
  • предусмотреть: 4.7.1
  • pyface: 6.0.0
  • PyQt5: 5.12.1
  • PyQt4: 4.11.4 (_из dpkg_)
  • PySide: 1.2.2 (_от dpkg_)
  • PySide2: 5.12.2

Mayavi / VTK / traits может использовать набор инструментов wx или qt4. С помощью инструментария 'qt4' есть дополнительная возможность указать QT API; варианты: 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; все модули такие же, как и раньше, за исключением того, что здесь мне удалось установить wxPython (4.0.1) с помощью pip3. В этом случае установка ETS_TOOLKIT = wx дает правильный порядок глубины. Что касается инструментария qt4, результаты были такими же, как и результаты Mint 18.3 (т.е. pyqt и pyside отображены правильно; pyqt5 и pyside2 - нет).

Я попытался скомпилировать PySide2 из исходного кода и смог его скомпилировать; однако рендеринг все еще неправильный.

Я также пробовал использовать pyenv для тестирования различных версий Python3 (в частности, 3.5.2 и 3.7.3). В обоих случаях я мог установить необходимые модули через pip3, за исключением того, что официальный код PySide не поддерживает версии Python выше 3.4. PySide2 доступен, как и PyQt5; ни один из них не работает правильно. Мне не удалось скомпилировать wxPython.

На данный момент мне интересно, не проблема ли это VTK, а проблема QT (сейчас я отказался от wxPython). Но как ни странно, на моем рабочем ноутбуке (с мятой 18,3), с pyenv я имел Python 3.7.3 работает, и в этом случае порядок глубина была оказана правильно - либо PyQt5 или PySide2 ( в то время как на моем домашнем ноутбуке как из QT_API дал неправильный порядок глубины). Так в чем разница? Насколько я могу судить, единственным отличием был драйвер OpenGL / GLX: на моих домашних ноутбуках используется драйвер SGI (как сообщает glxinfo), а на моем рабочем ноутбуке используется драйвер NVIDIA.

Наконец, я также попытался запустить пару тестов с VirtualBox (Mint 19.1 с xfce). Я все еще пробую разные комбинации, но пока результаты те же. (Glxinfo сообщает о драйвере OpenGL / GLX как о SGI).

Эта ветка на VTK ML, кажется, упоминает ту же проблему. К сожалению, он остался без ответа ...

Думая, я попробовал на своем ноутбуке Debian кое-что, о чем стоит сообщить. Это ноутбук NVIDIA Optimus, описанный в вики-странице Debian . В основном в этих системах две видеокарты: NVIDIA и Intel.

Краткая история: при прочих равных, исходный тестовый скрипт, который я опубликовал, некорректно отображается на карте 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

См. Вики Debian, чтобы узнать, как использовать optirun . 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

Просто чтобы добавить еще одно подтверждение, здесь, в Arch Linux, на Dell Precision 5520, я вижу проблему, работающую на чипе Intel, но не на карте nvidia через optirun . Это с Python 3.7, Qt5 и mayavi, все они установлены через официальные репозитории Arch.

Та же проблема, запуск mayavi с бэкэндом PyQt5 приводит к неправильному порядку рендеринга с использованием драйверов Mesa / SGI в Debian Stretch, но он работает с установленной переменной среды ETS_TOOLKIT=wx .

Я решил это, используя wxPython вместо PyQt.

Эта ветка была просто неоценимой в решении проблемы, большое спасибо за комментарии.

Та же проблема, не удалось заставить его работать с wx, поэтому установил python-pyqt4, установил ETS_TOOLKIT=qt4 и QT_API=pyqt и это решило ее.

Я хотел бы добавить еще одно подтверждение для одной из конфигураций, упомянутых выше. Я работаю на машине Linux с Ubuntu 18.04 в качестве ОС. В моей системе есть видеокарта Intel. Я использую anaconda3 для анимации движения заряженной частицы. Конечным результатом должна быть спираль с линией, проходящей через ее центр. Для моей среды Python 3.6.8 с Mayavi 4.6.2, vtk 8.1.2 и pyqt 5.9.2 я получаю что-то вроде этого:
snapshot
Обратите внимание, что красная линия кажется вне спирали, что неверно.

Чтобы решить эту проблему, я создал новую среду Python 3.5 в anaconda3 и установил пакеты в следующем порядке:

pyqt 4.11.4 от conda-forge
vtk 8.1.2 из pypi
Mayavi 4.6.2 от conda-forge

и установите соответствующие переменные в моей оболочке, используя
экспорт ETS_TOOLKIT = qt4
экспорт QT_API = pyqt

и запустил мой код, чтобы получить правильную диаграмму, как показано ниже
snapshot_right .
Спасибо всем вышеперечисленным умным людям, которые в этом разобрались. Ваше здоровье!

Воспроизведя проблему (используя приведенный выше пример с цветными шарами) ранее сегодня, я смог решить проблему в среде conda, которая содержала:

1) Python 3.8.5
2) VTK 9.0.1 (устанавливается с помощью whl файла)
3) pyqt5
4) Последняя версия Mayavi «Bleeding Edge» (4.7.3.dev0).

Так, может быть, VTK 9 решит эту проблему?

Я могу подтвердить, что VTK 9.0.1 с pyqt5 и Mayavi 4.7.2 (от conda-forge) устраняет эту проблему.

Да, действительно, я могу подтвердить, что эта проблема теперь решена с помощью VTK-9.0.1 и последней версии Mayavi, хотя похоже, что именно VTK является источником исправления. Я тестировал на машине Linux, где раньше это не помогало. Отлично. Спасибо, что сообщили об этом.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

GaelVaroquaux picture GaelVaroquaux  ·  13Комментарии

indranilsinharoy picture indranilsinharoy  ·  9Комментарии

igamenovoer picture igamenovoer  ·  7Комментарии

scottstanie picture scottstanie  ·  4Комментарии

kitchoi picture kitchoi  ·  10Комментарии