基于物理的毛發(fā)渲染-Marschner模型

前言:

本文是我在學(xué)習(xí)Marschner毛發(fā)渲染理論時(shí)做的一點(diǎn)梳理阶冈,同時(shí)呢解藻,也有一些對(duì)學(xué)習(xí)過(guò)程中遇到的有意思的公式背后的物理原理的心得理解孝治,如果你和我一樣出于興趣或是別的什么原因损痰,剛開始接觸毛發(fā)渲染理論福侈,那么不妨看看本文,應(yīng)該會(huì)對(duì)你有所幫助卢未。PS. 又是忙碌的一個(gè)月肪凛,各種擠時(shí)間,好在利用封控在家省下的通勤時(shí)間辽社,于月底前趕完進(jìn)度伟墙,提交了本文,也算落下了一件心事 :)

回顧KajiyaKay模型:

Kajiya Kay發(fā)絲模型是一種不透明的單圓柱滴铅,在垂直于發(fā)絲的朝向(fiber direction)上觀察高光走向戳葵。該模型提出由平行入射光束所激發(fā)的散射中(scattering),高光反射部分(specular)遵循圓錐(cone)分布汉匙,圓錐的朝向就是光線沿發(fā)絲軸向的朝向拱烁,圓錐的中心位于入射光束與發(fā)絲表面的接觸位置;而漫反射(diffuse)部分則正比于觀察角度與發(fā)絲表面夾角的余弦噩翠。具體可參考圖[1]戏自。

圖1

下面來(lái)說(shuō)說(shuō)Kajiya Kay模型的缺點(diǎn):其一是能量不守恒,也就是說(shuō)渲染方程并非是基于物理的伤锚;其二是無(wú)法利用該渲染方程復(fù)現(xiàn)出發(fā)絲的許多其他光學(xué)特性擅笔,這主要是因?yàn)槔碚撃P捅旧淼娜毕荩炔徽J(rèn)為發(fā)絲是一種透明的電介質(zhì),同時(shí)也沒(méi)有考慮到發(fā)絲表面的特殊幾何構(gòu)造)

Marschner模型基礎(chǔ):

Marschner等人在KajiyaKay的基礎(chǔ)上,結(jié)合自己和同行對(duì)人體發(fā)絲的進(jìn)一步觀察實(shí)驗(yàn)猛们,提出了更為全面和準(zhǔn)確的物理與數(shù)學(xué)模型念脯。

圖2

簡(jiǎn)便起見,我們先從解剖學(xué)角度切入阅懦。人體的毛發(fā)可以大體上分為3個(gè)主要成分和二,它們分別是表面的角質(zhì)層(cuticle),填充內(nèi)部大量空間的皮質(zhì)層(cortex)以及最內(nèi)層的髓質(zhì)(medulla)耳胎。首先說(shuō)說(shuō)角質(zhì)惯吕,它是包裹在發(fā)絲最外層的是一種組織,很薄怕午,形如瓦片般層層堆疊废登,互相依附從而構(gòu)成了發(fā)絲的外層幾何形態(tài),上圖是毛發(fā)的經(jīng)向切面郁惜,注意兩側(cè)外沿的鋸齒形太堡距,它們正是角質(zhì)層在2D平面上投影的幾何形狀。相對(duì)于發(fā)絲的軸向(root -> tip)方向兆蕉,這種階梯狀的構(gòu)造會(huì)在局部形成很小的角度偏折α羽戒,使局部微表面的法線沿著逆發(fā)絲朝向(root到tip為正)同樣偏移α度。在宏觀上觀察的結(jié)果就是虎韵,頭發(fā)的高光主部(primary specular peak)會(huì)比原先預(yù)計(jì)出現(xiàn)的位置更加靠向發(fā)絲根部一些易稠,偏移的程度按照反射定律推算應(yīng)該在度左右。

實(shí)驗(yàn)顯示包蓝,在入射光的另一側(cè)存在第二波瓣(secondary lobe)驶社,屬于透過(guò)發(fā)絲上下兩個(gè)表面后再次進(jìn)入空氣的光的分量。引入第二波瓣可謂革新了KajiyaKay模型對(duì)發(fā)絲提出的不透明的假設(shè)测萎。實(shí)際上充斥在角質(zhì)層內(nèi)部的大量皮質(zhì)組織是具有透光性的(特別是對(duì)棕色或金色等淺色發(fā)絲而言)亡电,但是皮質(zhì)層內(nèi)部也沉淀有少許色素(pigment),會(huì)對(duì)某些波長(zhǎng)μ的光波產(chǎn)生吸收作用硅瞧,從而表現(xiàn)出對(duì)出射光的染色份乒。說(shuō)到染色,不得不提在實(shí)驗(yàn)中觀察到的第二高光主部(secondary specular peak)腕唧,它們一般位于入射光的同一側(cè)冒嫡,相較第一高光主部來(lái)說(shuō),會(huì)更靠近發(fā)梢一處(靠近tip)四苇,宏觀上看起來(lái)就像一條染了色的次級(jí)高光帶。論文認(rèn)為這個(gè)第二高光來(lái)自于經(jīng)歷了內(nèi)壁反射后再次折射出的光線分量方咆,具體光路是這樣的:首次折射進(jìn)入皮質(zhì)的光線在發(fā)絲另一個(gè)表面上發(fā)生了反射(角質(zhì)與皮質(zhì)月腋,角質(zhì)與空氣之間),而后再次穿透發(fā)絲外壁,折射進(jìn)入空氣榆骚。由于多次在發(fā)絲內(nèi)部傳播片拍,第二高光的光強(qiáng)會(huì)有所削弱,同時(shí)被皮質(zhì)染色妓肢。此外論文中還提到黑色頭發(fā)這條第二高光帶不明顯(可能是黑色素對(duì)光波吸收能力太強(qiáng)所致吧)捌省。

最后一種頭發(fā)的成分組織叫髓質(zhì)(medulla),它是位于發(fā)絲中心碉钠,且更加致密纲缓,相比皮質(zhì)含有更多的色素。一般認(rèn)為人類發(fā)絲的髓質(zhì)占比較低喊废,因此很多論文在討論毛發(fā)的光照特性時(shí)會(huì)忽略這部分組織祝高,另一方面,近年來(lái)的研究發(fā)現(xiàn)污筷,對(duì)于自然界中的大部分動(dòng)物來(lái)說(shuō)工闺,髓質(zhì)是其毛發(fā)的主要組成部分,也是光照計(jì)算不可忽略的重要成分瓣蛀,這個(gè)后續(xù)有空再說(shuō)陆蟆。

