作图纸 · 短片

0:00 / 2:3501板型

开机自检

依照 TikZ 代码画出一块 ATX 主板,再通电开机

图纸逐笔成形,画出的主板随后通电开机。一颗橙色火花依照一段 TikZ 代码,在深色方格纸上逐个部件画出一整块 12 × 9.6 英寸的 ATX 主板:外形与安装孔、后置 I/O、十四相供电环绕的 CPU 插座、供电接口、四条 DDR5 插槽及其等长走线、扩展槽与 M.2 硬盘、芯片组、沿板边的各种接口,以及 Debug 数码管。最后一笔落下之后,主板像真机一样开机:各路电压建立后,电源发出 Power Good;插座两侧的各相供电电路轮流导通;Debug 数码管依次显示各个 POST 码,内存逐条训练,显卡槽的链路建立;随后满载运行,封装温度升至 85 °C。每一帧都在浏览器里依照这段代码实时绘制;配乐也由代码依据同一份作图计划生成。

Form Factor 交互版
速度
96 BPM · 62 小节
画面
作图引擎 · WebGL
程序
一段 TikZ 代码,303 行
开机
电压、POST 与发热均为模拟
声音
原创配乐,依据作图计划合成

章节11

TikZ 代码153 条语句

本片与 Form Factor 使用同一份 TikZ 代码,并与「作图纸」的其他几支短片共用作图引擎:每一步都在剧本指定的小节开始绘制。复制的代码会附带一行 \tikzset,用于声明本图专用的键;粘贴到加载了 TikZ 宏包的 LaTeX 文档中即可编译。

