\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
input colorbrewer-rgb

path unithex;
unithex = for i = 0 upto 5: dir 60i -- endfor cycle;
unithex := unithex shifted - point 4 of unithex;

def fixed_at_point expr n of p =
 zscaled (point n of p - point n+1 of p) shifted point n+1 of p
enddef;

beginfig(1);
 path dodo, h[], s[];
 dodo = for i = 1 upto 12: 21 dir (15 + 30i) -- endfor cycle;
 h1 = unithex fixed_at_point 1 of dodo;
 h2 = unithex fixed_at_point 3 of dodo;
 s1 = unitsquare fixed_at_point 0 of dodo;
 s2 = unitsquare fixed_at_point 2 of dodo;
 s3 = unitsquare fixed_at_point 4 of dodo;

 picture colour_unit, line_unit;
 colour_unit = image(
   fill dodo withcolor Greens 9 2;
   fill h1 withcolor Greens 9 3;
   fill h2 withcolor Greens 9 3;
   fill s1 withcolor Greens 9 4;
   fill s2 withcolor Greens 9 4;
   fill s3 withcolor Greens 9 4;
 );
 line_unit = image(
   forsuffixes $=dodo, s1, s2, s3, h1, h2:
     draw $ withpen pencircle scaled 1/4;
     pair m; m = center $;  % all shapes have even number of sides
     for i=1 upto length $:
       cutdraw m -- point i - 1/2 of $
         if odd i: cutbefore fullcircle scaled (length $ / 4) shifted m fi
         withpen pencircle scaled 1/4
         withcolor Reds 4 3;
     endfor
   endfor
 );

 pair u, v;
 u = point 3 of s2 - point 8 of dodo;
 v = u rotated 60;

 numeric n; n = 4;
 forsuffixes @ = colour_unit, line_unit:
   for i=-n upto n:
     for j=-n upto n:
       draw @ shifted (i*u + j*v - floor(i/2) * v);
     endfor
   endfor
 endfor

 clip currentpicture to bbox dodo scaled 2n yscaled sqrt(3/4);
endfig;
\end{mplibcode}
\end{document}