| """Draw the proposed architecture; this figure is a specification, not a result.""" |
| from pathlib import Path |
| import matplotlib |
| matplotlib.use('Agg') |
| import matplotlib.pyplot as plt |
| from matplotlib.patches import FancyBboxPatch, FancyArrowPatch |
|
|
| out=Path(__file__).resolve().parents[1]/'figures' |
| fig,ax=plt.subplots(figsize=(9.2,5.4)) |
| ax.set(xlim=(0,10.5),ylim=(0,6));ax.axis('off') |
|
|
| def box(x,y,w,h,title,body,fill='#EEF5F6'): |
| ax.add_patch(FancyBboxPatch((x,y),w,h,boxstyle='round,pad=0.08',facecolor=fill,edgecolor='#116E83',linewidth=1.3)) |
| ax.text(x+w/2,y+h-.24,title,ha='center',va='top',fontsize=10.3,weight='bold',color='#173746') |
| ax.text(x+w/2,y+h-.64,body,ha='center',va='top',fontsize=9.0,color='#243944',linespacing=1.45) |
|
|
| def arrow(a,b,label=None,rad=0): |
| ax.add_patch(FancyArrowPatch(a,b,arrowstyle='-|>',mutation_scale=12,lw=1.4,color='#486673',connectionstyle=f'arc3,rad={rad}')) |
| if label: ax.text((a[0]+b[0])/2,(a[1]+b[1])/2+.09,label,ha='center',fontsize=8,color='#486673',bbox={'facecolor':'white','edgecolor':'none','pad':1}) |
|
|
| box(.22,4.35,4.18,1.28,'Authoritative engine state','Identity + generations + transforms\nGeometry/material handles + events') |
| box(5.6,4.35,4.18,1.28,'Renderer observations','Sparse paths + visibility + residuals\nPDFs + noise + sample lineage') |
| box(1.35,2.15,7.3,1.4,'One persistent, query-closed belief','Canonical response estimates + uncertainty + nuisance statistics\nValid evidence + shared light factors + local correction','#E2F0F2') |
| box(.22,.15,4.18,1.22,'Rendering queries','SR / RR / denoising / appearance\nTime queries / disocclusion / compression') |
| box(5.6,.15,4.18,1.22,'Evidence allocation','Future-loss metric W + query costs\nSample / retain / refresh / route') |
| arrow((2.4,4.25),(3.1,3.66),'known state') |
| arrow((7.6,4.25),(6.9,3.66),'new evidence') |
| arrow((3.1,2.06),(2.4,1.48)) |
| arrow((6.9,2.06),(7.6,1.48)) |
| arrow((9.95,.8),(9.95,4.23),rad=0) |
| ax.text(10.12,2.85,'legal physical probes',rotation=90,ha='center',va='center',fontsize=8,color='#486673') |
| ax.set_title('AUREOLE: proposed engine / belief / rendering interface',loc='left',fontsize=12,weight='bold',pad=9) |
| for ext in ['png','pdf']: |
| fig.savefig(out/f'architecture.{ext}',dpi=190,bbox_inches='tight') |
| plt.close(fig) |
|
|