焦散 (光學)

光學中，焦散現象（caustic）是被彎曲的面或物體反射或折射後，出現光線的包絡，或包絡在另一面上的射影。焦散現象會形成焦散線或焦散面，每條光線都與之相切。如右圖所示，可見明顯的焦散線。這些形狀通常有尖點。

<image>

<image>

<image>

## 解釋

<image>

集中的光線（如陽光）會灼傷人。「焦散」（caustic）一詞來自希臘語καυστός「燒焦」，途經拉丁語causticus「燃燒」。

光線照射在酒杯上時，就會出現焦散現象。玻璃杯會投射出陰影，也會產生彎曲的亮區。在理想情況下（包括平行光射入時）會產生腎形光斑。光線穿過波浪照射在水體上時，通常會形成波紋狀的焦散線。

彩虹是人們熟悉的另一種焦散現象。雨滴對光的散射會使不同波長的光折射成半徑不同的弧線，從而產生彩虹。

## 電腦製圖

電腦圖形學中，大多數現代渲染系統都支持焦散效果，其中有些甚至還支持立體焦散。這是通過光線追蹤光束的可能路徑，並考慮折射與反射實現的；光子映射是其中一種實現方式。立體焦散也可以由體積路徑跟蹤實現。一些電腦圖形系統採用「正向光追」技術，將光子模擬為來自光源，按照規則在環境中反彈。在有足夠光子照射到表面的區域，就會形成焦散，使其比平均區域更亮。「反向光追」則是以相反方式工作，從表面開始，確定是否有通向光源的路徑。這裡 可見一些三維光追焦散的例子。

大多數電腦圖形系統的重點在美學而非物理上精確，這在電腦遊戲的實時渲染中尤為明顯，遊戲中大多使用預先算好的材質。

## 焦散工程

焦散工程描述的是解決電腦圖形學中逆問題的過程。即，在給定圖像的前提下，確定折射或反射光形成圖像的表面。

在這問題的離散版本中，表面會被分為若干微表面，假定是光滑的，即每片微表面反射/折射的光線形成高斯焦散。這意味著，每個微表面都服從高斯分布。每塊微表面的位置與方向由泊松積分與模擬退火相結合的方法得到。

解決連續問題的方法多種多樣，如利用運輸理論中所謂最優運輸（optimal transport）的思想尋找入射光與目標表面之間的映射。獲得這種映射後，利用斯涅爾定律反覆調整，從而優化表面。

### 基於最優運輸的焦散圖案設計

#### 基本原理

控制焦散圖案是相當具有挑戰性的問題，因為表面的微小變化會嚴重影響圖案質量：光線方向在與材料反射/折射時可能會受到其他光線的干擾。這將導致圖案離散、不連續。為了解決這個問題，基於最優運輸的方法是現有的建議方法之一，它可以在光線穿過某種透明材料表面傳播時改變光線方向，從而控制焦散圖案。給定物體/圖案的參考圖像，目標是描述光線折射通過的材料表面，並匯聚到參考圖像的類似圖案。具體方法是重新排列/重新計算初始光強，直到得到優化問題的最小值。

#### 設計管線

這裡進考慮折射焦散，對象可按如下方式確定（不同輸出的反射焦散也有類似原理）：

輸入: 給定光源位置，燈光通過材料傳播後獲得的圖案圖像。

輸出: 接收面（平坦的固體表面，例如：地板、牆壁等）上的焦散圖形。

為實現目標圖案，須將光線射向外部環境的表面加工成一定形狀，以便在另一面實現所需的圖案。

如上述，在輸入圖像的情況下，該過程將產生類似的焦散圖案作為輸出。原則上，有兩個核心階段，又分成兩個子階段：

-

<image>

解最優運輸問題
- 計算目標光分布
- 計算從初始分布到目標分布的映射
- 優化目標表面
- 計算表面的法線表示
- 表面細化

#### 解最優運輸問題

在透明表面發生折射的情況下，例如在清澈水面下出現的圖案，可以觀察到3種主要現象：

- 非常亮（凝聚光強）的點（所謂奇點）
- 連接各點的曲線狀對象
- 光強度較低的區域

未進行計算，我們引入以下3個量來描述圖案的幾何特徵：點奇異性$\Phi_{p}$（度量某些高度集中的點的光強）、線奇異性$\Phi_{c}$（度量某些較亮曲線附近的光強）、輻照度$\Phi_{I}$（測量某個光照不集中區域的強度）。把它們放在一起，下面的函數就定義了目標表面上某一部分Ω的總輻射功率$\Phi_T$：

$$\Phi_T(\Omega) = \textstyle \sum_{i=1}^{N_\delta} \Phi_{p}^i(\Omega) + \sum_{j=1}^{N_\gamma} \Phi_{c}^j(\Omega) + \Phi_I(\Omega)\displaystyle$$

這步之後，就有了兩個輻射通量測量值，分別是輻射源$\Phi_{S}$（由初始化均勻分布）與目標$\Phi_{T}$（上一步計算）。剩下要計算的是從源到目標的映射。為此要先定義幾個量，首先是兩個由機率取值的光強：$\mu_S$（用$\Phi_{S}$除以$\Phi_{S},\ \Phi_{T}$之間聯合區域的通量）、$\mu_T$（用$\Phi_{T}$除以$\Phi_{S},\ \Phi_{T}$之間聯合區域的通量）。其次，由多個點$s_i \in (\Phi_S \cup \Phi_T)$生成原網格，之後再變形。接著，在這組點$s_i$上定義power圖$P_w$（一組power元$C_i^w$），由權向量$\omega$加權。最後，我們的目標是決定要移動哪些power元。考慮面上所有$x$個頂點，找到以下凸函數的最小值$\omega_{min}$，就可得到目標的匹配power圖：

