計(jì)算機(jī)圖形學(xué)(OPENGL):PBR理論

本文同時(shí)發(fā)布在我的個(gè)人博客上:https://dragon_boy.gitee.io

??PBR历造,全稱phsically based rendering甩十,即基于物理的渲染,是一系列基于相同理論的渲染技術(shù)的集合吭产,更接近于真實(shí)的物理世界侣监。因?yàn)镻BR的目標(biāo)是模擬真實(shí)的光照,它比Phong和Blinn-Phong更為真實(shí)臣淤,而且使用者可以不必調(diào)整一些不必要的參數(shù)區(qū)盡力模擬效果橄霉。
??PBR本身也并不是完全的真實(shí)的物理模擬荒典,只是基于物理的規(guī)則。一個(gè)PBR光照模型刻剥,需要滿足下面3個(gè)條件:

  1. 基于微表面模型
  2. 能量守恒
  3. 使用基于物理規(guī)則的BRDF
    ??PBR是由迪士尼提出的,Epic進(jìn)行了針對(duì)實(shí)時(shí)渲染的優(yōu)化漓藕。它們的方法基于金屬流程享钞,被廣泛運(yùn)用于許多主流的引擎。下面是一個(gè)PBR渲染的例子:


微表面模型

??所有的PBR技術(shù)都基于微表面模型的理論狐肢。該理論定義了份名,所有微觀尺度的表面都可以被描述為微小獨(dú)立的鏡面,被稱為微表面想邦。由于表面的粗糙度不同,這些微小的鏡面的排列會(huì)很不同:


??如果表面越粗糙锡移,微表面的排布越混亂。而表面越粗糙施符,在進(jìn)行高光計(jì)算時(shí)戳吝,光線更傾向于雜亂無(wú)章地散射慢洋,就會(huì)造成更大范圍的高光陆盘,相反太防,表面越光滑,光線的反射更有規(guī)律醇王,結(jié)果的高光越性⒚洹:

??實(shí)際上,沒(méi)有一個(gè)表面是完全光滑的焊夸,但如果表面的微表面排布的混亂度很小,我們可以近似的認(rèn)為平面是完全光滑的揪阶,我們可以使用粗糙度(roughness)參數(shù)來(lái)近似模擬表面粗糙程度鲁僚∏劝基于一個(gè)表面的粗糙度我們可以粗略的計(jì)算微表面貼合某個(gè)向量h的比率,這個(gè)向量h是位于光源方向l和觀察方向v之間一半的向量姻成,這在blinn-phong模型那里使用過(guò)科展。h向量這么計(jì)算:

??對(duì)齊到這個(gè)h向量的微表面越多甘邀,高光越強(qiáng)松邪,越尖銳剧辐。下面是粗糙度0-1的高光效果:

能量守恒

??微表面模型的近似采用一組能量守恒公式:離開(kāi)表面的光的能量不能高于與表面發(fā)生作用前的光的能量,即能量會(huì)有一部分損失在物體內(nèi)部忍啤。從上面的圖中我們看到同波,粗糙度越高,高光范圍越大,但高光的亮度越低吆玖。
??對(duì)于能量守恒公式怜奖,我們需要區(qū)分漫反射和高光。當(dāng)一束光線碰撞表面時(shí)掷匠,它就被分為折射部分和反射部分钙皮,反射部分形成高光短条,并不進(jìn)入表面,這是廣義上的高光光照赋访。這是部分留在物體內(nèi)部分吸收汹粤,這是廣義上的漫反射光照。
??其實(shí)和廣義上的模型相比還是有一細(xì)微差別芹壕,折射光線并不會(huì)馬上被吸收。在物理層面睁壁,我們可以將光線認(rèn)為是一個(gè)帶有能量能量體,在失去所有能量前會(huì)一直向前移動(dòng)钳降,而失去能量的方式是碰撞铲觉。每個(gè)物體都可以考慮為內(nèi)部包含大量的粒子凌唬,這些粒子會(huì)作為碰撞體和光線進(jìn)行碰撞况褪,每次碰撞测垛,這寫(xiě)粒子會(huì)吸收一部分光線的能量并轉(zhuǎn)化為熱能:



??所有進(jìn)入物體內(nèi)部的折射光線的能量并不會(huì)被完全吸收,大多數(shù)都會(huì)向各個(gè)方向散射離開(kāi)表面锯七,而這些能量被吸收過(guò)的光線會(huì)參與表面的漫反射顏色計(jì)算巨双。在PBR中袱蜡,我們簡(jiǎn)化這一流程,我們假定所有的折射光線被吸收的能量接著在一個(gè)很小的范圍內(nèi)散射慢宗,忽略會(huì)離開(kāi)表面一定距離的光線坪蚁。有一些著色技術(shù)考慮了這些離開(kāi)一定距離的光線奔穿,這一技術(shù)稱為次表面散射,被應(yīng)用于模擬皮膚迅细、大理石蠟燭這些材質(zhì)巫橄。
??一個(gè)額外的差別是金屬和非金屬表面的區(qū)別(也被稱為電解質(zhì)和非電解質(zhì))淘邻。金屬表面的反射和折射所基于的原則和上述一致筹我,但折射光線全被吸收不考慮散射岸夯,這就意味著金屬表面不考慮漫反射顏色只考慮高光齿桃。而非金屬表面和上面的原則完全一致喉祭。正因?yàn)檫@種金屬和非金屬的差別藐唠,它們?cè)赑BR流程中會(huì)被區(qū)別對(duì)待。
??反射和折射的區(qū)別也給予了我們另一個(gè)不同于能量守恒公式的結(jié)論:它們兩個(gè)是相互排斥的。當(dāng)光線反射時(shí)它永遠(yuǎn)不會(huì)被吸收能量垦巴,所以進(jìn)入表面的能量就全部都是折射光線涯雅。
??這樣我們可以根據(jù)能量守恒公式首先計(jì)算高光部分,代表原光線能量被反射的部分展运,接著剩下的部分的能量直接用來(lái)計(jì)算折射锈遥,即漫反射部分|

float kS = calculateSpecularComponent(...); // reflection/specular fraction
float kD = 1.0 - kS;                        // refraction/diffuse  fraction

??通過(guò)這種方式万哪,我們同時(shí)擁有了進(jìn)入光線的反射值和折射值着撩,同時(shí)也秉承了能量守恒原則沪猴。通過(guò)這種方式奋救,讓反射值和折射值超過(guò)1是不可能的悬赏,這確保了它們的能量值的和不會(huì)超過(guò)進(jìn)入的光線的能量。

反射方程

??根據(jù)上面講述的理論,我們可以得出一個(gè)名為渲染方程的工具,這個(gè)方程時(shí)目前模擬光照的最好的方法天吓。基于物理的渲染使用的渲染方程的版本稱為反射方程鹦蠕,下面給出反射方程:


??為了了解這個(gè)復(fù)雜的方程氮唯,我們先了解一下輻射度測(cè)定。輻射度測(cè)定是一種對(duì)電磁波的測(cè)定方法,包括可見(jiàn)光办斑。有幾個(gè)輻射度測(cè)定的參數(shù)我們可以用來(lái)測(cè)量測(cè)過(guò)平面的光和方向靶累,但我們只考慮于反射方程有關(guān)的輻射率荣回,這里標(biāo)記為L(zhǎng)。輻射率用來(lái)度量從某一單一方向射來(lái)的光的強(qiáng)度顷蟆,我們可以將輻射度看作是一組物理量的結(jié)合:
??輻射通量:輻射通量\Phi是以瓦特為單位的用來(lái)衡量光源的透射能量诫隅。光有多種不同波長(zhǎng)的能量組合而成,每種波長(zhǎng)聯(lián)系一個(gè)特定的顏色帐偎,因此一個(gè)光源發(fā)出的能量可以被認(rèn)為與波長(zhǎng)構(gòu)成一個(gè)函數(shù)關(guān)系逐纬,波長(zhǎng)在390nm到700nm之間的屬于可見(jiàn)光的范圍。下面是每種光的能量和波長(zhǎng)的關(guān)系:

??輻射通量就是這么一個(gè)用來(lái)描述上述波長(zhǎng)與光強(qiáng)函數(shù)總區(qū)域面積的量削樊。為了使描述簡(jiǎn)單化豁生,我們常常用RGB編碼來(lái)表示光的顏色。
??立體角:立體角漫贞,用\omega表示甸箱,用來(lái)描述一個(gè)區(qū)域投射到單位圓上的大小,下面是示例圖:

??想象一下從單位圓的中心沿著區(qū)域的方向觀察迅脐,落在單位圓上的區(qū)域就是立體角芍殖。
??輻射強(qiáng)度:輻射強(qiáng)度是每個(gè)立體角范圍上的輻射通量,比如谴蔑,有一束向四周發(fā)光的全方位光源豌骏,我們?cè)诹Ⅲw角的范圍描述輻射強(qiáng)度:

??輻射強(qiáng)度的等式如下:

??通過(guò)輻射通量、輻射強(qiáng)度以及立體角树碱,我們就可以得到輻射率的等式肯适。輻射率被描述為某面積內(nèi)(A)在單位圓中心所接收到的沿某一立體角接受得到的輻射強(qiáng)度:

??輻射率用來(lái)測(cè)量某一區(qū)域的光的輻射度,通過(guò)入射角進(jìn)行縮放成榜。如果我們考慮一個(gè)立體角和一個(gè)無(wú)限小的區(qū)域A框舔,我們可以使用輻射率來(lái)度量入射光在空間中某一點(diǎn)的通量,接著我們將立體角用光的方向向量替代,用一個(gè)點(diǎn)p替代區(qū)域A刘绣,這樣的話樱溉,我們就可以直接在著色器中逐片段的計(jì)算某一光源的光照福贞。
??實(shí)際計(jì)算輻射率時(shí)挖帘,我們考慮所有入射到某一點(diǎn)p的光線拇舀,這些所有輻射率的總和被稱為輻照率骄崩。有了相關(guān)知識(shí)我們?cè)倩仡^看反射方程:

??我們用L表示某一點(diǎn)p從某一方向(某一無(wú)線小的立體角{\omega}_i)接受的光的輻射率要拂,注意之前的cos\theta脱惰,可以有光的入射方向和法線點(diǎn)乘得到枪芒,即n \cdot {\omega}_iL_0是輻射率的在某個(gè)點(diǎn)p的總和良蛮,沿觀察者方向{\omega}_0决瞳。
??反射方程圍繞輻照率展開(kāi)皮胡,是某個(gè)點(diǎn)所有入射光的輻射率綜總和屡贺,不只是某一單一方向的入射光泻仙,而是所有在一個(gè)以p為中心點(diǎn)的半球\Omega內(nèi)的所有入射光玉转。圖例:

??為了計(jì)算所有在半球內(nèi)的輻射率的值的和究抓,我們基于所有在半球內(nèi)的光的入射方向{\omega}_i進(jìn)行積分計(jì)算刺下。在OpenGL中怠李,對(duì)這個(gè)積分我們可以使用黎曼和進(jìn)行計(jì)算:

int steps = 100;
float sum = 0.0f;
vec3 P    = ...;
vec3 Wo   = ...;
vec3 N    = ...;
float dW  = 1.0f / steps;
for(int i = 0; i < steps; ++i) 
{
    vec3 Wi = getNextIncomingLightDir(i);
    sum += Fr(P, Wi, Wo) * L(P, Wi) * dot(N, Wi) * dW;
}

