游戲開(kāi)發(fā)相關(guān)實(shí)時(shí)渲染技術(shù)之體積光

散射是一種非常美麗的自然現(xiàn)象惑朦,在自然界中光穿過(guò)潮濕或者含有雜質(zhì)的介質(zhì)時(shí)產(chǎn)生散射俱尼,散射的光線進(jìn)入人眼者吁,讓這些介質(zhì)看起來(lái)像攏住了光線一樣,也就是所謂的體積光让歼。

在游戲中體積光是很常用的一種光照特效敞恋,主要用來(lái)表現(xiàn)光線照射到遮蔽物體時(shí),在物體透光部分泄露出的光柱谋右。由于視覺(jué)上給人很強(qiáng)的體積感硬猫,所以稱(chēng)之為體積光。

體積光特效在現(xiàn)今的中高端游戲中非常常見(jiàn)改执,優(yōu)秀的體積光特效在烘托游戲氛圍啸蜜,提高畫(huà)面質(zhì)感方面發(fā)揮了很大的作用。


圖中清晨透過(guò)樹(shù)林間隙射出的體積光為游戲增色不少

作為一種常用特效辈挂,體積光的制作方式多種多樣衬横,不同游戲?qū)τ谔幚硇阅埽?huà)面要求和渲染質(zhì)量要求各不相同终蒂,也會(huì)使用不同的體積光表現(xiàn)方式蜂林。

早期游戲中由于機(jī)能限制經(jīng)常使用的是BillBoard貼片和徑向模糊這兩種方式遥诉。

在這里簡(jiǎn)單介紹一下兩種方式,重頭戲還是后面最新的基于光線追蹤的方式噪叙。

BillBoard貼片

BillBoard貼片很容易理解矮锈,用PHOTOSHOP生成一個(gè)隨機(jī)的明暗條文,加上遮罩睁蕾,讓它看起來(lái)有光條的感覺(jué)苞笨。

將BillBoard放置在場(chǎng)景中光線會(huì)泄露出來(lái)的區(qū)域,這就是最簡(jiǎn)單的體積光效果惫霸。

做得精細(xì)一點(diǎn)的會(huì)再加上UV動(dòng)畫(huà)猫缭,粒子和遠(yuǎn)景透明的效果。


徑向模糊

徑向模糊是一種后處理的方法壹店。主要用來(lái)表現(xiàn)天空中日月星光散射的效果猜丹。

所謂后期處理就是在游戲畫(huà)面渲染完畢之后,另外加一次渲染硅卢,類(lèi)似于PHOTOSHOP射窒,但處理的對(duì)象是每一幀游戲畫(huà)面,因?yàn)樗俣纫蠖嗍褂肎PU計(jì)算将塑。

徑向模糊體積光主要流程如下:

1:渲染出整個(gè)畫(huà)面

2:抽取出畫(huà)面中高亮的部分

3:對(duì)高亮部分進(jìn)行徑向模糊

4:將徑向模糊后的高亮層和原圖合并

這個(gè)流程可以在PS中輕松實(shí)現(xiàn)脉顿,有興趣的朋友可以打開(kāi)PS試一試,我很多時(shí)候也會(huì)先在PS上試驗(yàn)一些效果点寥,然后再用代碼實(shí)現(xiàn)艾疟。

這里簡(jiǎn)單介紹一下徑向模糊的GPU實(shí)現(xiàn),實(shí)現(xiàn)非常簡(jiǎn)單敢辩,就是從原本像素的位置開(kāi)始蔽莱,向畫(huà)面中心移動(dòng)坐標(biāo),每移動(dòng)一次就采樣一次戚长,將所有采樣疊加在一起就可以了盗冷。

代碼如下:

vec2 position = gl_FragCoord.xy / resolution.xy;

Position = (position-0.5)*2.;

position.y =position.y*resolution.y/resolution.x;

vec2 uv = position;

//最后顏色

vec4 color =vec4(vec3(0.),1.);

//采樣次數(shù)

Const int stepNum =12;

//每次采樣衰減

float decay = 0.9;

//采樣權(quán)重

float weight = 1.;

