HDR以及HDR相關(guān)的后處理

什么是HDR

常常在渲染中見到HDR,那么HDR到底是什么東西亿卤,其中包含著怎樣的具體含義呢磺浙?

首先破托,HDR是High Dynamic Range的縮寫,Dynamic Range的定義是場景中亮度的max值跟min值的比值沉删,自然界中讥珍,這個數(shù)值范圍比較大,如果用10的對數(shù)來描述的話毯侦,這個值接近于10(稱之為10階),也就是說具垫,maxLum / minLum ~= 10^10侈离,即使對于相機(jī)所拍攝的單個畫面場景,其數(shù)值也接近于4階筝蚕,這個范圍非常的廣卦碾,因此稱之為HDR铺坞,與之相對的就有LDR(Low Dynamic Range)的說法,用以指代那些范圍較窄的顯示方式洲胖,比如CRT的Dynamic Range大概為兩階济榨,即使是現(xiàn)代的主流顯示器能力,Dynamic Range有所擴(kuò)展绿映,但依然未能突破2階的限制擒滑。

正因為顯示器能夠支撐的亮度范圍相較于自然界真實的亮度范圍存在不小的差距,因此在渲染中會使用各種策略與手段來模擬自然界的HDR光照效果叉弦,這些策略包括但不限于Tonemapping丐一,Bloom,Exposure Adjustment等等淹冰,具體細(xì)節(jié)后面介紹库车。

為了實現(xiàn)HDR的效果,就需要在渲染的中間階段能夠最大程度的保留場景的亮度信息樱拴,傳統(tǒng)的color是按照8bits/channel的方式存儲的柠衍,而這種方式由于精度較低,所以能夠表達(dá)的亮度范圍是非常有限的晶乔,對于自然界中的亮度范圍拧略,這種方式是不夠的,因此實現(xiàn)HDR的第一步瘪弓,就是將渲染過程中與光照相關(guān)的資源以及計算輸出的中間結(jié)果用一種能夠覆蓋更廣范圍的格式存儲下來垫蛆,業(yè)界最普遍的做法是用Float16來存儲一個通道數(shù)據(jù)。

人眼視覺感知機(jī)制

為什么要提到人眼視覺感知機(jī)制腺怯?這是因為袱饭,雖然人眼能夠感知到一個比較寬的顏色亮度范圍,但是人眼同時能夠感知到的亮度范圍卻是有限的(最高不超過四階)呛占,因此在人眼接觸到一個HDR的場景時虑乖,人眼視覺系統(tǒng)的內(nèi)部調(diào)整機(jī)制就會產(chǎn)生作用,將一些亮度數(shù)據(jù)過濾掉晾虑,從而在人眼能夠同時接受的亮度范圍內(nèi)最大程度的保留場景信息疹味,從這個角度看來,人眼是一個非常優(yōu)秀的HDR->LDR轉(zhuǎn)換器帜篇,為了能夠給觀察者以最真實自然的場景呈現(xiàn)效果糙捺,了解人眼的視覺感知機(jī)制就必不可少了。

從生物學(xué)的角度來看笙隙,人眼中存在兩種不同的視覺感知單元洪灯,這兩種感知單元對于亮度的敏感度是不一樣的,從而導(dǎo)致人眼對于不同亮度的感受程度也有所不同竟痰。這兩種感知單元的特點(diǎn)給出如下:

  1. Cone視覺感知單元:
  • 對于顏色差異比較敏感
  • 存在三種不同的感知子單元签钩,分別對應(yīng)于三種不同波長的光(這三種波長接近于RGB掏呼,這就是為什么三原色是RGB的原因了)
  • 集中分布在視網(wǎng)膜Retina的中心區(qū)域(fovea),這是人體視覺最敏銳的區(qū)域
  • 對于那些光照強(qiáng)度適中的顏色有較好的辨識度
  • 這種感知單元對應(yīng)的視覺稱之為photopic vision
  1. Rod視覺感知單元:
  • 對于亮度差異比較敏感
  • 不能辨別顏色差異
  • 對應(yīng)低亮度更為敏感铅檩,高亮度值的辨析能力有所減弱(其實是因為人眼對于亮度的對比度的敏感程度是恒定的憎夷,即對于人眼而言,1與2的亮度差異跟100與200的亮度差異是差不多的)
  • 無法感知到物體的具體形狀昧旨,只能感知到一團(tuán)亮光
  • 其對應(yīng)的視覺稱之為scotopic vision