回到圖[2]所示的毛發(fā)橫剖面,Marschner依據(jù)之前的觀察與分析惋增,將毛發(fā)的散射光歸類成三個(gè)最主要的成分叠殷,分別命名為R項(xiàng), TT項(xiàng)以及TRT項(xiàng)。其中字母R代表反射(Reflection)器腋,字母T則代表折射(Transmission)溪猿,字母的排列則代表了光路,非常簡(jiǎn)明形象纫塌。我們知道單獨(dú)一個(gè)R代表了入射既反射的第一高光主部诊县;TT則代表發(fā)絲反面的透射波瓣分部,因?yàn)樗鼇?lái)自入射光經(jīng)過(guò)兩次折射后形成的散射措左;最后TRT表示的是第二高光部依痊,暗示其光路軌跡由一次透射(進(jìn)入皮質(zhì)層)+ 一次反射(在發(fā)絲對(duì)側(cè)的角質(zhì)層前)+ 一次折射(重新進(jìn)入空氣)構(gòu)成。特別注意的是怎披,由于角質(zhì)層微表面固有的傾斜角α胸嘁,會(huì)讓第一高光和第二高光沿著相反的方向偏移,從而在宏觀視覺(jué)層面顯示出明顯分離開來(lái)的兩種顏色的高光帶凉逛,這在圖[2]中也非常明顯的表示了出來(lái)性宏。

基礎(chǔ)數(shù)學(xué)建模:

圖3

在我們真正深入理解Marschner提出毛發(fā)渲染理論前,最好先對(duì)毛發(fā)與光交互的物理過(guò)程有一個(gè)比較清晰的數(shù)學(xué)模型状飞,定義其中的重要符號(hào)與變量毫胜。如圖[3]所示书斜,我們看到右上方有發(fā)絲的3D模型及其橫截面,一張巨大的矩形平面(橫截面或法平面)位于圖[3]中間酵使,此外還有許多分布于其上的矢量和角度荐吉,具體而言它們是:

  • u (軸向矢量):表示沿著發(fā)根朝向發(fā)梢的方向,對(duì)于彎曲的頭發(fā)口渔,它代表在當(dāng)前研究的截面所處位置的切線方向样屠。
  • v-w 平面 (法平面):該平面和方向矢量u合并構(gòu)成右手坐標(biāo)系,平面中v軸方向沿著發(fā)絲橫截面中的長(zhǎng)軸方向缺脉,w方向沿發(fā)絲截面的短軸方向痪欲。(發(fā)絲截面被認(rèn)為是橢圓)
  • ωi(光源方向):定義了計(jì)算過(guò)程中使用的入射光方向,ωiu共同決定了入射光平面(圖中包括了矢量ωi的矩形邊框)
  • θi(入射角枪向,或入射天頂角):定義了入射光與法平面之間的夾角勤揩,該夾角在入射光平面上,從該平面與法平面交線開始秘蛔,轉(zhuǎn)到光源方向?yàn)橹埂?/li>
  • φi(入射方位角):定義為從法平面v軸轉(zhuǎn)向入射平面與法平面交線為止陨亡。
  • ωr (散射光方向):通常這是我們想要求取的目標(biāo)矢量,我們對(duì)其方向和強(qiáng)度都是感興趣深员,不同情況下负蠕,它可以用來(lái)表示R,TT和TRT中的任意一種出射光矢量。
  • θr (散射角倦畅,或散射天頂角):類似θi遮糖,從散射光平面與法平面交線開始,轉(zhuǎn)到散射光矢量為止叠赐。
  • φr (散射方位角):類似φi欲账,從法平面v軸轉(zhuǎn)到兩平面交線為止。

如何在宏觀上描述這種既包含了透射又存在反射的物理過(guò)程呢芭概?通常人們使用BRDF和BTDF來(lái)描述在反射與透射光照計(jì)算時(shí)赛不,出射光亮度與入射光輝度之比,這兩個(gè)分量合并在一起也有個(gè)名字罢洲,叫BSDF(雙向散射分布函數(shù))踢故,不妨定義為S:

1

其中分子中的L表示沿出射方向單位立體角,單位弧長(zhǎng)惹苗,單位時(shí)間內(nèi)發(fā)散出的光能量(通常也叫光強(qiáng)度)殿较;而分母E則是單位弧長(zhǎng)段占有的面積,單位時(shí)間內(nèi)接受到的光能量(也叫輝度)桩蓉。對(duì)于分母E我們還能將其轉(zhuǎn)換為來(lái)自各個(gè)方向入射光亮度的積分淋纲,因此有 dE(ωi) = DL(ωi)cos(θi)dω 的關(guān)系,其中D表示發(fā)絲直徑院究。綜合起來(lái)帚戳,可以得到如下渲染方程的定義:

2

注意方程的積分區(qū)間是全空域(包含了正面的反射+散射玷或,以及背面的透射+散射)。由于毛發(fā)直徑一般是個(gè)常量片任,該公式中的D一般可以忽略。但是也可以看出蔬胯,更加粗的毛發(fā)會(huì)帶來(lái)更強(qiáng)的反射光澤对供。

構(gòu)建散射方程BSDF:

公式(1)和(2)中的散射方程S(ωi,ωr)是一個(gè)4維的函數(shù)氛濒,在不考慮強(qiáng)度的前提下产场,任何一個(gè)方向矢量ω都需要天頂角分量θ和方位角分量φ來(lái)聯(lián)合表示,畢竟我們的要探討的問(wèn)題和現(xiàn)象發(fā)生在三維空間中的發(fā)絲身上舞竿,當(dāng)然期望散射方程S能夠在三維空間中正確描述光線在R京景,TT,TRT分量上的的散布性質(zhì)骗奖。為了降低函數(shù)S的復(fù)雜度确徙,Marschner一文將三維光場(chǎng)的計(jì)算拆分到了2個(gè)2D平面上:

3