//坐標(biāo)移動(dòng)方向

vec2 direction = normalize(uv);

for(int i=0; i < stepNum ; i++)

? ? {

? ? //移動(dòng)坐標(biāo)

? ? uv -= direction/float(stepNum) ;

? ? vec4 sample = texture2D(iChannel0, uv);

? ? sample *=decay ;

? ? color += sample;

? ? weight *= decay;

}

這里可以調(diào)整移動(dòng)步幅,采樣的數(shù)量同廉,移動(dòng)的方向仪糖,會(huì)得到不同的效果。

因?yàn)閷?shí)現(xiàn)簡(jiǎn)單迫肖,消耗小锅劝,效果也不錯(cuò),徑向模糊在很多游戲中都有廣泛應(yīng)用蟆湖,UE4的Atmosphere fog就是用的徑向模糊故爵。

另附Webgl徑向模糊體積光例子

https://www.shadertoy.com/view/MdG3RD

當(dāng)然徑向模糊的缺點(diǎn)十分明顯,如果光源不在畫(huà)面內(nèi)帐姻,顯然徑向模糊是沒(méi)辦法執(zhí)行的稠集。

新的視野

上面兩種方式在游戲制作中已經(jīng)使用了很長(zhǎng)時(shí)間,但這絕對(duì)不表示體積光效果只能做到這個(gè)程度饥瓷,其實(shí)還有很大的進(jìn)步空間剥纷。

近期伴隨著渲染技術(shù)的進(jìn)步,業(yè)界已經(jīng)開(kāi)始使用基于光線追蹤呢铆、陰影貼圖等更為精細(xì)的渲染技術(shù)來(lái)實(shí)現(xiàn)體積光的效果晦鞋。

尤其是最近幾年,Nvidia棺克、寒霜引擎等幾家大廠連續(xù)在Siggraph和GDC上發(fā)表了多篇關(guān)于實(shí)時(shí)體積光渲染的技術(shù)論文悠垛。這些算法不論是在模型的精密程度還是計(jì)算效率,相較于之前都有了質(zhì)的飛躍娜谊,新一代的體積光已經(jīng)成為3A游戲的標(biāo)準(zhǔn)配置确买。

PS:大廠現(xiàn)在做什么都號(hào)稱(chēng)是基于物理,實(shí)際和真正的物理學(xué)纱皆、光學(xué)比起來(lái)精度差得還是千山萬(wàn)水湾趾,個(gè)人覺(jué)得現(xiàn)在實(shí)時(shí)渲染的技術(shù)基本就和古典繪畫(huà)的光影分析和制作法差不多,非要談基于物理就有點(diǎn)牽強(qiáng)了派草。

下面終于要進(jìn)入正題了搀缠,這里會(huì)從建模開(kāi)始一步步深入分析基于光線追蹤的體積光算法的各個(gè)方面。

我們先從如何描述體積光近迁,也就是為算法建立模型開(kāi)始艺普。

因?yàn)轶w積光是我們生活中能看到的現(xiàn)象,我們可以從分析自然現(xiàn)象開(kāi)始鉴竭,看能不能得到建模的靈感歧譬。

首先光自身顯然是沒(méi)有體積的,我們也不可能看見(jiàn)光的形狀拓瞪。那在日常生活中看到的光柱到底是什么缴罗,答案很簡(jiǎn)單其實(shí)就空氣中的塵埃。

空氣中布滿(mǎn)大量微小的塵埃祭埂,我們看到的光柱就是光線擊中塵埃后散射到我們眼睛中的面氓。

這時(shí)候有人就說(shuō)了,那只要把塵埃模擬出來(lái)蛆橡,放到現(xiàn)在的渲染引擎中就萬(wàn)事大吉了舌界。

這當(dāng)然是最正確的做法,同時(shí)卻也是最不切實(shí)際的做法泰演,因?yàn)閷?shí)時(shí)渲染顯然不可能在幾毫秒內(nèi)模擬光線在空氣中上億灰塵分子間發(fā)生的各種折射呻拌、反射、散射睦焕。打個(gè)比方這就像是讓牛頓只用自己的三大定律去計(jì)算大海里每個(gè)水分子是怎么碰撞的一樣藐握。

