ManimCommunity / ManimCommunity/manim
ZOrder not working properly for NumberPlane in 3D scenes
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 40.9k
- Forks
- 3.1k
- Avg merge
- 3d 12h
- Merged PRs (30d)
- 25
Description
## Description of bug / unexpected behavior
When plotting a sphere and a grid (NumberPlane) in a 3D scene, the NumberPlane is always rendered on top of the sphere (even when the sphere is over it). This does not happen with a ThreeDAxes object and a sphere, for example. Also setting the z_index has no effect.
(edit) Same wrong behavior when using Axes instead of ThreeDAxes. I understand that may happen due to mixing 2D and 3D Mobjects in the same scene, but I believe there are many good reasons to do this in animations (i.e.: using NumberPlane leads to much prettier results than using Surface to plot a simple 2D grid in 3D).
## Expected behavior
The last added object should be rendered on top.
## How to reproduce the issue
Code for reproducing the problem
```py
from manim import *
config.media_width = "80%"
```
```py
%%manim -qm -v WARNING ExampleNumberPlaneError
class ExampleNumberPlaneError(ThreeDScene):
def construct(self):
axes = NumberPlane()
grid = Surface(
lambda u, v: np.array([u,v,0]),
u_range=[-4, 4],
v_range=[-4, 4],
resolution=8,
fill_opacity=0.0
)
self.set_camera_orientation(phi=PI / 9, theta=PI / 6)
sphere = Sphere(center=(0, 3, 3), radius=1.3)
sphere.set_fill(ORANGE)
self.add(axes,sphere)
```
## Additional media files
Images/GIFs