如式[3]所示,等號(hào)右邊的第一項(xiàng)是狄拉克函數(shù)执桌,只有當(dāng)θi = -θr時(shí)才返回1鄙皇,其余情況為0。這是基于前人對(duì)勻質(zhì)圓柱體色散研究形成的認(rèn)知:既光束以入射角度θi照射圓柱體表面時(shí)所形成的高光散射只會(huì)分布在以-θi為夾角仰挣,中心在入射點(diǎn)的圓錐面上(cone surface)伴逸,可參考圖[1]。由此可知膘壶,在計(jì)算有價(jià)值的反射光線時(shí)错蝴,只需要關(guān)注-θi附近的反射分布即可,這消除了維度θr的影響颓芭。上式中間項(xiàng)N表示的是發(fā)絲垂截面上不同方位角散射光線形成的概率分布顷锰,梳理這項(xiàng)稍微復(fù)雜點(diǎn),首先是符號(hào)η',它代表修正后的折射系數(shù)(IOR或者Index of Refraction),是關(guān)于投影前折射系數(shù)η與投影角θ的一個(gè)簡(jiǎn)單函數(shù)荠雕。因?yàn)锽ravais' Low告訴我們适揉,對(duì)電介質(zhì)表面來(lái)說(shuō),如果入射和折射向量被投影到了一個(gè)包含法線的平面上(此處為垂截面)唯竹,其投影向量仍然滿足Snell定律,只不過(guò)要使用依據(jù)投影角修正過(guò)的折射系數(shù)η'(θ)替換原有的系數(shù)ηN項(xiàng)中的另外2個(gè)參數(shù)分別是前面提到的入射方位角和出射方位角良狈,也都是在垂截面上的度量值,如果假設(shè)發(fā)絲截面是正圓形笨枯,那么對(duì)于φi來(lái)說(shuō)薪丁,也有相應(yīng)的公式可以推導(dǎo)出φr的方位遇西,這部分是后話了。最后我們看到等式右邊還除以了兩個(gè)cos(θ)严嗜,這是針對(duì)對(duì)立體角投影的修正粱檀,每個(gè)cos(θ)各自作用于一個(gè)方向上的投影。

4

上式是更加一般的形式漫玄,Marschner用M項(xiàng)代替了原先的狄拉克函數(shù)茄蚯,用以專職描述發(fā)絲橫切面(軸向切面,參考圖[2])上的散射分布睦优;另一方面N項(xiàng)維持形式不變渗常,專職描述垂截面(法平面)上光線散射分布的情況,此處不再贅述汗盘。

有意思的地方來(lái)了皱碘,為了找出N項(xiàng)的正確形式,Marschner一文引出了如下圖所示的法平面光路分析:

圖4

這張圖有幾層含義隐孽,我們從最簡(jiǎn)明直接的光路傳播開始癌椿。首先注意到光線從點(diǎn)L出發(fā)的,入射到發(fā)絲截面上的一點(diǎn)A后發(fā)生了折射和反射缓醋。其中的反射矢量沿著AR0返回空氣介質(zhì)如失,折射矢量則沿著AB射向發(fā)絲內(nèi)壁的另一側(cè),通過(guò)折射形成TT分量送粱,沿BR1返回空氣褪贵,最后在內(nèi)壁形成的反射矢量BC則于發(fā)絲另一表面C點(diǎn)處形成TRT分量,完成出射任務(wù)抗俄。我們定義入射角為γi脆丁,折射角為γt,那么有以下若干關(guān)鍵角度關(guān)系:內(nèi)壁反射角 ∠ABC = 2γt动雹,形成TT分量的折射出射角為γi(沿矢量BR1方向出射)槽卫,同樣形成TRT分量的入射和出射角亦是γtγi

我們定義光源矢量為AL(既從A指向L)胰蝠,順時(shí)針?lè)较驗(yàn)榉轿唤堑呢?fù)方向歼培,那么有:

  • R:AL - 2γi
  • TT:AL + π + 2*(γt - γi)
  • TRT:AL + π + 2*(γt - γi) + (π + 2γt)

簡(jiǎn)單解釋一下,首次的反射方向AR0茸塞,也就是R分量的方向非常容易理解躲庄,它等于在光源矢量AL的基礎(chǔ)上繞著順時(shí)針?lè)较蛐D(zhuǎn)兩倍的γi角度,因?yàn)槎x了順時(shí)針?lè)较驗(yàn)榻嵌蓉?fù)方向钾虐,所以我們得到AR0等于在AL方向上作用一個(gè) -2γi角度的選擇噪窘。

當(dāng)發(fā)生一次折射時(shí),從圖中可以看出光線會(huì)從折射前的狀態(tài)(入射光線LA)沿著順時(shí)針?lè)较颍ń嵌饶娣较颍┢垡粋€(gè) -(γi - γt) 度效扫,或者記成(γt - γi)倔监,在形成TT前直砂,光線必然經(jīng)理了2回類似的折射,所以最終TT分量的出射角包含有2*(γt - γi) 浩习,至于上面為何還有一個(gè)落單的π静暂?那是因?yàn)?strong>AL方向是光源方向,要得到入射方向瘦锹,必須對(duì)AL矢量180°掉轉(zhuǎn)朝向籍嘹。

最后的TRT分量類似上面提及的TT,也經(jīng)歷了兩次折射弯院,同時(shí)由于包含了一次反射,需要使用一個(gè)(π + 2γt)轉(zhuǎn)向操作來(lái)描述泪掀,其意義在于先對(duì)入射光線AB掉頭成為BA听绳,然后讓BA沿著逆時(shí)針(正角度)方向旋轉(zhuǎn)2γt度,怎么樣异赫,結(jié)合圖示很容易理解吧椅挣!

Marschner使用了一個(gè)非常聰明的公式統(tǒng)一了上式光線路徑的轉(zhuǎn)變:

5

它的參數(shù)p代表迭代次數(shù),比如對(duì)于R來(lái)說(shuō)p = 0塔拳,TT時(shí) p = 1鼠证,TRT則意味著p = 2,Marschner在論文里認(rèn)為當(dāng) p > 2 時(shí)產(chǎn)生的影響可以忽略不計(jì)靠抑。至于上式中的變量h量九,其定義是入射光線到圓心的最短距離,可以參考圖示中的線段h颂碧。由于預(yù)設(shè)了發(fā)絲半徑為單位1(unit length)荠列,由三角函數(shù)我們可以很容易得到 sin(γi) = h,同時(shí)通過(guò)Snell定律也能得到 η' * sin(γt) = 1 * sin(γi) = h载城。由此可知肌似,引入變量h的意義在于將彼此獨(dú)立的變量γtγi統(tǒng)一到一個(gè)變量名下,以便后續(xù)計(jì)算诉瓦。