渲染尤其是實(shí)時(shí)渲染靴拱,最終要的不是所謂的基于物理,而是找到足夠近似于真實(shí)情況(騙過(guò)人眼)的計(jì)算方式猾普。

既然不能用蠻力模擬袜炕,就要想一些巧妙的辦法了,我們先設(shè)計(jì)一個(gè)近似模型初家,這個(gè)模型可以非常簡(jiǎn)單偎窘,只要先表現(xiàn)出一些我們需要的光學(xué)性質(zhì)就行,其他的可以一步一步加上去溜在。

這里我們要思考一下是否需要塵埃數(shù)量這么巨大光學(xué)特性又很復(fù)雜的東西陌知,因?yàn)榭諝庵械膲m埃非常小,甚至難以看到掖肋,不如用一種勻質(zhì)的物質(zhì)代替仆葡。當(dāng)然這種物體要和原來(lái)渲染引擎的真空不一樣,它要能把光折射到觀察者眼中培遵,還要符合光傳播隨著距離增加而衰減的特性浙芙。

光線追蹤

上面只是這個(gè)近似模型的特性描述,真實(shí)地寫(xiě)出算法就要考慮怎么看見(jiàn)這種物質(zhì)籽腕,也就是怎么渲染這種物質(zhì)嗡呼。

這里我們使用光線追蹤的算法框架。

光線追蹤簡(jiǎn)單說(shuō)就是設(shè)置一個(gè)虛擬的眼睛皇耗,這個(gè)眼睛在三維空間里是在屏幕外的一個(gè)點(diǎn)南窗。

屏幕上的每個(gè)象素渲染的時(shí)候,就是從虛擬的眼睛開(kāi)始做一條射線通過(guò)所要渲染的像素郎楼,這條射線和屏幕里面的三維空間交匯在哪里(另一種說(shuō)法射中哪個(gè)位置)万伤,像素就渲染那個(gè)位置的顏色。

注意這里我們不能照搬光線跟蹤的定義呜袁,要稍微改變一下敌买,因?yàn)槲覀円秩镜倪@種勻質(zhì)物體顯然不只是表面起作用,而是在射線經(jīng)過(guò)的路徑上每個(gè)點(diǎn)都會(huì)對(duì)像素的顏色產(chǎn)生貢獻(xiàn)阶界。

我們從起點(diǎn)開(kāi)始虹钮,沿著射線每次推進(jìn)一點(diǎn),采樣每個(gè)點(diǎn)的亮度膘融,所有經(jīng)過(guò)的采樣點(diǎn)上的亮度求和就是像素的顏色芙粱。

在勻質(zhì)物理內(nèi)部每個(gè)采樣點(diǎn)的亮度值怎么算呢。按照上面模型的規(guī)則要符合光傳播按距離增加而衰減的特性氧映。這里用一個(gè)簡(jiǎn)單的衰減公式春畔,光的亮度和離光源的距離成平方反比。

就得到了一個(gè)公式i = l/d^2。

代碼如下:

//ro視線起點(diǎn)律姨,rd是視線方向

vec3 raymarch(vec3 ro, vec3 rd)

{

? ? const int stepNum= 100;

? ? //光源強(qiáng)度

? ? const float lightIntense = 100.;

? ? //推進(jìn)步幅

? ? float stepSize= 250./stepNum;

? ? vec3 light= vec3(0.0, 0.0, 0.0);

? ? //光源位置

? ? vec3 lightPos = vec3(2.,2.,.5);

? ? float t = 1.0;

? ? vec3 p = vec3(0.0, 0.0, 0.0);

? ? for(int i=0; i

? ? {

? ? ? ? vec3 p = ro + t*rd;

? ? ? ? //采樣點(diǎn)光照亮度

? ? ? ?float vLight = lightIntense /dot(p-lightPos,p-lightPos);

? ? ? ?light + =vLight;

? ? ? ?//繼續(xù)推進(jìn)

? ? ? ?t+=stepSize;

? ? }

? ? return light;

}

這里要循環(huán)那么多次顯得很浪費(fèi)振峻,有沒(méi)有方法用一個(gè)公式算出來(lái)呢。

眼尖朋友一定看出來(lái)了择份,這不就是對(duì)一個(gè)函數(shù)求線積分嗎铺韧。

沒(méi)錯(cuò),亮度值是一個(gè)空間函數(shù)缓淹,而光線追蹤做的事情其實(shí)是求這個(gè)函數(shù)在視線線段上的線積分。

我們?cè)O(shè)計(jì)的這個(gè)簡(jiǎn)單的模型完全可以用積分的解析解代替光線追蹤。