??我們將積分區(qū)域分為按w所在軸100等分捺癞,對(duì)每一份dW值髓介,我們計(jì)算相應(yīng)的輻射率唐础,循環(huán)將值疊加得到輻照率的結(jié)果一膨。
??反射方程將半球{\Omega}內(nèi)照射到p點(diǎn)的入射光的輻射率疊加起來(lái),經(jīng)由f_r縮放申眼,并返回從觀察者方向的反射光輻射率L_0的總和括尸。入射光輻射率可以來(lái)自光源或環(huán)境貼圖屁柏。
??f_r方法代表BRDF方程,也就是雙向反射分布方程功戚,可以基于物體的材質(zhì)屬性縮放入射光的輻射率權(quán)重啸臀。

BRDF

??BRDF乘粒,即雙向反射分布方程灯萍,將入射光方向旦棉,反射光方向绑洛,法線真屯,表面粗糙度作為輸入?yún)?shù)绑蔫。BRDF近似描述了每個(gè)輸入光對(duì)最后反射光的貢獻(xiàn)配深,例如凉馆,一個(gè)類(lèi)似鏡面的表面,BRDF方程對(duì)幾乎所有的輸入光返回0值锥腻,除了與反射光方向{\omega}_0呈反射關(guān)系的輸入光返回1值瘦黑。
??BRDF基于微表面模型近似模擬材質(zhì)的反射和折射屬性幸斥。為了讓BRDF的結(jié)果物理上可信廊勃,它必須遵循能量守恒方程坡垫。技術(shù)上來(lái)說(shuō)冰悠,Blinn-Phong其實(shí)是使用相同的{\omega}_0{\omega}_i作為輸入的BRDF溉卓,但由于Blinn-Phong并不遵守能量守恒定律搬泥,它也不是基于物理的模擬西疤。目前存在許多不同種類(lèi)的BRDF來(lái)基于物理模擬表面材質(zhì)代赁,對(duì)于實(shí)時(shí)渲染的PBR流程使用的是Cook-Torrance BRDF芭碍。
??Cook-Torrance BRDF包含一個(gè)漫反射和一個(gè)高光部分:


??k_d是入射光折射的能量比例窖壕,k_s是入射光反射的能量比例瞻讽。等式右邊的第一部分是漫反射部分f_{lambert}速勇,這是名為L(zhǎng)ambert的一種漫反射模擬烦磁,定義如下:

??c是反照率或表面的顏色呕乎,為什么除以\pi在之后講解IBL時(shí)詳細(xì)說(shuō)明猬仁。
??高光部分這樣描述:

??Cook-Torrance高光BRDF有三個(gè)函數(shù)和分母的一個(gè)標(biāo)準(zhǔn)化因數(shù)構(gòu)成逐虚,D叭爱、F买雾、G各自代表近似模擬高光某一屬性的函數(shù)漓穿,即法線分布函數(shù)晃危,菲涅爾等式僚饭,幾何函數(shù):

  • 法線分布函數(shù):估計(jì)貼近中間向量的微表面數(shù)量,由表面的粗糙度影響尉间。這是近似模擬微表面的最首要的方法
  • 幾何函數(shù):描述微表面的自屏蔽屬性哲嘲。當(dāng)某一平面相對(duì)粗糙時(shí)眠副,平面的微表面可以遮蔽其它的微表面槽唾,降低反射光的強(qiáng)度庞萍。
  • 菲涅爾等式:描述了不同表面角度的表面的反射率钝计。
    ??對(duì)上面三個(gè)函數(shù)有多種不同的模擬方式私恬,這里我們選取虛幻4中的模擬方式本鸣。

法線分布函數(shù)

??這里我們使用Trowbridge-Reitz GGX:


??h是微表面的中間向量荣德,\alpha為表面的粗糙度涮瞻。在GLSL中發(fā)現(xiàn)分布函數(shù)這樣表示:


float DistributionGGX(vec3 N, vec3 H, float a)
{
    float a2     = a*a;
    float NdotH  = max(dot(N, H), 0.0);
    float NdotH2 = NdotH*NdotH;
    
    float nom    = a2;
    float denom  = (NdotH2 * (a2 - 1.0) + 1.0);
    denom        = PI * denom * denom;
    
    return nom / denom;
}

幾何函數(shù)

??幾何函數(shù)描述的是每個(gè)微表面之間的相互遮擋關(guān)系:


??幾何函數(shù)將材質(zhì)粗糙度作為輸入,包括法線和觀察方向宁否,這里使用 Schlick-GGX:

??這里的k是對(duì)\alpha的重映射家淤,我們對(duì)直接光照和IBL使用不同的等式:

??\alpha所代表的粗糙度每種引擎都不一樣絮重,之后的章節(jié)會(huì)講解青伤。
??為了更有效的估計(jì)幾何函數(shù)狠角,我們將觀察方向和入射光方向均考慮進(jìn)來(lái)丰歌,我是史密斯方法進(jìn)行合并:

??右側(cè)的G_{sub}由Schlick-GGX給出立帖,下面是不同粗糙度的幾何函數(shù)的效果:

??幾何函數(shù)在GLSL中實(shí)現(xiàn):

float GeometrySchlickGGX(float NdotV, float k)
{
    float nom   = NdotV;
    float denom = NdotV * (1.0 - k) + k;
    
    return nom / denom;
}
  
float GeometrySmith(vec3 N, vec3 V, vec3 L, float k)
{
    float NdotV = max(dot(N, V), 0.0);
    float NdotL = max(dot(N, L), 0.0);
    float ggx1 = GeometrySchlickGGX(NdotV, k);
    float ggx2 = GeometrySchlickGGX(NdotL, k);
    
    return ggx1 * ggx2;
}

菲涅爾等式

??菲涅爾等式描述了不同觀察視角的反射光和折射光的比率堂飞。每個(gè)表面或材質(zhì)都有一個(gè)基礎(chǔ)反射率绰筛,對(duì)應(yīng)垂直觀察表面描融,從其它角度觀察反射會(huì)更加明顯稼稿。舉個(gè)例子让歼,看看周?chē)淖雷幽庇遥蚰局聘闹矗蚪饘僦票补遥瑥拇怪狈较蛴^察的話會(huì)得到基礎(chǔ)反射率的效果,如果近乎平行表面觀察的方向觀察表面蜂林,反射會(huì)非常明顯噪叙。所有的表面從這種近乎平行的方向觀察得到的強(qiáng)烈反射結(jié)果就是菲涅爾效應(yīng)睁蕾。
??菲涅爾等式本身十分復(fù)雜子眶,這里使用Fresnel-Schlick來(lái)近似模擬:


??F_0代表表面的基礎(chǔ)反射率猜丹,經(jīng)由折射或IOR的索引進(jìn)行計(jì)算下面是菲涅爾效應(yīng)的圖例,可以看到越靠近邊緣藏杖,反射光越強(qiáng)烈:

??注意点寥,F(xiàn)resnel-Schlick是針對(duì)非電解質(zhì)表面進(jìn)行定義的敢辩,對(duì)于電解質(zhì)表面戚长,因?yàn)椴豢紤]折射因素怠苔,所以無(wú)法計(jì)算F_0柑司,可能不能直接使用攒驰。對(duì)于電解質(zhì),我們可以預(yù)先計(jì)算垂直觀察表面的的F_0隅津,再在其它角度上對(duì)該值插值,每一個(gè)角度都使用Fresnel-Schlick痹籍。
??下面列舉了一下不同材質(zhì)的基礎(chǔ)反射率:

??可以觀察到棺克,非電解質(zhì)的基礎(chǔ)反射率不會(huì)超過(guò)0.17,大多數(shù)導(dǎo)體的基礎(chǔ)反射率在0.5-1.0确买。同時(shí)湾趾,導(dǎo)體的基礎(chǔ)反射率是著色的搀缠,也就是可以用某一RGB元組艺普。
??由于金屬和非金屬的區(qū)別歧譬,我們?cè)诮饘倭鞒讨袑?duì)描述材質(zhì)使用一個(gè)額外的名為金屬度的參數(shù),用來(lái)判斷一個(gè)表面是金屬還是非金屬祭埂。
??通過(guò)預(yù)先計(jì)算F_0蛆橡,我們可以讓金屬和非金屬都是用Fresnel-Schlick估計(jì)菲涅爾效應(yīng)泰演,而且如果一個(gè)材質(zhì)是金屬的話睦焕,我們還需要對(duì)F_0著色垃喊,GLSL中這么做:

vec3 F0 = vec3(0.04);
F0      = mix(F0, surfaceColor.rgb, metalness);

??Fresnel-Schlick函數(shù)實(shí)現(xiàn):

vec3 fresnelSchlick(float cosTheta, vec3 F0)
{
    return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
}

Cook-Torrance反射方程

??通過(guò)Cook-Torrance BRDF的每個(gè)組件,我們可以獲得最終的反射方程:



??這個(gè)反射方程完整的描述了一個(gè)PBR模型初家。

PBR材質(zhì)

??在實(shí)際工作中,往往使用各種貼圖來(lái)控制PBR流程中的表面的參數(shù),描述了平面中的某一點(diǎn)對(duì)光照的反應(yīng)溜在,即:這個(gè)點(diǎn)的金屬度陌知,粗糙度,平面如何應(yīng)對(duì)不同波長(zhǎng)的光掖肋。
??下面是PBR流程中使用的幾張貼圖仆葡,并使用這幾張貼圖進(jìn)行渲染輸出:


  • Albedo,反照率:即表面的基礎(chǔ)顏色志笼。
  • Normal沿盅,法線:法線貼圖。
  • Metallic, 金屬度 :用來(lái)判斷每一個(gè)片段的金屬度纫溃,往往使用灰度圖揍很。
  • Roughness, 粗糙度: 用來(lái)判斷每一個(gè)片段的粗糙度,使用灰度圖阶界。
  • AO祭玉, 環(huán)境光遮蔽:環(huán)境光遮蔽貼圖。

??最后,給出原文地址供參考:https://learnopengl.com/PBR/Theory

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躏吊,老刑警劉巖疆导,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件败富,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡账阻,警方通過(guò)查閱死者的電腦和手機(jī)琴儿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)晒屎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵忽冻,是天一觀的道長(zhǎng)湖笨。 經(jīng)常有香客問(wèn)我边败,道長(zhǎng)捎废,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任嫌蚤,我火速辦了婚禮猜年,結(jié)果婚禮上撇簿,老公的妹妹穿的比我還像新娘。我一直安慰自己彰居,他們只是感情好抬闯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著馏艾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搭独。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天坎背,我揣著相機(jī)與錄音,去河邊找鬼聘殖。 笑死洋魂,一個(gè)胖子當(dāng)著我的面吹牛角骤,可吹牛的內(nèi)容都是我干的又沾。 我是一名探鬼主播表窘,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纹腌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起盲镶,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后妈倔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體博投,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡松忍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惫企。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豫缨。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖殉摔,靈堂內(nèi)的尸體忽然破棺而出州胳,到底是詐尸還是另有隱情,我是刑警寧澤逸月,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布栓撞,位于F島的核電站,受9級(jí)特大地震影響碗硬,放射性物質(zhì)發(fā)生泄漏瓤湘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一恩尾、第九天 我趴在偏房一處隱蔽的房頂上張望弛说。 院中可真熱鬧,春花似錦翰意、人聲如沸木人。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)醒第。三九已至,卻和暖如春进鸠,著一層夾襖步出監(jiān)牢的瞬間稠曼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工客年, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霞幅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓量瓜,卻偏偏與公主長(zhǎng)得像司恳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绍傲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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