反過(guò)來(lái)川队,如果我們已知入射和出射方位角φiφr,那么角度變化量 φ = φr - φi也是已知的了睬澡,通過(guò)解算方程 Φ(p, h) - φ = 0固额,可以得到h的具體數(shù)值。論文中提及猴贰,當(dāng)p = 0 or 1 時(shí)对雪,這樣的方程求解只有一個(gè)根,但是當(dāng) p = 2 時(shí)米绕,方程會(huì)有1個(gè)或3個(gè)根瑟捣,而更多得根代表了更多的有效光路(ray path)馋艺,光路互相疊加會(huì)帶來(lái)能量的不連續(xù),Marschner認(rèn)為這些多光路的解析解在物理上代表了焦散(caustic)現(xiàn)象迈套,同時(shí)也是我們?cè)诤暧^上感到發(fā)絲細(xì)節(jié)處帶有閃爍(glint)的源頭捐祠。

圖[4]中的第二層含義是能量分布的守恒性,既對(duì)于一塊平坦的微表面而言桑李,所有入射光能等于所有出射光能(不考慮吸收的前提下)踱蛀。參考如下公式:

6

若定義單位弧長(zhǎng)的輝度為ê ,在采用了半徑為單位1的發(fā)絲模型中贵白,單位長(zhǎng)度的輻照度E可以寫作:E(h) = ê/2率拒,其中 2 = 2 * 1 unit,既兩倍的圓的半徑禁荒。那么上面雙等式中間項(xiàng)表示的自然是對(duì)投影到發(fā)絲截面“邊條”上(此時(shí)為1維)的輻射照度E在發(fā)絲直徑線段上的微分猬膨,它等于左側(cè)項(xiàng)所表示的:在以h確立的出射立體角方向上,出射光亮度對(duì)方位角的微分呛伴。多少有點(diǎn)拗口勃痴,但是本質(zhì)意思就是利用了能量守恒定理來(lái)把弧度相關(guān)的出射光亮度與弧度相關(guān)的入射光輝度聯(lián)系在了一起(目前還沒(méi)考慮吸收,當(dāng)然電介質(zhì)一般認(rèn)為吸收不多啦)热康。

有了上述聯(lián)系沛申,再加上吸收系數(shù)T以及菲涅爾項(xiàng)F就能得到比較完整的N項(xiàng)了。增加后大致上上式可轉(zhuǎn)換為如下形式:

7

當(dāng)p = 0時(shí)姐军,A項(xiàng)的形式可以方便獲得:

8

此時(shí)沒(méi)有任何光路經(jīng)過(guò)發(fā)絲內(nèi)部的皮質(zhì)層铁材,故忽略吸收分量,只余下比較傳統(tǒng)的Fresnel項(xiàng)庶弃,它是個(gè)關(guān)于表面介質(zhì)系數(shù)以及入射角度的函數(shù)衫贬,記作F

當(dāng)p > 0時(shí)歇攻,Marschner給出了如下近似:

9

該式模擬了p次菲涅爾反射的耗損固惯,同時(shí)最后一項(xiàng)T對(duì)進(jìn)入發(fā)絲內(nèi)部的光路長(zhǎng)度做了估算,并據(jù)此對(duì)光能進(jìn)行必要的衰減(模擬吸收)缴守,特別得葬毫,依據(jù)三角函數(shù)可近似獲取內(nèi)部光路長(zhǎng)度的計(jì)算公式,它等于發(fā)絲的半徑乘以 2 + cos(2γt)屡穗,本文隨后會(huì)詳細(xì)闡明這個(gè)公式的物理意義贴捡,此處先略過(guò)。

綜合起來(lái)村砂,完整的垂截面(法平面)上的散射方程子項(xiàng)N可以做如下表示:

10

上式第一項(xiàng)告訴我們烂斋,N項(xiàng)將首先按照 p(折射)次數(shù)劃分為NrNtt以及Ntrt三項(xiàng)。上式中第二項(xiàng)的求和區(qū)間為所有可能的光路汛骂,此處不用h的原因是因?yàn)榻o定一個(gè)h可能會(huì)產(chǎn)生多個(gè)解(root)罕模,而每個(gè)解都將對(duì)應(yīng)一條合法的光路,這點(diǎn)前文已經(jīng)提及過(guò)帘瞭。

解釋了略顯麻煩的垂切面分量N之后淑掌,再來(lái)看軸切面分量M會(huì)發(fā)現(xiàn)非常簡(jiǎn)單。前文已經(jīng)說(shuō)過(guò)蝶念,基于圓柱的觀察結(jié)果是所有的散射光線分布在鏡面反射方向的一個(gè)圓椎上抛腕,考慮到角質(zhì)層特有的幾何構(gòu)造會(huì)產(chǎn)生一定量的有向偏移,Marschner等人做了兩件簡(jiǎn)單暴力且有效的事情媒殉,第一就是通過(guò)實(shí)驗(yàn)觀察記錄軸向散射的具體分布担敌,從而解算出若干具有指標(biāo)意義的常量;第二廷蓉,采用歸一化高斯分布函數(shù)作為基礎(chǔ)柄错,采用第一步獲取到的參數(shù)進(jìn)行擬合,從而模擬出預(yù)期散射分布表達(dá)式苦酱。

11

具體參考上式,其中函數(shù)g為剛剛提及的歸一化高斯函數(shù)给猾,θh是入射和出射天頂角的半角值(這再次說(shuō)明圓柱散射只在鏡像反射角附近有意義疫萤,也就是只需要知道入射或反射角中的一個(gè)量即可,此處作者選用了它們二者和的一半來(lái)表征)敢伸,αr表示軸向單次反射波瓣的偏移角扯饶,一般為-5°~-10°之間,αtt表示TT的出射波瓣偏移池颈,大約為-αr/2尾序,而最后的αtrt自然是TRT的出射波瓣偏移,被作者定義為大約-3αr/2左右的度數(shù)躯砰。最后βr每币,βttβtrt表示的是相關(guān)標(biāo)準(zhǔn)差(standard deviation)具體物理量亦可通過(guò)原文查詢,此處不再贅述琢歇。

我們來(lái)總結(jié)一下到目前為止梳理的部分重要內(nèi)容:Marschner理論認(rèn)為一束打到發(fā)絲上的光線會(huì)被分散到以入射點(diǎn)為中心兰怠,沿著發(fā)絲軸向的一個(gè)圓錐面上,而在面上的散射光線可以被歸納為三個(gè)主要的分量李茫,它們是來(lái)自一次反射的R分量揭保,經(jīng)過(guò)兩次透射后從另一側(cè)出射的TT分量,以及透射并在內(nèi)部上形成反射而后再次出射的TRT分量魄宏。對(duì)于每一個(gè)分量秸侣,Marschner將復(fù)雜的空間關(guān)系拆分到兩個(gè)2D平面上,它們分別是垂直于發(fā)絲的法平面投影以及平行與發(fā)絲軸向的橫切面投影,各自以NM表示味榛,控制參數(shù)分別是天頂角θ和方位角φ椭坚。于是我們有了如下形式的BSDF方程:

12

實(shí)時(shí)渲染之路

從理論來(lái)到實(shí)踐還有不少路要走,特別是在實(shí)時(shí)渲染領(lǐng)域励负,我們沒(méi)有那么多資源去逐根逐點(diǎn)計(jì)算光路藕溅,也不會(huì)有很多算力可以分給復(fù)雜的采樣積分運(yùn)算,所有就必須靈活取舍继榆,找到可接受的近似來(lái)加速渲染巾表。

多重散射(Multiple scattering)

這個(gè)概念是之前梳理Marshner論文時(shí)不曾提及的部分,然而對(duì)于非光照模型來(lái)說(shuō)它又至關(guān)重要略吨。多重散射簡(jiǎn)言之就是那些來(lái)自發(fā)絲與發(fā)絲之間的多次彈射并最終落入攝像機(jī)的那部分光能集币。頭發(fā)并不是一根根孤立的個(gè)體,而是一簇簇的發(fā)絲聚合翠忠,多重散射的本質(zhì)就是以發(fā)絲聚合體為單位所發(fā)出的一種漫反射(diffuse)鞠苟,理論上它沒(méi)有特別得傳播方向,理想狀況下就如同普通散射一般秽之,多重散射會(huì)與發(fā)絲簇的宏觀法線以及入射光線方向夾角的余弦相關(guān)当娱,此外還可以納入陰影強(qiáng)度 (shadow),并考慮上頭發(fā)的基礎(chǔ)顏色考榨。業(yè)界相對(duì)流行的模擬方案是UE4提出的基于Kajiya Kay模型改進(jìn)來(lái)的計(jì)算公式:

13

簡(jiǎn)單羅列下幾個(gè)關(guān)鍵量的含義:

  • albedo:頭發(fā)基礎(chǔ)色跨细。
  • n:被UE4定義為fake normal,可用公式 n = normalize(v - N * (N dot v)) 計(jì)算得到河质,該公式中的矢量N指代發(fā)絲宏觀法線冀惭。
  • shadow:來(lái)自采樣獲得的光照衰減系數(shù),是個(gè)0~1之間的數(shù)值掀鹅。
  • Luma:從albedo中提取的lum值散休,可參考公式:dot(albedo, (.3,.59,.11))計(jì)算獲得。

參考代碼實(shí)現(xiàn):

//c(olor) or albedo, m(etallic), l(ight), v(iew), n(ormal), s(hadow)
float3 KajiyaDiffuse(float3 C, float m, float3 l, float3 v, float3 n, float s){
    float KajiyaDiffuse = 1 - abs(dot(n, l));
    float3 fakeNormal = normalize(v - n * dot(v, n));
    n = fakeNormal;
    float Wrap = 1;
    float NoL = saturate((dot(n ,l) + Wrap) / pow2(1 + Wrap));
    //漫反射項(xiàng)的另一種近似乐尊,考慮了表面金屬度
    float diffuseScatter = (1 / UNITY_PI) * lerp(NoL, KajiyaDiffuse, 0.33) * m; 
    float3 Luminance = (0.3f, 0.59f, 0.11f);
    float luma = dot(C, Luminance);
    float3 ScatterTint = pow(abs(C / luma), 1 - s);
    return sqrt(abs(C)) * diffuseScatter * ScatterTint;
}

軸向散射函數(shù)M

文獻(xiàn)里一般會(huì)叫 Longitudinal scattering function戚丸,在Marschner的原文里給出的建議是使用高斯函數(shù)G作為描述散射在圓錐面上光線的分布。UE4在2016的文章里也提到了他們的方案科吭,對(duì)于第一次反射分量Mr昏滴,他們采用了效果更好但是更加昂貴的Weta模型[1],同時(shí)參考如下:

14

簡(jiǎn)單說(shuō)明下參數(shù):

  • v = λ^2
  • I (cosθicosθr/v) 是第一類修正貝塞爾函數(shù)(Modified Bessel function of first kind)
  • λ 一般認(rèn)為是與roughness有關(guān)的參數(shù)对人,也可以認(rèn)為是角質(zhì)層傾斜角寬度(longitudinal width)

UE4之所以不惜代價(jià)在計(jì)算Mr時(shí)采用Weta的方案谣殊,主要在于這個(gè)模型是能量守恒的,對(duì)于基于物理的環(huán)境光牺弄,能給出相比高斯G更加真實(shí)的輻射亮度估計(jì)斜筐。

對(duì)于MttMtrt這兩項(xiàng),UE4與Unity的HDRP都采用了基于高斯模型饭豹,具體參考如下公式:

15

同樣說(shuō)明一下參數(shù):

  • λ : 與roughness相關(guān)的參數(shù)
  • α :軸向的偏移角,一般可以暴露給藝術(shù)家調(diào)節(jié)

基本上就是利用了高斯函數(shù)的一些特性抚恒,例如:

  • 連續(xù)性,光線分布不間斷络拌。
  • 期望(既偏移角α)處達(dá)到極致俭驮,用以模擬高光在角質(zhì)層瓦片結(jié)構(gòu)的驅(qū)使下的角度偏移。
  • 用關(guān)聯(lián)粗糙度的參數(shù)控制方差春贸,使得相對(duì)粗糙的發(fā)質(zhì)能夠得到更加均勻的散射混萝,而光滑的發(fā)質(zhì)高光集中的特性。

參考代碼實(shí)現(xiàn):

Mp = Hair_G(roughness, ThetaH - Alpha[0]);

//Gaussian Distribution for M term
//B->λ萍恕, theta->α
inline float Hair_G(float B, float Theta)
{
    return exp(-0.5 * square(Theta) / (B*B)) / (SQRT2PI * B);
}

垂面(方位角)散射函數(shù)N

文獻(xiàn)里這部分叫做Azimuthal scattering function逸嘀,這個(gè)函數(shù)與出射,入射光線在垂截面上的投影矢量有關(guān)允粤,如果涉及到透射過(guò)程崭倘,那么還會(huì)和發(fā)絲的折射率相關(guān)(不考慮吸收)。和M項(xiàng)類似类垫,求取N項(xiàng)前會(huì)拆分成Nr司光,NttNtrt三項(xiàng)分別進(jìn)行。

Nr