下面是推導(dǎo)過(guò)程,當(dāng)然不考高數(shù)懒构,答案可以直接抄谎痢。

設(shè)函數(shù)L(t)=I/r^2

函數(shù)x(t)為視線的積分曲線

x(t) = ro +t*rd;

s 為光源

改寫(xiě)L(t)為L(zhǎng)(t) = I/|x(t)-s|^2

要求L(t)從0到介質(zhì)深度d的積分

L(t) = I/dot(p+t*rd-s,p+t*rd-s)

L(t) = I/t^2*dot(rd,rd)+2*dot(p-s,d)t+dot(p-s,p-s)

設(shè)dot(p-s,p-s)=c,dot(p-s,d) = b,而且dot(rd,rd)一定等于1

就得到L(t) = I/t^2+2bt+c^2

在裂項(xiàng)L(t) = I/(t^2+2bt+b^2)+(c-b^2)

接著替換u = (t+b),v=(c-b^2)^1/2

積分轉(zhuǎn)換為求 du/u^2+v^2從b到b+d的積分

最后得到I/v*arctan(u/v)從b到b+d

積分解析公式為 I/v*(arctan(b+d/v)-arctan(b/v))

寫(xiě)成代碼如下:

float InScatter(vec3 start, vec3 rd, vec3 lightPos, float d)

{

? ? vec3 q = start - lightPos;

? ? float b = dot(rd, q);

? ? float c = dot(q, q);

? ? float iv = 1.0f / sqrt(c - b*b);

? ? float l = iv * (atan( (d + b) * iv) - atan( b*iv ));

? ? return l;

}

現(xiàn)在我們的模型還很簡(jiǎn)陋,如果單獨(dú)使用會(huì)略顯單薄字逗。

這時(shí)候就是發(fā)揮藝術(shù)想象力的時(shí)候了,可以結(jié)合別的畫(huà)面元素一起達(dá)到漂亮的結(jié)果。

下面是兩個(gè)用例

一個(gè)是用作低消耗的光暈躏吊,在氣球周?chē)木褪乔驙畹捏w積光


另一個(gè)是把體積光框定在圓錐體內(nèi)部,制造出探照燈的效果帐萎。

水下部分的光帶是結(jié)合了上面提到的貼片制作的比伏。

散射函數(shù)

現(xiàn)在再回想一下我們剛才的模型,為什么視線上的所有采樣點(diǎn)的亮度之和能用來(lái)表示光線在介質(zhì)中散射的效果呢疆导。

其實(shí)我們?cè)诩僭O(shè)每個(gè)點(diǎn)上都有個(gè)塵埃赁项,光照射到塵埃上時(shí),會(huì)把所有光準(zhǔn)確都反射到我們的眼睛里澈段。

如果研究得更精細(xì)一點(diǎn)就會(huì)發(fā)現(xiàn)悠菜,塵埃并沒(méi)有自動(dòng)跟蹤系統(tǒng),是不可能正好把所有光都反射到眼睛里的败富。

光的散射應(yīng)該是向四面八方的悔醋,在一個(gè)以塵埃為球心的球體中幾乎所有方向都有可能反射到光線,而且每個(gè)方向散射出去的光線亮度應(yīng)該是不一樣的兽叮,而這些散射出去的光線亮度總合應(yīng)該和射到塵埃上的那束光線亮度一樣芬骄,也就是能量守恒。

這種散射可以用一個(gè)公式來(lái)表示充择,稱(chēng)為HG公式德玫。


這個(gè)公式就是輸入指定方向和光線入射方向夾角的cos值,求出指定方向散射光線的亮度椎麦。