上面這個圖揭示了人眼的不同視覺對于不同亮度的敏感程度拾给,可以看到scotopic在對于低亮度范圍內(nèi)感知能力較強(qiáng),而photopic在亮度較為適中時感知能力較強(qiáng)臼予,在這二者之間的亮度范圍的視覺稱之為mesopic vision鸣戴。

此外,人眼在從低亮度區(qū)域進(jìn)入高亮度區(qū)域或者從高亮度區(qū)域進(jìn)入低亮度區(qū)域時粘拾,會自動調(diào)節(jié)進(jìn)入人眼的光線(類似于相機(jī)光圈)窄锅,使得能夠快速適應(yīng)光場強(qiáng)度的變化,且對于高亮度場景跟低亮度場景而言缰雇,人眼都能夠捕獲到足夠多的場景數(shù)據(jù)入偷,亮度劇烈變化的自適應(yīng)調(diào)整過程可以通過exposure adjustment來完成,而對于不同亮度范圍的場景數(shù)據(jù)的可見度的調(diào)整則有賴于Tonemapping算法的實現(xiàn)械哟。

Bloom

Bloom指的是這樣的一種效果:對于那些亮度數(shù)值較高的像素區(qū)域疏之,通過在其周邊產(chǎn)生一層柔和平滑的光暈,如下面圖中燈光所在位置的外發(fā)光效果所示暇咆。此外锋爪,這里需要說到的是,Bloom還有其他的別名爸业,比如Glare以及Glow等其骄。

Bloom的實現(xiàn)步驟其實比較簡單:

  1. 對于那些用color表示的場景來說,需要將color數(shù)值轉(zhuǎn)換為亮度數(shù)值扯旷,對于那些已經(jīng)使用亮度來表示的場景而言拯爽,這一步可以省去:
    Y = 0.2126R+0.7152G+0.0722B
    這個公式來源于wiki,另外關(guān)于顏色到亮度的轉(zhuǎn)換钧忽,除了這里給出的之外毯炮,還有其他的實現(xiàn)方式,比如Reinhard[2]使用的公式為:
    L = 0.27R + 0.67G + 0.06B
    從網(wǎng)上簡單搜了一下耸黑,沒有找到關(guān)于這兩個公式的優(yōu)劣對比的論述桃煎,在實際使用中,可以根據(jù)效果的優(yōu)劣自行取用吧崎坊。

  2. 計算出場景中的平均亮度

  1. 為了節(jié)省計算消耗备禀,這一步之后的所有步驟都是在一個低分辨率(比如原屏幕分辨率1/4)的設(shè)定下完成。計算屏幕各個像素亮度相對于平均亮度的比值奈揍,并乘上一個系數(shù)a曲尸,得到調(diào)整后的亮度值,這個系數(shù)a有個專門的名稱叫做key value男翰,其取值范圍為[0,1]另患,在Bloom中與后續(xù)的高亮閾值t一同用于控制Bloom的作用范圍。
  1. 過濾出場景中的高亮區(qū)域蛾绎,將調(diào)整后的亮度值與一個高亮閾值t做比對昆箕,將大于0的像素的顏色輸出,小于0的像素輸出數(shù)值為0租冠,這一步的輸出貼圖中鹏倘,除了高亮部分是點(diǎn)亮的之外,其余部分都是全黑的:
  1. 對上一步輸出的高光貼圖進(jìn)行高斯模糊(水平方向模糊一遍顽爹,之后再在垂直方向模糊一遍纤泵,效率高),得到模糊后的高光貼圖

  2. 將模糊后的高光貼圖跟原始color貼圖進(jìn)行blend镜粤,輸出的結(jié)果就是帶有bloom效果了

