Large-scale 3D Graphics
This is a tutorial for creating 3D graphics of large data sets. In many cases when your data starts getting large, creating 3D graphics will take an extremely long time. Since in many cases the eye cannot tell between extremely resolved data and not as resolved data, to speed up rendering time you can "skip" through your data and only use a reduced number of points.
Contents
Create simple data
We begin by creating some sample 3D data.
x=linspace(-1,1,512); y=linspace(-2,2,512); z=linspace(-5,5,1024); [xxx,yyy,zzz]=meshgrid(x,y,z); myf=sin(pi*xxx.*yyy).*(yyy.^2-3*xxx.*yyy.*zzz); xg=xxx; yg=yyy; zg=zzz; fg=myf;
Naive plotting
Plotting this normally, we see that it can take a long time.
figure(1) clf tic p1=patch(isosurface(xg,yg,zg,fg,15)); p1.FaceColor = [0.95 0.05 0.05]; p1.EdgeColor = 'none'; p1.FaceAlpha = 0.55; hold on p2=patch(isosurface(xg,yg,zg,fg,5)); p2.FaceColor = [0.55 0.55 0.95]; p2.EdgeColor = 'none'; p2.FaceAlpha = 0.75; view([120 30]) grid on camlight(-45,0.1) camlight(45,30) daspect([1 2 5]) toc
Elapsed time is 64.704654 seconds.
Skipping points
If we now only take and plot every other point, the graphics take substantially less time.
xskp=2;yskp=2;zskp=2; xg=xxx(1:xskp:end,1:yskp:end,1:zskp:end); yg=yyy(1:xskp:end,1:yskp:end,1:zskp:end); zg=zzz(1:xskp:end,1:yskp:end,1:zskp:end); fg=myf(1:xskp:end,1:yskp:end,1:zskp:end); figure(2) clf tic p1=patch(isosurface(xg,yg,zg,fg,15)); p1.FaceColor = [0.95 0.05 0.05]; p1.EdgeColor = 'none'; p1.FaceAlpha = 0.55; hold on p2=patch(isosurface(xg,yg,zg,fg,5)); p2.FaceColor = [0.55 0.55 0.95]; p2.EdgeColor = 'none'; p2.FaceAlpha = 0.75; view([120 30]) grid on camlight(-45,0.1) camlight(45,30) daspect([1 2 5]) toc
Elapsed time is 8.094981 seconds.
You should find that the second plot takes substantially less time to render. For me it went from 60s to 7s.
Other options
If this does not speed up your rendering time sufficiently, other options that may help are: Turn the GraphicsSmoothing property 'off' (fig.GraphicsSmoothing = 'off') Ensure that Matlab is using your graphics card (if you have one) and that it is using the latest drivers. To see this information type: close all opengl hardware opengl info opengl software opengl info Other more specific improvements can be found at: https://www.mathworks.com/help/matlab/graphics-performance.html