我們要計(jì)算的是朝著眼睛方向的散射光線亮度宰僧。

代碼如下:

float cosTheta = dot(lightDr,-rd);

float result = (1/4*3.14)* ((1 - g^2)/ (pow(1 + g^2 -2*g* cosTheta, 1.5)));

公式中的g值代表了介質(zhì)散射性質(zhì),圖中顯示了不同g值對(duì)散射的影響。


透光比

模型另一個(gè)要改進(jìn)的部分是光線透光比例琴儿。

透光現(xiàn)象就是說(shuō)光在介質(zhì)內(nèi)內(nèi)傳播段化,會(huì)被吸收一部分,剩下的部分才能透過(guò)介質(zhì)達(dá)到觀察者眼中造成。

這里要用一個(gè)物理法則Beer–Lambert法則显熏。這個(gè)法則描述的是入射光強(qiáng)度和透光強(qiáng)度的比值。

這個(gè)公式可以簡(jiǎn)單的寫(xiě)成晒屎,Out = In*exp(-c*d)喘蟆。

c是物質(zhì)密度,d是距離鼓鲁。

透光強(qiáng)度隨著介質(zhì)的密度光傳播的距離的增加成指數(shù)下降蕴轨。

陰影

體積光還有一個(gè)重要的元素,陰影骇吭,就是它的加入讓體積光產(chǎn)生了各種形狀橙弱。

沒(méi)有陰影的體積光其實(shí)就是霧。

陰影的計(jì)算在實(shí)時(shí)渲染中是比較復(fù)雜的燥狰,要展開(kāi)講內(nèi)容很多棘脐,這里只介紹一下簡(jiǎn)單的原理。

按照我們的模型圖來(lái)看龙致,每一次采樣的時(shí)候如果采樣點(diǎn)被陰影遮住了蛀缝,就直接認(rèn)為采樣結(jié)果為0。


所以需要知道一個(gè)關(guān)鍵信息目代,就是采樣點(diǎn)是否被光照到内斯。

計(jì)算過(guò)程簡(jiǎn)單描述起來(lái)就是,連接采樣點(diǎn)和光源點(diǎn)作一條線段像啼,然后檢測(cè)場(chǎng)景中這條線段有沒(méi)有和別的可見(jiàn)物體相交俘闯。如果有交點(diǎn)就判定該采樣點(diǎn)被陰影遮擋,不記入采樣數(shù)據(jù)忽冻,反之正常計(jì)算真朗。

線段和幾何形狀的求交公式翻一下圖形學(xué)的課本都能很快找到,這里就不再贅述了僧诚。

最終公式

將上面三項(xiàng)加入我們的模型后遮婶,來(lái)重新審視一下我們的模型。

在每個(gè)采樣點(diǎn)上都需要計(jì)算四個(gè)參數(shù)湖笨,來(lái)自光源的光照亮度L旗扑,采樣點(diǎn)到眼睛的透光率T,光線在視線方向上的散射值P慈省,陰影值V臀防。

如果是非均勻介質(zhì),比如有噪音的霧,還要計(jì)算采樣點(diǎn)位置的介質(zhì)密度D袱衷。

散射S= L*T*V*P*D

這就是最終的散射公式捎废。

具體代碼可以參看這個(gè)例子


從算法到現(xiàn)實(shí)

在實(shí)際游戲開(kāi)發(fā)的時(shí)候,還有很多算法優(yōu)化的部分致燥。

一登疗、使用3d紋理保存光照和陰影信息

因?yàn)橛螒蜾秩镜臅r(shí)候同樣需要計(jì)算陰影和光照,沒(méi)必要為了渲染體積光重新計(jì)算一遍嫌蚤。論文[1]提出的算法是在游戲渲染的同時(shí)將光照和陰影保存在一個(gè)3d紋理中辐益,之后計(jì)算體積光只要對(duì)3d紋理中的信息采樣就行了。3d紋理的保存方式也有很多種脱吱,UE4使用了一種層級(jí)式樣的3d紋理荷腊,因?yàn)橥瑫r(shí)保存了空間層級(jí)數(shù)據(jù),在3d索引時(shí)更快急凰。