與Bloom效果對應(yīng)的捏题,還有Star效果,其實現(xiàn)的大致效果如下圖所示:

這種效果的實現(xiàn)方式跟Bloom類似肉渴,區(qū)別在于模糊處理的步驟的不同公荧,在進(jìn)行模糊處理的時候,Star效果需要對高光貼圖分別進(jìn)行垂直+水平模糊處理同规,并將結(jié)果分別存儲到兩張不同的貼圖中(Bloom是先對高光貼圖進(jìn)行一個方向的模糊處理循狰,之后在此結(jié)果上再進(jìn)行另一個方向的模糊處理),之后將這兩個貼圖的結(jié)果混合到原始的場景貼圖中券勺。

不論是Bloom還是Star Effect绪钥,如果模糊的效果不是很好的話,還可以再進(jìn)行多次模糊(如果性能消耗沒問題的話)

Exposure Adjustment

前面實現(xiàn)Bloom的時候提到過朱灿,在得到平均亮度之后昧识,需要對屏幕中各個像素的亮度進(jìn)行scale調(diào)整:

這個操作實際上就是在對場景中的整體亮度進(jìn)行調(diào)整,其目的是使得整體畫面不至于過亮或者過暗盗扒,換句話說跪楞,也就是場景中的大部分像素的亮度都處于中灰度(middle gray)區(qū)域,而對應(yīng)到取值上呢侣灶,就是希望原場景中的平均亮度的像素經(jīng)過這個公式調(diào)整后甸祭,其亮度值為中灰度:

L_{scaled} = a = L_{middlegray} = 0.18

0.18這個數(shù)值是怎么計算出來的呢?我們知道gamma矯正有兩種gamma值褥影,分別稱為display gamma與encoding gamma池户。display gamma是顯示器在將程序傳輸過來的數(shù)據(jù)由硬件自動完成的,其公式給出如下:

y = x ^ {2.2}

古老的CRT中測出來的display gamma是2.5,后來的2.2是微軟聯(lián)合愛普生等多家公司推出了sRGB標(biāo)準(zhǔn)之后的推薦值校焦。而為了使得相機(jī)拍攝的結(jié)果傳輸?shù)斤@示器上能夠正確顯示赊抖,就需要拍攝的時候0.5的亮度經(jīng)由顯示器輸出,其亮度還依然為0.5寨典,那么在相機(jī)對場景顏色進(jìn)行編碼存儲的時候氛雪,就需要相應(yīng)做一個處理:

y = x ^ {1/2.2} = x ^ {0.4545}

這里的0.4545就是所謂的encoding gamma值,實際上耸成,encoding gamma的引入并不僅僅是為了保證顯示的正確报亩,另一個原因是人眼對于暗部數(shù)據(jù)更為敏感(前面說到,人眼對于亮度的變化率deltaL/L的感知是一個常量井氢,因此弦追,在暗部區(qū)域,輕微的亮度變化就可能引起人眼感知的劇烈變化)花竞,因此為了能夠照顧人眼的這種特性劲件,在存儲的時候會將更多的空間分配給低亮度區(qū)域數(shù)據(jù)。說了半天好像還是沒有解釋0.18是怎么來的左胞,實際上在sRGB空間中寇仓,CIELAB的中灰度亮度值約等于0.466(可以參考這篇文章),即由于人眼對于低亮度區(qū)域更敏感烤宙,因此在實際中真實亮度值為0.18的顏色遍烦,在人眼看來,其實就等于中灰度躺枕,而在encoding gamma的作用下0.18^0.45 = 0.462服猪。

上面給出的是一種固定的曝光度調(diào)整的算法,其作用的結(jié)果是所有的場景最終的平均亮度值都變?yōu)?.18拐云,不過實際上我們知道罢猪,在從一個陰暗區(qū)域進(jìn)入一個陽光非常強(qiáng)烈的戶外區(qū)域時,人眼會有一個從暗到明的緩慢變化過程叉瘩,在這個過程中膳帕,人眼對于亮度的敏感程度是一直在變化的,為了模擬這個過程薇缅,就需要在進(jìn)行曝光度調(diào)整的時候危彩,考慮這個動態(tài)變化:

這個公式中La指的是上一幀的平均亮度值,Lw指的是當(dāng)前場景中真實的平均亮度值泳桦,T指的是從兩幀之間的時長汤徽,自適應(yīng)常量 τ對于不同的視覺單元有不同的取值:對于Rod單元而言,這個值為0.4(即經(jīng)過0.4秒完成適應(yīng)過程)灸撰,而對于Cone單元而言谒府,這個值為0.1拼坎。前面說到,不同的視覺單元對應(yīng)的是不同的亮度范圍完疫,那么就有如下的公式:

這里的Lw跟前面的含義一致泰鸡,根據(jù)當(dāng)前場景的亮度值確定出插值參數(shù) σ,之后計算出對應(yīng)的自適應(yīng)常數(shù)τ趋惨,根據(jù)這個值計算出當(dāng)前幀的平均亮度L_a_new鸟顺。

Tonemapping

HDR在中間計算的時候惦蚊,輸出的顏色以及亮度結(jié)果都是大于1的器虾,而顯示器能夠顯示的顏色數(shù)值,其上限為1蹦锋,因此為了讓顯示器能夠正確的展示前面HDR的計算結(jié)果兆沙,就需要實現(xiàn)一套從HDR到LDR的轉(zhuǎn)換方法,一個好的轉(zhuǎn)換算法需要滿足一下三個條件:

  1. 中間區(qū)域應(yīng)該滿足線性增長關(guān)系莉掂,保證大部分中間亮度像素不會產(chǎn)生亮度畸變葛圃,保留高光細(xì)節(jié)
  2. 頂部區(qū)域能夠平滑的緩慢的增長,保證大范圍的高亮度區(qū)域能夠映射到LDR的頂部區(qū)域
  3. 底部曲線能夠平滑的緩慢的增長憎妙,保證低亮度區(qū)域不會被奇怪的點(diǎn)亮库正,保留低亮度細(xì)節(jié)

Tonemapping方法有很多,下面對一些經(jīng)典的算法進(jìn)行簡要介紹厘唾。

  1. Clamp實現(xiàn)
    這種方式實現(xiàn)比較簡單褥符,就是將計算結(jié)果中超出LDR表達(dá)能力之外的像素結(jié)果直接Clamp到LDR的邊界值,其實現(xiàn)的效果也是最差的抚垃,屏幕中會出現(xiàn)大片的白色喷楣,無法保持原有畫面的完整,基本上無人采用

  2. 線性映射
    線性映射最簡單的計算公式其實前面exposure adjustment中已經(jīng)給出鹤树,通過這個公式可以保證當(dāng)前場景中的平均亮度被映射到key value對應(yīng)的亮度(0.18)铣焊,不過經(jīng)過這個處理的像素,還是會存在部分像素亮度值超出1的顯示范圍罕伯,對于這種情況曲伊,默認(rèn)就是將之clamp到1.

不過常量key value的線性映射可能無法適用于所有場景:對于高光場景跟低亮度場景使用相同的平均亮度可能會使得畫面不夠真實,Grzegorz[3]提出了一種自適應(yīng)調(diào)整key value的計算公式:

將這個公式轉(zhuǎn)換為曲線追他,其走勢給出如下:

通過這個調(diào)整之后坟募,可以使得平均亮度越高的場景,其調(diào)整后的平均亮度值也有所增加湿酸,且高亮度場景的調(diào)整趨勢比較平滑婿屹,低亮度場景調(diào)整趨勢比較明顯(可以保證高亮度區(qū)域不至于過曝,而低亮度區(qū)域不至于過于陰暗)

  1. 指數(shù)映射
    指數(shù)映射公式給出如下:

這個公式中推溃,Lav指的是畫面的平均亮度值昂利,而L_hdr指的是各個像素的亮度值,Crysis 2007中就使用的是這種方法。Reinhard的Tonemapping算法得到的畫面過于灰暗蜂奸,為了解決這個問題犁苏,Crysis在2007年提出了另一種Tonemapping的方法。其基本思路是扩所,前面提到了tonemapping就是個S曲線围详,那么為什么不直接使用公式模擬一個S曲線出來呢?下面這個曲線是以log2(x)為橫坐標(biāo)祖屏,Ld為縱坐標(biāo)所繪制的曲線助赞,其中Lav取得值為0.18。

  1. Reinhard Tonemapping算法
    Reinhard應(yīng)該算是Tonemapping算法的祖師級人物袁勺,至今還有很多游戲依然用著Reinhard的Tonemapping算法雹食,算法的實現(xiàn)可以分成兩步:

A. 先進(jìn)行線性映射

B. 進(jìn)行縮放調(diào)整,避免像素超過LDR所能表示的上限(也就是1)

這個算法對應(yīng)的亮度調(diào)整曲線給出如下(橫坐標(biāo)為log2(Lscaled)期丰,縱坐標(biāo)為Color):

這個算法對于低亮度的像素基本上是沒有影響的群叶,而對于可能會超出LDR表示范圍的像素,就會有較大幅度的修正钝荡,不過同時會導(dǎo)致畫面的對比度下降使得畫面偏灰街立,且由于公式本身的特性導(dǎo)致,屏幕中沒有任何一個像素可以映射到純白像素(即1):

應(yīng)對無法映射到純白像素的缺點(diǎn)埠通,Reinhard提出了一種改進(jìn)版實現(xiàn)赎离,第一步維持不變,第二步引入一個新的變量Lwhite用于指定哪個亮度值可以映射到純白像素1上面:

橫縱坐標(biāo)同上植阴,此處Lwhite取值為0.5蟹瘾,從這個曲線可以看出雖然增加了Lwhite解決了無法映射到純白像素值的缺點(diǎn),但是同樣也丟掉了像素不會超出LDR所能表示的范圍1.0的優(yōu)點(diǎn)掠手。
可以看到實現(xiàn)效果有所變化憾朴,但是整體畫面依然偏灰。

  1. Filmic Tonemapping
    Haarm-Pieter Duiker(簡稱HP)在2006年仿照Kodak膠卷的映射曲線實現(xiàn)了一種Tonemapping映射算法喷鸽,在這個實現(xiàn)中众雷,HP使用Cineon線性到Log的轉(zhuǎn)換組件將線性數(shù)據(jù)轉(zhuǎn)換成Log空間數(shù)據(jù),之后在此基礎(chǔ)上進(jìn)行了一系列處理做祝,之后使用了一個LUT再將Log空間數(shù)據(jù)轉(zhuǎn)換回線性空間(避免exp計算的高消耗)砾省,之后Jim hejl & Richard-Brugess Dawson找到了一個使用代數(shù)運(yùn)算來模擬這種映射的快速實現(xiàn)算法,之后在《神海2》中混槐,John Hable根據(jù)這個研究成果又推出了改進(jìn)版的實現(xiàn)算法编兄,其實現(xiàn)代碼給出如下:
float3 F(float3 x)

{

            const float A = 0.22f;

            const float B = 0.30f;

            const float C = 0.10f;

            const float D = 0.20f;

            const float E = 0.01f;

            const float F = 0.30f;

            return ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F;

}

float3 Uncharted2ToneMapping(float3 color, float adapted_lum)

{

            const float WHITE = 11.2f;

            return F(1.6f * adapted_lum * color) / F(WHITE);

}

這種算法也被GTA V所使用的,其本質(zhì)是使用一個人為設(shè)計的曲線來模擬專業(yè)相機(jī)的Tonemapping特性声登,其映射曲線繪制如下所示:

image.png