Nr在三個(gè)垂面散射函數(shù)中悉患,屬于相對(duì)簡(jiǎn)單同時(shí)很獨(dú)特的一種飘庄,值得單獨(dú)拿出來(lái)說(shuō)說(shuō)。以UE4為例:Nr(φ) ∝ cos(φ/2)购撼,既入射光線經(jīng)表面的直接反射(R)分量在法平面上的投影所形成的概率分布,將正比于方位角φ一半的余弦值谴仙,具體有如下公式:

16

參數(shù):

  • φ = φr - φi迂求, 既入射和出射光線在法平面上投影線段的夾角

在討論上述公式的幾何意義前首先需要明確一個(gè)之前沒(méi)有清晰闡明的認(rèn)知:我們所考察的每一條入射光束(如下圖矢量LO)在到達(dá)發(fā)絲表面后都將會(huì)以入射點(diǎn)(o)為中心,向四周散射開去晃跺,形成一個(gè)圓錐揩局,如下圖所示:

圖5

首先我們引出三條典型的反射光線oaoboc掀虎,同時(shí)定義入射光線Lo與發(fā)絲軸線u這兩個(gè)向量構(gòu)成平面A凌盯。假設(shè)中間的反射光線oa也位于平面A內(nèi),說(shuō)明向量Lo, oa和軸線u共面烹玉,又因?yàn)檩S線u垂直于法平面驰怎,說(shuō)明平面A也垂直于法平面,從而我們可以判斷:入射光線Lo與出射光線oa在垂截面(法平面)上投影矢量形成的方位角將會(huì)完全相等二打,也就是:φr - φi = 0. 依據(jù)Nr的定義(cos(0) = 1)县忌,反射光線oa在它的眾多兄弟姐妹中(oboc等)是亮度最高的那一個(gè)(取到極大值)。至于圖中向左右側(cè)偏移的反射光線oboa症杏,它們必然不在平面A上装获,且隨著向左右偏移得越遠(yuǎn),反射矢量在法平面上的投影向量所形成的方位角也會(huì)慢慢遠(yuǎn)離它們的兄弟oa所形成的方位角厉颤,結(jié)果就是φ = φr - φi將會(huì)逐漸增大穴豫,直到發(fā)絲的另一側(cè),此時(shí)φ = π逼友,對(duì)應(yīng)cos(φ/2) = cos(π/2) = 0精肃,從而形成最弱的反射強(qiáng)度(取到極小值)。這就是為什么Nr使用cos(φ/2)近似是可行的翁逞,它模擬了光線隨方位角變化而衰減的物理現(xiàn)象肋杖,雖然不一定精確。

Ntt和Ntrt

一旦折射光進(jìn)入發(fā)絲內(nèi)部后挖函,光路解算起來(lái)就會(huì)變得相對(duì)復(fù)雜許多状植,相信大家在讀Marschner原文有關(guān)內(nèi)容時(shí)就有所體會(huì)≡勾總體來(lái)說(shuō)提升的復(fù)雜度落在兩處津畸,其一是衰減項(xiàng)(Attenuation term),其二是方位角分布函數(shù)Dp

17

上式積分號(hào)中的A就是衰減項(xiàng)必怜,它通橙馔兀可以拆分為兩部分,一部分因折射定律引起梳庆,通過(guò)折射率η和入射角計(jì)算光線折射或反射的占比暖途,可由菲涅爾項(xiàng)F定義;另一部分作為吸收項(xiàng)(absorption term)膏执,用于估算光能在發(fā)絲內(nèi)部傳播時(shí)被色素吸收從而衰減的程度驻售,它是一個(gè)由光線波長(zhǎng)μ與長(zhǎng)度h(入射光所在直線到圓心的距離)定義的函數(shù)T,后續(xù)會(huì)展開更米。

至于積分式中的方位角分布函數(shù)Dp欺栗,我們可以認(rèn)為它是一個(gè)均值為0的高斯分布,當(dāng)D的入?yún)?征峦,既 φ - Phi(p, h) = 0 時(shí)取到極大值迟几。這里被減數(shù)φ表示待測(cè)的方位角變化量(φr - φi),減數(shù)是一個(gè)函數(shù)栏笆,它通過(guò)確定內(nèi)部反射次數(shù)(由p確定)以及原始入射角度(由h確定)类腮,可以計(jì)算出當(dāng)前光路的實(shí)際出射方向。于是在一次積分片段中蛉加,當(dāng)給定一個(gè)h存哲,我們能通過(guò)Dp估算出該光路對(duì)我們的目標(biāo)方位角φr的貢獻(xiàn)度因宇,將全部的光路加總起來(lái)(通過(guò)對(duì)h在-1到1區(qū)間積分來(lái)實(shí)現(xiàn))后,就能獲得目標(biāo)出射方向的最終光場(chǎng)分布了祟偷。以上就是d‘Eon在[1]中通過(guò)Weta模型求解發(fā)絲內(nèi)部光路所得的積分表達(dá)式察滑,已經(jīng)非常的簡(jiǎn)潔了,只是對(duì)于實(shí)時(shí)渲染的需求來(lái)說(shuō)任然太過(guò)復(fù)雜和昂貴修肠,我們需要更簡(jiǎn)潔近似贺辰。

菲涅爾衰減F

先說(shuō)菲涅爾衰減F,這里主要參考UE4的經(jīng)驗(yàn)嵌施,在對(duì)比了兩種相近的模型:d'Eon對(duì)Cook Torrence標(biāo)準(zhǔn)模型適用于圓柱形坐標(biāo)系的修改版饲化,和Marschner利用Bravais指數(shù)進(jìn)行推導(dǎo)的模型,最終選擇了標(biāo)準(zhǔn)模型:

18

f作為經(jīng)典菲涅爾計(jì)算公式吗伤,具有如下入?yún)⑿问剑?/p>

19

其中cos(arcsin(h))是為了計(jì)算h邊對(duì)角的余弦值吃靠,即為求直角三角形另一條直角邊的值,因此計(jì)算公式也可以寫成這樣:

20

當(dāng)然在實(shí)際計(jì)算中足淆,一般選擇Schlick近似來(lái)模擬菲涅爾公式f

21

其中η為頭發(fā)的IOR巢块,具有測(cè)定值1.55,故F0大約為0.0465巧号。
為了能求取h族奢,我們需要先定義和推導(dǎo)以下公式:

22

符號(hào)η'參考上文梳理Marschner投影折射率的段落,它是在法平面投影上的折射率丹鸿。上式第一項(xiàng)α是給出的一個(gè)定義越走,后續(xù)會(huì)用。而中間項(xiàng)η'的定義則是UE4提出的改良版折射率計(jì)算公式靠欢,從中我們可以看出廊敌,η'是有關(guān)原始折射系數(shù)η意思入射出射角關(guān)系θd的函數(shù)。鑒于η = 1.55门怪,η'可以近似成(c/X) + c'X 這樣兩項(xiàng)之和庭敦,X~cosθd