二、使用隨即采樣減少采樣次數(shù)

今年的獨(dú)立游戲公司DeadPlay使用了隨即采樣的方法猜年,很大程度上減少了光線追蹤采樣的次數(shù)抡锈,每個(gè)象素只采樣了3次,使得高端的游戲特效在手機(jī)端也可以順暢運(yùn)行乔外。

三床三、添加噪點(diǎn)和抗鋸齒算法柔滑畫(huà)面

隨機(jī)采樣可以結(jié)合TemporalAA算法平滑畫(huà)面,每一幀的隨機(jī)采樣生成的隨機(jī)場(chǎng)和TemporalAA每幀的ID關(guān)聯(lián)杨幼,這樣把采樣分散到時(shí)間維度上撇簿,平滑后同樣能達(dá)到較高的精度。

參考文獻(xiàn)

[1]Volumetric Fog SIGGRAPH 2014 - Advances in Real-Time Rendering

[2]Fast, Flexible, Physically-Based Volumetric Light Scattering - NVIDIA Developer

[3]Physically-based & Unified Volumetric Rendering in Frostbite

[4]Low Complexity, High Fidelity - INSIDE Rendering - GDC

[5]Fogshop: Real-Time Design and Rendering of. Inhomogeneous, Single-Scattering Media.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末差购,一起剝皮案震驚了整個(gè)濱河市四瘫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌欲逃,老刑警劉巖找蜜,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異稳析,居然都是意外死亡洗做,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)彰居,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诚纸,“玉大人,你說(shuō)我怎么就攤上這事陈惰∑枧牵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)旧烧。 經(jīng)常有香客問(wèn)我影钉,道長(zhǎng),這世上最難降的妖魔是什么掘剪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任平委,我火速辦了婚禮,結(jié)果婚禮上夺谁,老公的妹妹穿的比我還像新娘廉赔。我一直安慰自己,他們只是感情好匾鸥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蜡塌。 她就那樣靜靜地躺著,像睡著了一般勿负。 火紅的嫁衣襯著肌膚如雪馏艾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天奴愉,我揣著相機(jī)與錄音琅摩,去河邊找鬼。 笑死锭硼,一個(gè)胖子當(dāng)著我的面吹牛房资,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播檀头,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼轰异,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了暑始?” 一聲冷哼從身側(cè)響起搭独,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廊镜,沒(méi)想到半個(gè)月后戳稽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡期升,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年惊奇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片播赁。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颂郎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出容为,到底是詐尸還是另有隱情乓序,我是刑警寧澤寺酪,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站替劈,受9級(jí)特大地震影響寄雀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陨献,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一盒犹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眨业,春花似錦急膀、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至聘殖,卻和暖如春晨雳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奸腺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工餐禁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洋机。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像洋魂,于是被迫代替她去往敵國(guó)和親绷旗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • 任何一個(gè)你認(rèn)為重要的東西都不重要副砍。你認(rèn)為不重要衔肢,是一種重要也是不對(duì)的。這世界上沒(méi)有重要和不重要之說(shuō)豁翎,任何擺在你面前...
    本來(lái)清凈閱讀 335評(píng)論 0 0
  • 又到五月了角骤,又想起了這首歌! It was a Tuesday morning in May and as I a...
    leisure_閱讀 499評(píng)論 0 1
  • 桔子是誰(shuí)心剥? 桔子是匆忙跑世界的留學(xué)生邦尊,環(huán)境工程碩士 懷抱著一顆想要為祖國(guó)的環(huán)境事業(yè)獻(xiàn)身的天真的心 苦苦念書(shū)熬到畢...
    6b0b376d502c閱讀 321評(píng)論 0 2
  • 月夜落梅 夕照浮流光,薄云襯晚霞优烧。 清風(fēng)舒細(xì)柳蝉揍,淡月落梅花。 夜樹(shù)雀無(wú)聲畦娄,春江影浣沙又沾。 望梅逐影去弊仪,燈火遠(yuǎn)人家...
    南枝青木閱讀 425評(píng)論 7 4