\documentclass[border=10pt]{standalone}\usepackage{asymptote}\begin{document}\begin{asy}[inline=true]import graph3;real w=9cm, h=1.618w; size(w,h);currentprojection=orthographic(camera=(-13,-8.6,59),up=Z,target=(0.5,0.5,3),zoom=1);import fontsize; defaultpen(fontsize(9pt));texpreamble("\usepackage{siunitx}\usepackage{lmodern}");pen linePen=darkblue+0.9bp;pen grayPen=gray(0.3)+0.8bp;pen dashPen=gray(0.3)+0.8bp+linetype(new real[] {5,5});pen patchFillPen=paleblue;pen planeFillPen=deepgreen+opacity(0.3);triple[][] p={ // Bicubic Bezier patch control points{(1 ,0.3,0),(1 ,0.5,-1),(1 ,0.6,1),(1 ,1,0),},{(0.6,0.25,0),(0.6,0.3,2) ,(0.6,0.6,2) ,(0.6,1,0.2),},{(0.5,0.4,0),(0.3,0.3,2),(0.3,0.6,2) ,(0.3,1,2),},{(0.3 ,0.4,0.2),(0 ,0.3,1.5) ,(0 ,0.6,2.3) ,(0 ,1,1),},};triple[][] planePatch(triple a,triple b,triple c){// Builds a plane Bezier patch from 3 corner pointstriple[][] p=new triple[4][4];p[0][0]=a;p[3][0]=b+b-a;p[1][0]=(2*p[0][0]+ p[3][0])/3;p[2][0]=( p[0][0]+2*p[3][0])/3;p[0][3]=c+c-a;p[0][1]=(2*p[0][0]+ p[0][3])/3;p[0][2]=( p[0][0]+2*p[0][3])/3;p[3][3]=p[0][0]+(p[3][0]-a)+(p[0][3]-a);p[1][3]=(2*p[0][3]+p[3][3])/3;p[2][3]=(p[0][3]+2*p[3][3])/3;p[3][1]=(2*p[3][0]+ p[3][3])/3;p[3][2]=( p[3][0]+2*p[3][3])/3;
Source: TeX.SE