% title: ATX 主板,12 × 9.6 英寸% 1 单位为 1 英寸;后侧板边朝上\begin{tikzpicture} % PCB:ATX,12 × 9.6 英寸,1.6 mm FR-4\draw[very thick] (0,0) rectangle (12,9.6);\draw[|<->|] (0,10.55) -- (12,10.55);\draw[|<->|] (12.45,0) -- (12.45,9.6); % 九个安装孔,各带 0.4 英寸见方的禁布区\foreach \x/\y in {11.6/9.2,6.7/9.2,0.5/8.3,11.6/3.1,6.7/3.1,0.5/3.1,11.6/0.25,6.7/0.25,0.5/0.25} {  \draw (\x,\y) circle (.14);  \draw (\x,\y) circle (.07);  \draw[help lines,dashed] (\x-.2,\y-.2) rectangle ++(.4,.4);}\draw[|<->|] (-.75,.25) -- (-.75,3.1);\draw[|<->|] (-.75,3.1) -- (-.75,8.3);\draw[|<->|] (6.7,9.82) -- (11.6,9.82); % 后置 I/O,在 6.25 英寸宽的挡板内\draw[help lines,dashed] (5.5,8.6) rectangle (11.75,9.75);\draw[|<->|] (5.5,10.1) -- (11.75,10.1);\draw (5.55,8.65) rectangle (6.33,9.72);\foreach \x in {5.75,6.13} \foreach \y in {8.88,9.2,9.52}  \draw (\x,\y) circle (.11);\draw (7,8.62) rectangle (7.7,9.72);\draw (7.08,8.95) -- (7.08,9.55) -- (7.62,9.55) -- (7.62,8.95)  -- (7.48,8.95) -- (7.48,8.85) -- (7.22,8.85) -- (7.22,8.95) -- cycle;\foreach \x in {7.12,7.5} \draw (\x,9.61) rectangle ++(.08,.06);\foreach \x in {7.85,8.6} {  \draw (\x,8.66) rectangle ++(.6,1.06);  \draw (\x+.08,9.05) rectangle ++(.44,.55);  \draw (\x+.14,9.3) -- ++(.32,0);}\draw (9.35,8.7) rectangle (9.77,9.72);\draw (9.42,9.08) -- (9.42,9.6) -- (9.7,9.6) -- (9.7,9.2) -- (9.6,9.08) -- cycle;\draw (9.87,8.7) rectangle (10.35,9.72);\draw (9.93,9.6) -- (10.29,9.6) -- (10.24,9.12) -- (9.98,9.12) -- cycle;\foreach \x in {10.5,10.72} \draw (\x,8.9) rectangle ++(.16,.82);\foreach \y in {8.95,9.4} \draw (11.02,\y) rectangle ++(.28,.28); % CPU 插座:方形 LGA,外框、压板与压杆\draw[thick] (7.35,4.25) rectangle (9.85,7.15);\foreach \x/\y in {7.5/4.4,9.7/4.4,7.5/7,9.7/7}  \draw (\x,\y) circle (.07);\draw (7.6,4.6) rectangle (9.6,6.8);\draw[semithick] (9.98,4.4) -- (10.06,4.3) -- (10.06,6.98) -- (9.85,6.98);% 封装 40 × 40 mm,及其顶盖\draw (7.8125,4.9125) rectangle ++(1.575,1.575);\draw[semithick] (7.96,5.06) rectangle ++(1.28,1.28);\fill (7.86,4.96) -- ++(.14,0) -- ++(-.14,.14) -- cycle;\foreach \i in {0,...,8} {  \draw (8.07+\i*.13,4.94) rectangle ++(.05,.07);  \draw (8.07+\i*.13,6.39) rectangle ++(.05,.07);} % Vcore:十四相,每相一颗功率级、一颗电感\foreach \y in {4.55,4.95,...,6.95} {  \draw (10.2,\y-.12) rectangle ++(.2,.24);  \draw (10.25,\y-.06) rectangle ++(.1,.12);  \draw (10.58,\y-.17) rectangle ++(.34,.34);  \draw (10.75,\y) circle (.11);}\foreach \x in {7.55,7.95,...,9.95} {  \draw (\x-.12,7.38) rectangle ++(.24,.2);  \draw (\x-.06,7.43) rectangle ++(.12,.1);  \draw (\x-.17,7.78) rectangle ++(.34,.34);  \draw (\x,7.95) circle (.11);}% 每颗功率级旁一颗自举电容\foreach \y in {4.55,4.95,...,6.95} \draw (10.455,\y-.03) rectangle ++(.03,.06);\foreach \x in {7.55,7.95,...,9.95} \draw (\x-.03,7.635) rectangle ++(.06,.03);\foreach \y in {4.6,4.95,5.3,5.65} \draw (11.05,\y) circle (.11);\foreach \x in {7.6,7.93,...,9.9} \draw (\x,8.35) circle (.11);\draw (10.42,7.62) rectangle ++(.26,.26);\foreach \i in {0,...,4} {  \draw (10.46+\i*.045,7.62) -- ++(0,-.04);  \draw (10.46+\i*.045,7.88) -- ++(0,.04);} % 供电接口:CPU 用 EPS 8 + 4,其余用 24-pin\draw (11.3,6) rectangle (11.72,6.75);\draw (11.3,6.85) rectangle (11.72,7.25);\foreach \c in {0,1} \foreach \r in {0,...,3}  \fill (11.37+\c*.18,6.06+\r*.165) rectangle ++(.1,.1);\foreach \c in {0,1} \foreach \r in {0,1}  \fill (11.37+\c*.18,6.92+\r*.165) rectangle ++(.1,.1);\draw (7.8,.15) rectangle (9.85,.7);\draw (8.7,.7) rectangle ++(.25,.08);\foreach \c in {0,...,11} \foreach \r in {0,1}  \fill (7.88+\c*.165,.24+\r*.2) rectangle ++(.1,.1); % 内存:四条 DDR5 插槽,双通道,两端卡扣\foreach \y in {1.5,1.85,2.35,2.7} {  \draw (6.05,\y-.13) rectangle ++(5.2,.26);  \draw[densely dotted] (6.15,\y) -- (8.4,\y);  \draw[densely dotted] (8.55,\y) -- (11.15,\y);  \draw (5.87,\y-.1) rectangle ++(.18,.2);  \draw (11.25,\y-.1) rectangle ++(.18,.2);}\foreach \y/\n in {1.5/A1,1.85/A2,2.35/B1,2.7/B2}  \node[font=\tiny,anchor=east] at (5.82,\y) {DIMM\_\n}; % 内存走线等长:较短的几根绕成蛇形\foreach \i in {0,1,2,3}  \draw[ash,very thin] (7.8+.155*\i,4.25) -- (7.8+.155*\i,4.03-.07*\i)    -- (7.72+.155*\i,3.95-.07*\i) -- (7.23+.3*\i,3.95-.07*\i)    -- (7.15+.3*\i,3.87-.07*\i);\foreach \i in {4,5,6,7,8,9,10,11}  \draw[ash,very thin] (7.8+.155*\i,4.25) -- (7.8+.155*\i,3.26+.07*\i)    -- (7.88+.155*\i,3.18+.07*\i) -- (7.37+.3*\i,3.18+.07*\i)    -- (7.45+.3*\i,3.1+.07*\i);\foreach \u/\v in {10.75/3.87}  \draw[ash,very thin] (\u,\v) -- (\u,2.95);\foreach \u/\v/\a in {7.15/3.87/0.018,7.45/3.8/0.023,7.75/3.73/0.029,8.05/3.66/0.035,8.65/3.38/0.064,8.95/3.45/0.046,9.25/3.52/0.033,9.55/3.59/0.025,9.85/3.66/0.017,10.15/3.73/0.012,10.45/3.8/0.008} {  \draw[ash,very thin] (\u,\v) -- (\u,\v-.06);  \draw[ash,very thin,domain=\v-.06:3.01,samples=120]    plot ({\u+\a*max(-1,min(1,3*sin(5200*\x)))},\x);  \draw[ash,very thin] (\u,3.01) -- (\u,2.95);} % 扩展槽:七个槽位,间距 0.8 英寸,五个装有插槽\draw (5.8,7.05) rectangle (6.1,8.05);\draw (5.8,7.59) -- ++(.3,0);\foreach \d in {-.06,.06}  \draw[densely dotted] (5.95+\d,7.13) -- (5.95+\d,7.53);\draw[semithick] (5,4.55) rectangle (5.3,8.05);\draw (4.97,4.52) rectangle (5.33,8.08);\draw (5,7.59) -- ++(.3,0);\foreach \d in {-.06,.06}  \draw[densely dotted] (5.15+\d,4.63) -- (5.15+\d,7.53);\draw (5.03,4.38) rectangle (5.27,4.55);\draw (3.4,7.05) rectangle (3.7,8.05);\draw (3.4,7.59) -- ++(.3,0);\foreach \d in {-.06,.06}  \draw[densely dotted] (3.55+\d,7.13) -- (3.55+\d,7.53);\draw (2.6,4.55) rectangle (2.9,8.05);\draw (2.6,7.59) -- ++(.3,0);\foreach \d in {-.06,.06}  \draw[densely dotted] (2.75+\d,4.63) -- (2.75+\d,7.53);\draw (2.63,4.38) rectangle (2.87,4.55);\draw (1,4.55) rectangle (1.3,8.05);\draw (1,7.59) -- ++(.3,0);\foreach \d in {-.06,.06}  \draw[densely dotted] (1.15+\d,4.63) -- (1.15+\d,7.53);\draw (1.03,4.38) rectangle (1.27,4.55);\draw[|<->|] (2.75,8.3) -- (3.55,8.3); % 存储:三个 M.2 2280 插槽,各装一块 NVMe 硬盘\draw (6.22,7.98) rectangle (7.15,8.12);\draw (6.25,4.6) rectangle (7.12,8);\foreach \y in {7.25,6.55} \draw (6.35,\y) rectangle ++(.48,-.48);\draw (6.87,7.1) rectangle ++(.17,-.17);\draw (6.685,4.68) circle (.06);\draw (3.885,7.98) rectangle (4.815,8.12);\draw (3.915,4.6) rectangle (4.785,8);\foreach \y in {7.25,6.55} \draw (4.015,\y) rectangle ++(.48,-.48);\draw (4.535,7.1) rectangle ++(.17,-.17);\draw (4.35,4.68) circle (.06);\draw (1.485,7.98) rectangle (2.415,8.12);\draw (1.515,4.6) rectangle (2.385,8);\foreach \y in {7.25,6.55} \draw (1.615,\y) rectangle ++(.48,-.48);\draw (2.135,7.1) rectangle ++(.17,-.17);\draw (1.95,4.68) circle (.06); % CPU 的通道:16 条到显卡槽,4 条到系统盘\foreach \k in {0,...,7}  \draw[ash,very thin] (7.35,5.15+.16*\k)    -- ({5.4+abs(.26*\k-.4)},5.15+.16*\k)    -- (5.4,4.75+.42*\k) -- (5.33,4.75+.42*\k);\foreach \k in {0,...,3}  \draw[ash,very thin] (7.55+.08*\k,7.15) -- (7.55+.08*\k,7.22+.04*\k)    -- (6.61+.1*\k,7.22+.04*\k) -- (6.55+.1*\k,7.28+.04*\k) -- (6.55+.1*\k,8);\draw[ash,very thin] (7.45,4.25) -- (7.45,4.18) -- (4.58,4.18) -- (3.8,3.4);\draw[ash,very thin] (7.5,4.25) -- (7.5,4.135) -- (4.485,4.135) -- (3.75,3.4);\draw[ash,very thin] (7.55,4.25) -- (7.55,4.09) -- (4.39,4.09) -- (3.7,3.4);\draw[ash,very thin] (7.6,4.25) -- (7.6,4.045) -- (4.295,4.045) -- (3.65,3.4); % 芯片组(不装散热片)、散热片固定孔及其通道\draw[thick] (2.9,2.4) rectangle (3.9,3.4);\draw (3.12,2.62) rectangle ++(.56,.56);\fill (2.95,2.45) -- ++(.12,0) -- ++(-.12,.12) -- cycle;\foreach \x/\y in {2.72/2.22,4.08/3.58} \draw (\x,\y) circle (.06);\draw[ash,very thin] (3.05,2.4) -- (3.05,1.3) -- (2.65,0.9) -- (2.65,0.72);\draw[ash,very thin] (3.25,2.4) -- (3.25,1.3) -- (3.05,1.1) -- (3.05,0.72);\draw[ash,very thin] (3.45,2.4) -- (3.45,1.3) -- (3.6,1.15) -- (3.6,0.72);\draw[ash,very thin] (3.65,2.4) -- (3.65,1.3) -- (4,0.95) -- (4,0.72);\draw[ash,very thin] (3.6,3.4) -- (3.6,3.85) -- (4.35,4.6);\draw[ash,very thin] (3,3.4) -- (3,3.95) -- (2.35,4.6); % 前侧板边:SATA、USB 插针、前面板插针、风扇插座\foreach \x in {2.45,3.4} {  \draw (\x,.12) rectangle ++(.85,.6);  \draw (\x+.05,.2) -- ++(0,.18) -- ++(.3,0) -- ++(0,-.06) -- ++(.04,0);  \draw (\x+.45,.2) -- ++(0,.18) -- ++(.3,0) -- ++(0,-.06) -- ++(.04,0);}\draw (4.47,.12) rectangle (5.65,.5);\draw (4.97,.12) rectangle ++(.18,.06);\foreach \c in {0,...,9} \foreach \r in {0,1}  \fill (4.58+\c*.1,.26+\r*.1) circle (.022);\draw (5.85,.15) rectangle (6.25,.45);\draw (5.92,.22) rectangle (6.18,.38);\draw (.85,.17) rectangle (1.35,.43);\foreach \c in {0,...,4} \foreach \r in {0,1}  \fill (.92+\c*.09,.25+\r*.1) circle (.022);\draw (1.55,.17) rectangle (2.05,.43);\foreach \c in {0,...,4} \foreach \r in {0,1}  \fill (1.62+\c*.09,.25+\r*.1) circle (.022);\foreach \x/\y in {10.25/8.2,10.8/8.2,7.1/0.2} {  \draw (\x,\y) rectangle ++(.45,.22);  \foreach \p in {0,...,3} \fill (\x+.085+\p*.093,\y+.11) circle (.022);}\foreach \x/\y in {0.15/5.3} {  \draw (\x,\y) rectangle ++(.22,.45);  \foreach \p in {0,...,3} \fill (\x+.11,\y+.085+\p*.093) circle (.022);} % 音频:独占一角,与板上其余部分隔开\draw[ash,densely dashed] (.75,8.15) -- (5.45,8.15) -- (5.45,9.55);\draw (2.46,8.71) rectangle ++(.28,.28);\foreach \i in {0,...,5} {  \draw (2.5+\i*.04,8.71) -- ++(0,-.04);  \draw (2.5+\i*.04,8.99) -- ++(0,.04);  \draw (2.46,8.75+\i*.04) -- ++(-.04,0);  \draw (2.74,8.75+\i*.04) -- ++(.04,0);}\draw (3.3,8.75) rectangle ++(.24,.2);\foreach \i in {0,...,3} {  \draw (3.33+\i*.06,8.75) -- ++(0,-.05);  \draw (3.33+\i*.06,8.95) -- ++(0,.05);}\foreach \x/\r in {.95/.13,1.35/.13,1.75/.11,3.95/.13,4.35/.11,4.75/.11}  \draw (\x,8.85) circle (\r);\foreach \x in {.95,1.35} \draw (\x,9.25) circle (.09);\draw (4,9.17) rectangle (4.9,9.43);\foreach \c in {0,...,4} \foreach \r in {0,1}  \fill (4.12+\c*.165,9.25+\r*.1) circle (.022); % 其余:网卡芯片、Super I/O、BIOS、CMOS 电池、时钟\draw (6.15,8.2) rectangle ++(.3,.3);\draw (5.97,8.28) rectangle ++(.12,.14);\draw (4.625,3.175) rectangle ++(.45,.45);\foreach \i in {0,...,9} {  \draw (4.67+\i*.04,3.175) -- ++(0,-.05);  \draw (4.67+\i*.04,3.625) -- ++(0,.05);  \draw (4.625,3.22+\i*.04) -- ++(-.05,0);  \draw (5.075,3.22+\i*.04) -- ++(.05,0);}\draw (4.56,2.08) rectangle ++(.24,.2);\foreach \i in {0,...,3} {  \draw (4.59+\i*.06,2.08) -- ++(0,-.05);  \draw (4.59+\i*.06,2.28) -- ++(0,.05);}\draw (1.6,3.85) circle (.4);\draw (1.6,3.85) circle (.34);\draw (1.15,3.75) rectangle ++(.08,.2);\draw (2.08,1.98) rectangle ++(.34,.09);\draw (2.25,2.55) rectangle ++(.2,.2);\foreach \i in {0,...,3} {  \draw (2.28+\i*.045,2.55) -- ++(0,-.03);  \draw (2.28+\i*.045,2.75) -- ++(0,.03);}\draw (.9,3.72) rectangle ++(.2,.16);\foreach \x in {.95,1.05} \fill (\x,3.8) circle (.022);\draw (.95,.62) rectangle (1.75,.86);\foreach \c in {0,...,6} \foreach \r in {0,1}  \fill (1.05+\c*.1,.69+\r*.1) circle (.022);\foreach \y in {6.2,6.75} {  \draw (.15,\y) rectangle ++(.18,.32);  \foreach \p in {0,1,2} \fill (.24,\y+.07+\p*.09) circle (.022);} % 状态指示:Debug 数码管、Q-LED、按键\draw (10.3,.3) rectangle (10.9,.75);\foreach \x in {10.38,10.62} \draw[ash] (\x,.37) rectangle ++(.18,.31);\foreach \y in {.32,.45,.58,.71} \draw (11.05,\y) rectangle ++(.08,.06);\foreach \x in {10.3,10.65} {  \draw (\x,.9) rectangle ++(.25,.25);  \draw (\x+.125,1.025) circle (.07);}\draw (10.02,.97) rectangle ++(.08,.06); % 去耦:电流变化快的地方,成排的 0402 电容\foreach \x in {6.2,6.45,...,9.95} \draw (\x,1.15) rectangle ++(.06,.03);\foreach \i in {0,...,6} {  \draw (2.98+\i*.13,2.25) rectangle ++(.06,.03);  \draw (2.98+\i*.13,3.52) rectangle ++(.06,.03);  \draw (2.76,2.5+\i*.13) rectangle ++(.03,.06);  \draw (4.01,2.5+\i*.13) rectangle ++(.03,.06);}\foreach \x in {5.55,5.65,...,6.05} \draw (\x,4.42) rectangle ++(.03,.06); % 丝印:标注各元件的位置\node[font=\footnotesize] at (1.65,1.55) {ATX MAINBOARD};\node[font=\tiny] at (1.65,1.3) {REV 1.0};\foreach \x/\y/\t in {2.62/3.55/U2,4.85/3.85/U3,4.68/1.85/U4,2.6/9.15/U6,1.6/3.28/BAT1}  \node[font=\tiny] at (\x,\y) {\t};\foreach \x/\y in {.3/9.35,11.75/1.6,.3/1.2} {  \fill (\x,\y) circle (.03);  \draw (\x,\y) circle (.07);} \end{tikzpicture}

一块用 TikZ 写成的主板,播放时实时绘制并开机,无预录画面。

配乐:依据本片的作图计划与主板的开机过程以代码合成,96 BPM。

作图引擎改编自 Giacomo Magnanini《I’m Upping My P(doom)》的第 1 幅图版 · mexicat/pdoom-video(MIT)。图中主板是依照 ATX 规格的外形、安装孔与槽距绘制的通用布局,并非任何品牌的型号;开机时序与发热均为模拟,并非实录。

四宫格