float eta_prime = 1.19 / CosThetaD + 0.36 * CosThetaD;

UE4依據(jù)Weta模型用于計(jì)算htt的表達(dá)式:

23

應(yīng)用了一些我們熟悉的三角函數(shù)技巧(主要是二倍角公式)薪缆,將之變化為如下形式,注意此時(shí)等式兩倍皆為正值:

24

然而這個(gè)形式UE4任然不滿足伞广,認(rèn)為其既復(fù)雜又昂貴拣帽,于是一頓擬合和近似后給出了如下的最終形式:

25

這個(gè)公式中的所有參數(shù)我們或者已知,或者在上面已經(jīng)有了近似的獲取方法嚼锄,所以此時(shí)我們完成了在p = 1情況下h求解的梳理减拭,雖然這個(gè)近似htt無(wú)法在負(fù)數(shù)域正確表示(近似過(guò)程中舍棄了符號(hào)sign),好在后續(xù)對(duì)h的應(yīng)用中并沒(méi)有出現(xiàn)對(duì)符號(hào)的任何需求区丑,相安無(wú)事拧粪。

float a = rcp(eta_prime);
float Htt = CosHalfPhi * (1 + a * (0.6 - 0.8 * CosPhi));

至于p = 2時(shí)修陡,也就是Htrt,UE4直接給了個(gè)常量 Htrt = sqrt(3) /2 來(lái)參與Fresnel衰減計(jì)算可霎。

總結(jié)一下魄鸦,各部分菲涅爾項(xiàng)計(jì)算代碼可參考如下:

//R
//補(bǔ)充說(shuō)下,R項(xiàng)不涉及折射癣朗,所以無(wú)需考慮投影折射率η'和間距h的影響拾因,只需回歸純粹的BRDF公式中F項(xiàng)在三維空間中的定義即可
//入?yún)qrt(0.5f + 0.5f * LdotV)計(jì)算所得是VdotH的值,既cos(L與V夾角的一半)旷余,符合Schlick Fresnel關(guān)于cos(angle)參數(shù)的定義 
float FRValue = Fresnel(sqrt(saturate(0.5f + 0.5f * LdotV)));
//TT
//通過(guò)計(jì)算獲得的Htt和cosθd構(gòu)成投影方向cos(angle)
float FTTValue = FAttenTT(Fresnel(cosThetaD * sqrt(saturate(1 - Htt * Htt))));
//TRT
//可見這種情況下Htrt被常數(shù)替代了
float FTRTValue = FAttenTRT(Fresnel(cosThetaD * 0.5f));

//Fp in Ap
//p = R, FR = fresnel. p = TT, FTT = fattentt. p = TRT, FTRT = fattentrt
float Fresnel(float cosAngle, float ior = 1.55){
    float F0 = pow2((1 - ior) / (1 + ior));
    return F0 + (1 - F0) * pow5(1 - cosAngle);
}
float FAttenTT(float Fresnel){
    return pow2(1 - Fresnel);
}
float FAttenTRT(float Fresnel){
    return pow2(1 - Fresnel) * Fresnel;
}

體積吸收項(xiàng)T

這項(xiàng)的最主要作用是為頭發(fā)提供染色绢记。我們回顧下電介質(zhì)固有色的物理意義:當(dāng)光線入射到電介質(zhì)表面,少部分光能被直接反射正卧,大量的光線會(huì)通過(guò)折射進(jìn)入物質(zhì)內(nèi)部蠢熄,其中一部分波長(zhǎng)的光子容易被散布在物體內(nèi)部的金屬離子或其他組織(色素)吸收從而完成染色,最后在若干次反射后再次折射出物體表面炉旷,形成散射光被人眼或攝像機(jī)捕捉到签孔。由此可見,吸收項(xiàng)T一定會(huì)帶有光波長(zhǎng)μ相關(guān)的參數(shù)以便對(duì)輸出的顏色進(jìn)行控制砾跃,此外T項(xiàng)還需要考慮在物質(zhì)內(nèi)傳播的路徑長(zhǎng)度骏啰,這和入射角相關(guān)(θh),也和反射次數(shù)有關(guān)(TT或TRT)抽高。最后非常明確的一點(diǎn)判耕,R項(xiàng)的體積吸收項(xiàng) T = 1,沒(méi)有衰減翘骂!

以下是Marschner在論文中提出的吸收項(xiàng)T的形式:

26

結(jié)合圖[4]并利用余弦函數(shù)我們可以很輕易知道在垂截面上壁熄,單支投影光路的長(zhǎng)度為 2cos(γt),單次入射的最大光路(只考慮到p = 2)為 2 * 2cos(γt) = 4cos(γt)碳竟。這個(gè)函數(shù)隨著γ變化有正有負(fù)會(huì)比較麻煩草丧,所以Marschner使用 2 + 2cos(2γt)做了近似,確保γ無(wú)論處于什么角度莹桅,光路的長(zhǎng)度總是處在0~4倍的發(fā)絲半斤之間昌执。這部分投影光路長(zhǎng)度的估計(jì)對(duì)應(yīng)上式冪指數(shù)的分子上:1+cos(2γt)部分,注意嘗試2已經(jīng)被提出诈泼。分子上的cos(θt)也很好理解懂拾,因?yàn)閯偛诺拈L(zhǎng)度只是法平面投影長(zhǎng)度,考慮到光路在軸向上的傾角必然造成實(shí)際光路長(zhǎng)度的放大铐达,我們自然需要此彌補(bǔ)上這些軸向長(zhǎng)度損失岖赋。

上式中的σ被Marschner定義為體積吸收因子,也就是路徑傳播越長(zhǎng)瓮孙,對(duì)顏色中某些分量的衰減就越大的意思唐断。

至于EXP這種指數(shù)形式选脊,可以參考下圖對(duì)T(σ,h)的模擬結(jié)果脸甘,橫軸為γt恳啥,縱軸為輸出的衰減系數(shù):

圖6

當(dāng)折射角γt = 0時(shí),表示光線垂直入射斤程,光線經(jīng)過(guò)圓形到另一側(cè)內(nèi)部后原路返回角寸,整個(gè)過(guò)程走了4 * radius的長(zhǎng)度,認(rèn)為吸收幅度最大忿墅,所有輸出的衰減系數(shù)最低扁藕。當(dāng)入射角γt = π/2時(shí),代表入射光線是以掠射角度照射頭發(fā)的疚脐,此時(shí)可以認(rèn)為折射不發(fā)生亿柑,或者只在很小的局部發(fā)生,故沒(méi)有顏色衰減棍弄,返回值如圖所示為1望薄。