$$f(\omega) = \sum_{s_i \in S} (\omega_i.\mu_S(C_i^0) - \int\limits_{C_i^{\omega}} (\|x - s_i\|^2 - \omega_i)d\mu_T(x))$$

#### 優化目標面

<image>

在解出最優運輸問題後，就得到了頂點。不過，這並沒有提供最終表面形狀的資訊。給定入射光$d_I$、出射光$d_O$及上一步所得的power圖，根據斯涅爾定律可算出曲面法線：

$$n = d_I + {\eta x \over \lVert d_I + \eta d_T \rVert} = d_I + {\eta x \over \lVert d_I + \eta {(x_R - x) \over || x_R - x ||}\rVert}$$

其中

$\eta$：折射係數

$x_R$：解上述最優運輸問題所得目標位置

得到法線表示後，通過最小化以下複合能量函數，實現表面細化：

$$\underset{x}{\operatorname{arg\,max}} \, \omega \, \cdot[ E_{int}, \, E_{dir},\, E_{flux}, \, E_{reg}, \, E_{bar} ]$$

其中

$E_{int} = \sum_{v \in M_T} \lVert n_o - n\rVert_2^2$是將最優運輸所得頂點法線$n_o$與斯涅爾定律計算所得目標法線$n$對齊，所得的積分能量。

$E_{dir} = \sum_{v \in M_T} \lVert x - \textbf{proj}_{(x_S, \,d_I)}(x)\rVert_2^2$：最優傳輸所得網格無法適應不連續面的尖點，這一項用於懲罰這種點，使其不會隨入射光發生顯著變化。

$E_{flux} = \sum_{t \in M_T} \lVert \Phi_T(t) - \Phi_S(t_s)\rVert_2^2$是經過網格中三角形$t$的能量通量。

$E_{reg} = \lVert \textbf{L}\textbf{X}\rVert_2^2$是使三角形形狀規則化、保持形狀良好的能量。

$E_{bar} = \sum_{v \in M_T} \lVert max(0, -log((1 - n_R.(x - x_R)) + d_{TH})\rVert^2$是屏障能量，用於確保曲面變形不會超過一定距離的閾值$d_{TH}$。

### 可變逆渲染焦散圖樣設計

#### 基本原理

逆圖形學是一種觀察圖像數據、推斷所有可能屬性（如三維幾何、光照、材料與運動）生成逼真圖像的方法。傳統電腦圖形學中，為使圖像具有理想的外觀和效果，要賦予圖像所有相關屬性/特徵，這可以說是前向方法；而在焦散設計中，物體（尤其材料表面）的性質並不平凡。給定約束條件就是要獲得的目標圖像。因此，目標是通過觀察、推斷目標圖像，以獲得其性質。這可以視作反向方法。

下面是基本損失函數，解釋了如何優化參數：

$$L(c) = \lVert f(c)-I \rVert^2$$

其中

$L(c)$：損失函數，渲染圖像與目標的均方誤差

c：包含可能影響生成圖像的元素

I：目標圖像

#### 管線設計

<image>

首先，設計目標圖案並計算前向傳遞，得到合成圖樣。然後與目標圖案比較，得到損失。

這是讓合成圖案儘可能與目標圖案相似。然後進行反向傳播，以獲得焦散製造中所需的優化屬性。

#### 生成圖像的元素

- 外觀（Appearance，$A$）：像素表面外觀建模為MipMap紋理與像素亮度之積。
- 幾何（Vertices，$V$）：假定三維場景由三角形近似，參數為頂點$V$。
- 攝像機（Camera，$C$）：焦距、視點、攝像機中心。

還可以有更多元素，如反照率、折射率之類。

#### 一般可變框架

引入U為中間變量，表示2維投影的頂點坐標。這些屬性的梯度可從鏈式法則推導出：

$$\frac{\partial f}{\partial V} = \frac{\partial f}{\partial U} \times \frac{\partial U}{\partial V}$$

$$\frac{\partial f}{\partial V} = \frac{\partial f}{\partial A} \times \frac{\partial A}{\partial V}$$

$$\frac{\partial f}{\partial C} = \frac{\partial f}{\partial U} \times \frac{\partial U}{\partial C}$$

應用隨機梯度下降後，可得最優的$A,\ V,\ C$。隨後，這些量將用於雕刻或銑削材料，以生成目標圖案。

#### 方法

一種常見方法是利用各種深度學習自動微分框架/庫（如TensorFlow、PyTorch、Theano）中執行微分運算的能力。

還有一種方法是用OpenDR框架建立前向圖形模型，並自動獲取模型參數的導數，以進行優化。在獲得優化屬性後，就可以生成目標圖像。OpenDR提供的局部優化方法可納入機率編程框架，可以解決焦散問題。

### 製造

<image>

計算設計出焦散圖樣後，處理過的數據將用作機械加工。

根據所需質量、製造所需工作量和可用的製造方法，可以用各種材料。

- 常見折射材料：壓克力、聚碳酸酯、聚乙烯、玻璃、鑽石
- 常見反射材料：鋼、鐵、鋁、金、銀、鈦、鎳

<image>

焦散圖樣設計有很多應用，如

- 燈具
- 珠寶
- 建築
- 裝飾玻璃生產