EDITED to show more parametric variations of parameters.
Borrowing from Bruno's definition of \slantbox at Shear transform a "box", I was able to construct the following, using simple stacks of \fcolorboxes. The perspective is completely determined by three parameters: \myrotate (the baseline rotation), \myslant (the slant magnitude or fallback parameter), and the short-stacking gap.
First, I demonstrate some variations on the perspective parameters:
\documentclass{article}
\usepackage{stackengine,xcolor,graphicx}
\newsavebox{\foobox}
\newcommand{\slantbox}[2][.5]{\mbox{%
\sbox{\foobox}{#2}%
\hskip\wd\foobox
\pdfsave
\pdfsetmatrix{1 0 #1 1}%
\llap{\usebox{\foobox}}%
\pdfrestore
}}
\def\mybox#1{\strut\makebox[\baselineskip]{$#1$}}
\def\mycell#1#2{\fcolorbox{black}{#1}{\mybox{#2}}}
\def\makeply#1#2#3{\expandafter\def\csname layer#1\endcsname{%
\stackunder[-\fboxrule]{%
\mycell{#3}{#2_1}\kern-\fboxrule\mycell{#3}{#2_3}}{%
\mycell{#3}{#2_2}\kern-\fboxrule\mycell{#3}{#2_4}}%
}%
}
\makeply{A}{a}{white}
\makeply{B}{b}{gray!30}
\makeply{C}{c}{gray!60}
\def\tristack{\Shortstack{\rotatebox{\myrotate}{\slantbox[\myslant]{\layerA}}
\rotatebox{\myrotate}{\slantbox[\myslant]{\layerB}}
\rotatebox{\myrotate}{\slantbox[\myslant]{\layerC}}}
}
\begin{document}
\def\myrotate{0} \def\myslant{0} \setstackgap{S}{1ex} \tristack~~~
\def\myrotate{15} \def\myslant{-.9} \setstackgap{S}{-5ex} \tristack~~~~~~
\def\myrotate{20} \def\myslant{-1.1} \setstackgap{S}{-7ex} \tristack
\end{document}

In fact, here is a general parametric variation of parameters (note that "Ply C atop stack" means that the stack was drawn as a \Shortunderstack, rather than as a \Shortstack):

And then, here, I try to recreate something like what the author is seeking:
\documentclass{article}
\usepackage{stackengine,xcolor,graphicx}
\newsavebox{\foobox}
\newcommand{\slantbox}[2][.5]{\mbox{%
\sbox{\foobox}{#2}%
\hskip\wd\foobox
\pdfsave
\pdfsetmatrix{1 0 #1 1}%
\llap{\usebox{\foobox}}%
\pdfrestore
}}
\def\mybox#1{\strut\makebox[\baselineskip]{$#1$}}
\def\mycell#1#2{\fcolorbox{black}{#1}{\mybox{#2}}}
\def\makeply#1#2#3{\expandafter\def\csname layer#1\endcsname{%
\stackunder[-\fboxrule]{%
\mycell{#3}{#2_1}\kern-\fboxrule\mycell{#3}{#2_3}}{%
\mycell{#3}{#2_2}\kern-\fboxrule\mycell{#3}{#2_4}}%
}%
}
\def\tristack{\Shortstack{\rotatebox{\myrotate}{\slantbox[\myslant]{\layerA}}
\rotatebox{\myrotate}{\slantbox[\myslant]{\layerB}}
\rotatebox{\myrotate}{\slantbox[\myslant]{\layerC}}}
}
\def\makestrip#1#2#3{\expandafter\def\csname strip#1\endcsname{%
\setstackgap{S}{-\fboxrule}\Shortstack{%
\mycell{#3}{#2_1} \mycell{#3}{#2_2} \mycell{#3}{#2_3} \mycell{#3}{#2_4}%
}\kern-\fboxrule}%
}
\def\tristrip{\stripA\stripB\stripC}
\def\makecomponents#1#2#3{\makeply{#1}{#2}{#3}\makestrip{#1}{#2}{#3}}
\makecomponents{A}{a}{white}
\makecomponents{B}{b}{gray!30}
\makecomponents{C}{c}{gray!60}
\begin{document}
\def\myrotate{0} \def\myslant{0} \setstackgap{S}{-.2\fboxsep}
\stackon[10pt]{$M_1$}{\tristack}\hspace{.1cm}
\raisebox{62pt}{\scalebox{2.5}{$\leftarrow$}}\hspace{.1cm}
\def\myrotate{15} \def\myslant{-.9} \setstackgap{S}{-5ex}
\stackon[12pt]{$M$}{\tristack}\hspace{.7cm}
\raisebox{62pt}{\scalebox{2.5}{$\rightarrow$}}\hspace{.2cm}
\stackon[25pt]{$M_2$}{\tristrip}
\end{document}