## Logs
Terminal output
```
[01/08/22 19:45:23] INFO scene_file_writer.py:729
File ready at '/home/user/workspaces/m
anim_ws/tests/media/images/tests/Exampl
eNumberPlaneError_ManimCE_v0.13.1.png'
INFO Rendered ExampleNumberPlaneError scene.py:237
Played 0 animations
```
## System specifications
System Details
- OS: Ubuntu 20.04.3
- RAM: 16GB
- Python version: 3.8.10
- Installed modules (provide output from `pip list`):
```
actionlib 1.13.2
angles 1.9.13
apturl 0.5.2
argon2-cffi 21.3.0
argon2-cffi-bindings 21.2.0
attrs 19.3.0
autobahn 17.10.1
Automat 0.8.0
backcall 0.2.0
bcrypt 3.1.7
bleach 4.1.0
blinker 1.4
bondpy 1.8.6
Brlapi 0.7.0
camera-calibration 1.16.0
camera-calibration-parsers 1.12.0
catkin 0.8.10
catkin-pkg 0.4.24
catkin-pkg-modules 0.4.24
catkin-tools 0.8.2
cbor 1.0.0
certifi 2019.11.28
cffi 1.15.0
chardet 3.0.4
click 8.0.3
click-default-group 1.2.2
cloup 0.7.1
colorama 0.4.3
colour 0.1.5
command-not-found 0.3
commonmark 0.9.1
configobj 5.0.6
constantly 15.1.0
controller-manager 0.19.5
controller-manager-msgs 0.19.5
cryptography 2.8
cupshelpers 1.0
cv-bridge 1.16.0
cycler 0.10.0
Cython 0.29.14
data 0.4
dbus-python 1.2.16
debugpy 1.5.1
decorator 5.1.0
defer 1.0.6
defusedxml 0.6.0
diagnostic-analysis 1.10.4
diagnostic-common-diagnostics 1.10.4
diagnostic-updater 1.10.4
distro 1.4.0
distro-info 0.23ubuntu1
docutils 0.16
duplicity 0.8.12.0
dynamic-reconfigure 1.7.1
empy 3.3.2
entrypoints 0.3
fasteners 0.14.1
funcsigs 1.0.2
future 0.18.2
gazebo_plugins 2.9.2
gazebo_ros 2.9.2
gencpp 0.6.5
geneus 3.0.0
genlisp 0.4.18
genmsg 0.5.16
gennodejs 2.0.2
genpy 0.6.15
glcontext 2.3.4
httplib2 0.14.0
hyperlink 19.0.0
idna 2.8
image-geometry 1.16.0
importlib-resources 5.4.0
incremental 16.10.1
interactive-markers 1.12.0
ipykernel 6.6.0
ipython 7.30.1
ipython-genutils 0.2.0
ipywidgets 7.6.5
isosurfaces 0.1.0
jedi 0.18.1
Jinja2 3.0.3
joint_state_publisher 1.15.0
joint_state_publisher_gui 1.15.0
jsonschema 4.3.2
jupyter 1.0.0
jupyter-client 7.1.0
jupyter-console 6.4.0
jupyter-core 4.9.1
jupyterlab-pygments 0.1.2
jupyterlab-widgets 1.0.2
keyring 18.0.1
kiwisolver 1.0.1
language-selector 0.1
laser_geometry 1.6.7
latex 0.7.0
launchpadlib 1.10.13
lazr.restfulclient 0.14.2
lazr.uri 1.0.3
lockfile 0.12.2
louis 3.12.0
lz4 3.0.2+dfsg
macaroonbakery 1.3.1
Mako 1.1.0
manim 0.13.1
ManimPango 0.3.1
mapbox-earcut 0.12.11
MarkupSafe 2.0.1
matplotlib 3.1.2
matplotlib-inline 0.1.3
message-filters 1.15.13
mistune 0.8.4
moderngl 5.6.4
moderngl-window 2.4.1
monotonic 1.5
mpi4py 3.0.3
multipledispatch 0.6.0
nbclient 0.5.9
nbconvert 6.3.0
nbformat 5.1.3
nest-asyncio 1.5.4
netifaces 0.10.4
networkx 2.6.3
nose 1.3.7
notebook 6.4.6
numpy 1.17.4
oauthlib 3.1.0
olefile 0.46
osrf-pycommon 1.0.0
packaging 21.3
pandocfilters 1.5.0
paramiko 2.6.0
parso 0.8.3
pbr 5.8.0
pexpect 4.6.0
pickleshare 0.7.5
Pillow 7.0.0
pip 21.3.1
prometheus-client 0.12.0
prompt-toolkit 3.0.24
protobuf 3.6.1
psutil 5.5.1
ptyprocess 0.7.0
py-ubjson 0.14.0
pyasn1 0.4.2
pyasn1-modules 0.2.1
pycairo 1.20.1
pycparser 2.21
pycryptodomex 3.6.1
pycups 1.9.73
pydot 1.4.1
pydub 0.25.1
pyglet 1.5.21
Pygments 2.10.0
PyGObject 3.36.0
PyHamcrest 1.9.0
PyJWT 1.7.1
pymacaroons 0.13.0
PyNaCl 1.3.0
PyOpenGL 3.1.0
pyOpenSSL 19.0.0
pyparsing 2.4.6
pypng 0.0.20
PyQRCode 1.2.1
PyQt5 5.14.1
pyRFC3339 1.1
pyrr 0.10.3
pyrsistent 0.18.0
python-apt 2.0.0+ubuntu0.20.4.6
python-dateutil 2.7.3
python-debian 0.1.36ubuntu1
python-gnupg 0.4.5
python-qt-binding 0.4.4
python-snappy 0.5.3
PyTrie 0.2
pytz 2019.3
pyxdg 0.26
PyYAML 5.3.1
pyzmq 22.3.0
qt-dotgraph 0.4.2
qt-gui 0.4.2
qt-gui-cpp 0.4.2
qt-gui-py-common 0.4.2
qtconsole 5.2.2
QtPy 2.0.0
ranger-fm 1.9.3
reportlab 3.5.34
requests 2.22.0
requests-unixsocket 0.2.0
resource_retriever 1.12.6
rich 10.16.1
roman 2.0.0
rosbag 1.15.13
rosboost-cfg 1.15.8
rosclean 1.15.8
roscreate 1.15.8
rosdep 0.21.0
rosdep-modules 0.21.0
rosdistro 0.8.3
rosdistro-modules 0.8.3
rosgraph 1.15.13
roslaunch 1.15.13
roslib 1.15.8
roslint 0.12.0
roslz4 1.15.13
rosmake 1.15.8
rosmaster 1.15.13
rosmsg 1.15.13
rosnode 1.15.13
rosparam 1.15.13
rospkg 1.3.0
rospkg-modules 1.3.0
rospy 1.15.13
rosservice 1.15.13
rostest 1.15.13
rostopic 1.15.13
rosunit 1.15.8
roswtf 1.15.13
rqt_action 0.4.9
rqt_bag 0.5.1
rqt_bag_plugins 0.5.1
rqt_console 0.4.11
rqt_dep 0.4.12
rqt_graph 0.4.14
rqt_gui 0.5.2
rqt_gui_py 0.5.2
rqt_image_view 0.4.16
rqt_launch 0.4.9
rqt_logger_level 0.4.11
rqt-moveit 0.5.10
rqt_msg 0.4.10
rqt_nav_view 0.5.7
rqt_plot 0.4.13
rqt_pose_view 0.5.11
rqt_publisher 0.4.10
rqt_py_common 0.5.2
rqt_py_console 0.4.10
rqt-reconfigure 0.5.4
rqt-robot-dashboard 0.5.8
rqt-robot-monitor 0.5.13
rqt_robot_steering 0.5.12
rqt_runtime_monitor 0.5.9
rqt-rviz 0.7.0
rqt_service_caller 0.4.10
rqt_shell 0.4.11
rqt_srv 0.4.9
rqt_tf_tree 0.6.2
rqt_top 0.4.10
rqt_topic 0.4.13
rqt_web 0.4.10
rviz 1.14.11
scipy 1.7.3
screen-resolution-extra 0.0.0
screeninfo 0.6.7
SecretStorage 2.3.1
Send2Trash 1.8.0
sensor-msgs 1.13.1
service-identity 18.1.0
setuptools 45.2.0
shutilwhich 1.1.0
simplejson 3.16.0
sip 4.19.21
six 1.14.0
skia-pathops 0.7.2
smach 2.5.0
smach-ros 2.5.0
smclib 1.8.6
srt 3.5.0
systemd-python 234
tempdir 0.7.1
terminado 0.12.1
testpath 0.5.0
testresources 2.0.1
tf 1.13.2
tf-conversions 1.13.2
tf2-geometry-msgs 0.7.5
tf2-kdl 0.7.5
tf2-py 0.7.5
tf2-ros 0.7.5
topic-tools 1.15.13
tornado 6.1
tqdm 4.62.3
traitlets 5.1.1
Twisted 18.9.0
txaio 2.10.0
u-msgpack-python 2.1
ubuntu-advantage-tools 27.4
ubuntu-drivers-common 0.0.0
ufw 0.36
unattended-upgrades 0.1
urllib3 1.25.8
usb-creator 0.3.7
wadllib 1.3.3
watchdog 2.1.6
wcwidth 0.2.5
webencodings 0.5.1
wheel 0.34.2
widgetsnbextension 3.5.2
wsaccel 0.6.2
xacro 1.14.10
xkit 0.0.0
zipp 3.6.0
zope.interface 4.7.1
```
LaTeX details
+ Not used
FFMPEG
Output of `ffmpeg -version`:
```
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
```
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the ThreeDScene.construct entry point in the reproduction, using NumberPlane, Surface, Sphere, and set_camera_orientation. Render the example and compare NumberPlane with ThreeDAxes and Axes; done means objects in the scene respect the expected depth or addition order and z_index behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- computer-graphics
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100