Krbn:一款鉛筆風格3D渲染器,輸出SVG
Krbn是一個基於網絡的引擎,用於非真實感的鉛筆風格渲染,專為抽象和技術場景設計。它通過分析幾何體生成筆觸,而非傳統的光柵化,支持精確的輪廓線、隱藏線處理、交叉陰影線等功能。該項目使用TypeScript編寫,採用MIT許可證,並利用AI輔助開發。
Krbn是一個創新的Web引擎,專注於非真實感的鉛筆風格渲染,將3D場景轉換為可縮放矢量圖形(SVG)。與傳統的圖形引擎不同,Krbn不關心像素顏色,而是模擬藝術家繪製線條的方式——決定哪些線條應該畫,哪些應該省略。
引擎的核心在於推導、分類和樣式化幾何體的筆觸。例如,球體、圓柱體和圓錐體的輪廓不是通過採樣網格邊緣得到,而是通過封閉形式精確計算的圓錐曲線;環面則產生真正的四次曲線。隱藏線不會被Z緩衝區消除,而是被分析地分割為可見和幽靈部分,如同草稿師用淡線保留盒子的遠處邊緣。
透明度工作方式也與紙張相似:沒有alpha通道,交叉陰影線天生半透明,筆畫間的空隙揭示背後的內容。陰影由陰影線密度表示,形狀則由陰影線方向定義,沿着每個表面的曲率流動——球體上的緯線和經線,環面上的極向環,任意網格上的追蹤流線。
精確性是項目的價值觀,而非優化。交集是低次多項式的根;退化情況——切線、重合圓錐曲線、相切尖點——是規範而非邊緣情況。回報是值得信賴的輸出:相同場景始終產生相同、字節一致、可比較的SVG。
另一個反轉是:作者提供語義,引擎提供機制。你標記重要、焦點、角色等屬性,Krbn決定畫什麼、淡化什麼、抽象什麼,如同插畫師決定畫面主題。
引擎還支持動畫:抖動基於穩定的筆觸身份進行種子化,因此手繪線條在幀間不會跳動。軌道攝像機滑動輪廓;沒有閃爍、跳躍或重新分配抖動。
Krbn最初是一個研究原型,現已發展成完整管線:解析圖元目錄和三角形網格通過相同的五階段流水線渲染,包括隱藏線可見性、建議輪廓、手繪抖動和可變寬度筆觸。它採用MIT許可證,使用TypeScript編寫。
項目由作者的童年夢想驅動,利用一次醫療休假終於得以實現。作者坦誠地指出,項目重度依賴AI輔助,但方向、架構和標準由人類決定。代碼通過AI協作編寫,然後像其他代碼一樣經過審查和測試。
功能包括解析圖元(球體、橢球體、圓柱體、圓錐體、平面、多邊形、線、點和環面,每個都有精確輪廓)、自由曲線(螺旋線、貝塞爾曲線和函數圖)、三角形網格、精確隱藏線、相交曲線、建議輪廓、陰影線及色調、曲率跟隨陰影線、手繪抖動、可變筆觸寬度、抽象(細節過小則丟棄、色調量化、重合線合併)、高亮(X射線強調)和確定性SVG輸出。
架構概述:場景由一組FeatureSource組成,每幀運行五階段:特徵提取(輪廓、摺痕、邊界、建議和相交曲線及陰影區域)、可見性分類(將每條曲線分割為可見/隱藏區間)、抽象過濾(丟棄低於閾值的細節、合併、應用重要性)、樣式化(權重、種子化抖動、可變寬度、虛線、幽靈、陰影密度)和發射(採樣分析曲線並交給後端,目前為SVG)。
項目佈局包括src目錄下的數學、曲線、管線、場景、圖元、後端、網格等模塊。開發使用bun安裝依賴,運行類型檢查、構建和測試。
作者還提到了另一個項目AhaBlitz,一個幫助羅馬尼亞學生準備數學考試的遊戲。
總的來説,Krbn是一個獨特且深思熟慮的渲染引擎,挑戰了傳統的光柵化方法,專注於藝術性和精確性。