OK,明白了原理之后呼畸,我們?cè)倏纯碪E4對(duì)此項(xiàng)做出的改進(jìn)痕支,首先他們做優(yōu)化的起點(diǎn)是皮克斯(Pixar)提出的簡(jiǎn)化版T項(xiàng):

27

其中ζ(C)是輸入顏色的整體波長(zhǎng)。
UE4認(rèn)為折射角γt是可以進(jìn)一步求解和替換的蛮原,參考如下公式使其變成包含已知量hη'的方程:

28

然后使用頭發(fā)的基礎(chǔ)色(baseColorC替換ζ(C)卧须,并且?guī)肷鲜胶蟮玫搅艘粋€(gè)新的T項(xiàng)(只針對(duì)tt分量):

29

帶入γt有些技巧,需要構(gòu)建一個(gè)對(duì)邊是h儒陨,臨邊是η'花嘶,斜邊為sqrt(h^2 + η'^2)的三角形,而且要帶入之前α = 1/η'的定義蹦漠,此處不再贅述椭员。

對(duì)于p = 2,既TRT分量來(lái)說(shuō)笛园,UE4直接舍去了冪指數(shù)分子的部分隘击,改用常數(shù)項(xiàng)模擬:

30

最終計(jì)算所得的T項(xiàng)是一個(gè)三維的衰減系數(shù),結(jié)合[9]式所示研铆,它與菲涅爾衰減組成了我們?cè)赱17]式中的A項(xiàng)埋同。

工程中相關(guān)shader代碼如下:

float3 Ttt(float h, float3 thetaD, float cosPhi, float cosHalfPhi, float3 C){
    float power = sqrt(1 - pow2(hTT(cosPhi, cosHalfPhi, thetaD)) * pow2(1 /  ModifiedIor(thetaD))) / (2 * cos(thetaD));
    return pow(C, power);
}

float3 Ttrt(float3 thetaD, float3 C){
    float power = 0.8 / cos(thetaD);
    return pow(C, power);
}

方位角分布函數(shù)Dp

有關(guān)方位角分布函數(shù)的具體物理意義前文已經(jīng)詳細(xì)描述過(guò),此處不再贅述蚜印,對(duì)其的實(shí)現(xiàn)有很多種:基于正態(tài)分布的,基于Cauchy分布的留量,也有基于Logistic分布的窄赋,UE4在2016年的文章中提出了自己的分布公式哟冬,據(jù)說(shuō)靈感來(lái)自于觀察皮克斯先前提出的基于Logistic分布的分布函數(shù),通過(guò)產(chǎn)生各種高斯函數(shù)的逼近忆绰,最終確定下了如下以cosφ為變量的近似高斯分布表達(dá)式浩峡,分別是當(dāng)p = 1p = 2時(shí)的形式:

31

而下圖是原文給出的Ntt輸出曲線:

圖7

不難發(fā)現(xiàn)函數(shù)大約在φ = π時(shí)取到極大值,也就是當(dāng)入射方位角φi與出射方位角φr相差了一個(gè)π時(shí)错敢,可以想象翰灾,此情況屬于光線直接對(duì)穿發(fā)絲,最終能夠透射出光能確實(shí)是最大的稚茅。

NttNtrt這兩個(gè)分布函數(shù)代碼實(shí)現(xiàn)如下:

//Ntt & Ntrt
//UE4 approx
float NTT(float cosPhi){
    return exp(-3.65 * cosPhi - 3.98);
}
float NTRT(float cosPhi){
    return exp(17 * cosPhi - 16.78);
}

總結(jié)

本文梳理了基于Marschner模型的理論依據(jù)和部分工程實(shí)現(xiàn)纸淮,但對(duì)毛發(fā)渲染來(lái)說(shuō)仍然是管中窺豹,后續(xù)有時(shí)間我會(huì)跟進(jìn)毛發(fā)渲染的一些其他領(lǐng)域亚享,如毛發(fā)幾何生成(卡帶,線段等)咽块,毛發(fā)頂點(diǎn)/骨骼動(dòng)畫,毛發(fā)面片之間AlphaBlend欺税,以及一些其他比較流行的渲染理論(如基于KajiyaKay模型對(duì)Marschner的逼近等)侈沪。總之一家之談晚凿,有錯(cuò)是必然的亭罪,歡迎各位讀者指正錯(cuò)誤。

marchner

Reference

[1] An Energy-Conserving Hair Reflectance Model, d’Eon(Weta) 2011
[2] Light Scattering from Human Hair Fibers, Marschner 2003
[3] Rendering Fur With Three Dimensional Texture, Kajiya, Kay 1989
[4] Physically Based Hair Shading in Unreal, Karis 2016
[5] Marschner-Hair-Unity
[6] Marschner-Hair-UE4

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歼秽,一起剝皮案震驚了整個(gè)濱河市应役,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哲银,老刑警劉巖扛吞,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荆责,居然都是意外死亡滥比,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門做院,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盲泛,“玉大人,你說(shuō)我怎么就攤上這事键耕∷鹿觯” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵屈雄,是天一觀的道長(zhǎng)村视。 經(jīng)常有香客問(wèn)我殉摔,道長(zhǎng)井濒,這世上最難降的妖魔是什么杖小? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任豪筝,我火速辦了婚禮,結(jié)果婚禮上杠氢,老公的妹妹穿的比我還像新娘站刑。我一直安慰自己,他們只是感情好鼻百,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布绞旅。 她就那樣靜靜地躺著,像睡著了一般温艇。 火紅的嫁衣襯著肌膚如雪因悲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天中贝,我揣著相機(jī)與錄音囤捻,去河邊找鬼。 笑死邻寿,一個(gè)胖子當(dāng)著我的面吹牛蝎土,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绣否,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼誊涯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蒜撮?” 一聲冷哼從身側(cè)響起暴构,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎段磨,沒(méi)想到半個(gè)月后取逾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苹支,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年砾隅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片债蜜。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晴埂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寻定,到底是詐尸還是另有隱情儒洛,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布狼速,位于F島的核電站琅锻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恼蓬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一沫浆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滚秩,春花似錦、人聲如沸淮捆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)攀痊。三九已至桐腌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苟径,已是汗流浹背案站。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棘街,地道東北人蟆盐。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像遭殉,于是被迫代替她去往敵國(guó)和親石挂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容