整個曲線的走勢也是S型狠鸳,不過其增長的區(qū)域非常寬揣苏,對比度也更大,且完全消除了Reinhard灰蒙蒙的瑕疵件舵,此外卸察,在這個算法的實現(xiàn)中,還可以將gamma 矯正相關(guān)的功能集成進(jìn)來铅祸,避免額外的指數(shù)運(yùn)算的消耗坑质。

  1. ACES Tonemapping算法
    ACES是Academy Color Encoding System的縮寫,這是一套關(guān)于顏色管理流程的標(biāo)準(zhǔn)临梗,其中用于實現(xiàn)Tonemapping的算法是其中的一個小部分涡扼。ACES Tonemapping的實現(xiàn)代碼給出如下:
float3 ACESToneMapping(float3 color, float adapted_lum)

{

            const float A = 2.51f;

            const float B = 0.03f;

            const float C = 2.43f;

            const float D = 0.59f;

            const float E = 0.14f;

            color *= adapted_lum;

            return (color * (A * color + B)) / (color * (C * color + D) + E);

}

其映射曲線如下圖所示:

ACES是目前效果最好的Tonemapping方法,目前UE4.8以及《古墓麗影》等多款游戲或者引擎使用的都是這種映射方法夜焦,將ACES與Uncharted的的映射曲線進(jìn)行對比:

可以看到壳澳,在低亮度區(qū)域兩者的表現(xiàn)基本上是一致的,而在高亮度區(qū)域茫经,ACES擁有更好的平滑性,與更寬廣的映射區(qū)域萎津,這就使得ACES在高光區(qū)域的映射表現(xiàn)更為平滑卸伞。

  1. Piecewise Filmic Tonemapping
    John Hable在2017年采用曲線擬合的思想提出了一種通過分段擬合的方式實現(xiàn)Tonemapping的算法,相關(guān)細(xì)節(jié)可以參考其博客锉屈,下面這張圖給出了ACES與分段Filmic Tonemapping實現(xiàn)的曲線擬合對比荤傲,可以看到,分段擬合曲線在Dark跟Bright區(qū)域的曲線更為平滑颈渊,且由于John Hable給出的算法實現(xiàn)了一套從Direct Param到用戶可以理解的Param的轉(zhuǎn)換方法遂黍,用戶理解成本相應(yīng)得到了降低,不過文章沒有給出其實現(xiàn)效果與ACES的對比俊嗽,因此這里就不具體對比其實現(xiàn)表現(xiàn)的差異了雾家,后面在相關(guān)demo中實現(xiàn)之后再補(bǔ)上效果對比。

參考文獻(xiàn)

  1. Realtime HDR Rendering(2006)

  2. Photographic Tone Reproduction for Digital Images

  3. Perceptual effects in real-time tone mapping

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绍豁,一起剝皮案震驚了整個濱河市芯咧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竹揍,老刑警劉巖敬飒,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異芬位,居然都是意外死亡无拗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門昧碉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來英染,“玉大人阴孟,你說我怎么就攤上這事∷懊裕” “怎么了永丝?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長箭养。 經(jīng)常有香客問我慕嚷,道長,這世上最難降的妖魔是什么毕泌? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任喝检,我火速辦了婚禮,結(jié)果婚禮上撼泛,老公的妹妹穿的比我還像新娘挠说。我一直安慰自己,他們只是感情好愿题,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布损俭。 她就那樣靜靜地躺著,像睡著了一般潘酗。 火紅的嫁衣襯著肌膚如雪杆兵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天仔夺,我揣著相機(jī)與錄音琐脏,去河邊找鬼。 笑死缸兔,一個胖子當(dāng)著我的面吹牛日裙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惰蜜,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼昂拂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蝎抽?” 一聲冷哼從身側(cè)響起政钟,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樟结,沒想到半個月后养交,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓢宦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年碎连,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驮履。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡鱼辙,死狀恐怖廉嚼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倒戏,我是刑警寧澤怠噪,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站杜跷,受9級特大地震影響傍念,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葛闷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一憋槐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淑趾,春花似錦阳仔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旷赖,卻和暖如春顺又,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背等孵。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹂空,地道東北人俯萌。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像上枕,于是被迫代替她去往敵國和親咐熙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351