日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GAMES101蒙特卡洛光线追踪及Assignment7

發布時間:2023/12/29 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GAMES101蒙特卡洛光线追踪及Assignment7 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 蒙特卡洛路徑追蹤
    • 蒙特卡洛積分
    • 路徑追蹤
      • Whitted-Style光線追蹤的局限性
      • 渲染方程
        • 直接光照
        • 間接光照
        • 兩個問題
        • 優化
      • 總結
  • Assignment 7
    • 準備工作
    • 實現過程
    • 最終結果
    • 提高部分
  • 參考

前言

本篇博客作為Games101關于Ray Tracing部分以及Assignment7路徑追蹤的復習總結。

蒙特卡洛路徑追蹤

蒙特卡洛積分

在此之前先復習一下概率密度函數(PDF, Probability Density Functions),可以理解為取某一隨機變量x的概率是多少的函數p(x)p(x)p(x)

PDF具有如下特點

  • $ p(x) >= 0 \ and \int{p(x)}=1$
  • E[X]=∫xp(x)dxE[X]=\int{xp(x)}dxE[X]=xp(x)dx

對于復雜函數f(x)f(x)f(x)求定積分,用牛頓萊布尼茨公式十分困難,這時候需要用到另一種積分方法,也就是下面的蒙特卡洛積分(Monte Carlo Integration)
∫f(x)dx=1N∑i=1Nf(Xi)p(Xi)Xi~p(x)\int{f(x)}dx = \frac{1}{N}\sum_{i=1}^{N}{\frac{f(X_i)}{p(X_i)}}\ \ \ \ \ \ \ X_i \sim p(x) f(x)dx=N1?i=1N?p(Xi?)f(Xi?)????????Xi?p(x)

這里的做法可以理解為按p(x)p(x)p(x)的概率取隨機變量XiX_iXi?,在圖形學里也就是隨機采樣函數值再累加做平均。

一些需要注意的地方:

  • 采樣點N越多,方差越小
  • 在x上采樣,也是在x上求積分

路徑追蹤

路徑追蹤(Path Tracing)根據渲染方程實現全局光照,或者說基于物理的渲染。個人理解叫追蹤的原因是因為光線本來是打到物體上再多次彈射到人眼所以人才能看見東西,追蹤就是逆著這個路徑,從眼睛“射出”光線,“所見即所得”。

Whitted-Style光線追蹤的局限性

Whitted-style ray tracing是一種理想化模型,存在一些問題,光線只有反射或折射,在漫反射材質停止彈射,沒有漫反射,因此Whitted-style ray tracing渲染出來的效果只有光源和直接光照,如下圖左側所示。我們理應看到的效果是下圖右側這種,就像是照片拍出來的一樣,需要實現這樣真實的效果就需要用到路徑追蹤。

渲染方程

根據輻射度量學,我們一通操作最終求得渲染方程,即在物理意義上得出的正確的能夠描述我們現實生活所見的方程。
Lo(p,ωo)=Le(p,ωo)+∫ΩLi(p,ωi)fr(p,ωi,ωo),(n?ωi)dωiL_o(p,\omega_o)=L_e(p,\omega_o)+\int_{\Omega}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o),(n\cdot\omega_i)d\omega_i Lo?(p,ωo?)=Le?(p,ωo?)+Ω?Li?(p,ωi?)fr?(p,ωi?,ωo?),(n?ωi?)dωi?

某著色點到相機的radiance由其本身發光產生的部分,和從所有立體角接受到的radiance并反射到相機這個一定角度的部分組成。

為了方便計算和統一,這里將著色點本身產生的Le(p,ωo)L_e(p,\omega_o)Le?(p,ωo?)省略掉,我們更關注如下這個渲染方程(或者說反射方程)。
Lo(p,ωo)=∫ΩLi(p,ωi)fr(p,ωi,ωo),(n?ωi)dωiL_o(p,\omega_o)=\int_{\Omega}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o),(n\cdot\omega_i)d\omega_i Lo?(p,ωo?)=Ω?Li?(p,ωi?)fr?(p,ωi?,ωo?),(n?ωi?)dωi?
根據蒙特卡洛積分可以得到
Lo(p,ωo)≈1N∑i=1NLi(p,ωi)fr(p,ωi,ωo)(n?ωi)p(ωi)L_o(p,\omega_o)\approx\frac{1}{N}\sum_{i=1}^{N}\frac{L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)(n\cdot\omega_i)}{p(\omega_i)} Lo?(p,ωo?)N1?i=1N?p(ωi?)Li?(p,ωi?)fr?(p,ωi?,ωo?)(n?ωi?)?
這個方程可以理解為按p(ωi)p(\omega_i)p(ωi?)的概率隨機選取N個方向ωi\omega_iωi?采樣,再累加求平均。

注意,這里的ωo\omega_oωo?ωi\omega_iωi?都是由著色點向外的

直接光照

僅在直接光照下,考慮計算radiance的場景如下

由此可以得到著色方程的shade偽代碼

shade(p, wo)Randomly choose N directions wi~pdfLo = 0.0For each wiTrace a ray r(p, wi)If ray r hit the light // 彈射的光線必須要能打到光源,這個過程中不能被其他物體阻擋Lo += (1 / N) * L_i * f_r * cosine / pdf(wi)Return Lo

其中p是著色點,wo是入射光線,wi是出射光線,r是由眼睛穿過需要渲染的像素到實際著色點的光線。

間接光照

如果路徑追蹤經過一次彈射后沒有打到光源而是打到物體,就構成了間接光照。我們考慮如下這個場景

P接收到的radiance是由Q反射光源得到的,因此為了求點P反射的光,我們需要先求點Q反射出的光。顯然,這里用到了遞歸的思路,將上述shade偽代碼稍作修改即可完成

shade(p, wo)Randomly choose N directions wi~pdfLo = 0.0For each wiTrace a ray r(p, wi)If ray r hit the lightLo += (1 / N) * L_i * f_r * cosine / pdf(wi)Else If ray r hit an object at qLo += (1 / N) * shade(q, -wi) * f_r * cosine / pdf(wi)Return Lo

可以看到只是增加了一個判斷條件,判斷從點p反射出的的光線wi是射到了光源還是其他物體,如果是光源直接加,如果是其他物體則遞歸先求L_i,也就是shade(q,-wi)。
注意,由于shade的參數要求光線方向向外,所以對于點Q,需要將wi取反

兩個問題

上述shade偽代碼還存在兩個問題

  • 每次都會采樣N個方向,最終導致指數爆炸
  • 遞歸沒有出口

對于第一個問題,可以用下圖形象表示

在計算間接光照時,由于每次都要采樣N個點,最終導致NxN^xNx的指數增長。但有一個數是可以避免這種情況,那就是N取1。

在采樣點每次采樣只取1個方向,我們的shade偽代碼又有了如下改動

shade(p, wo)Randomly choose ONE direction wi~pdf(w)Trace a ray r(p, wi)If ray r hit the lightReturn L_i * f_r * cosine / pdf(wi)Else If ray r hit an object at qReturn shade(q, -wi) * f_r * cosine / pdf(wi)

由前文的蒙特卡洛積分我們知道,N取越大越等接近原定積分的值,N取越小結果的噪聲或者說偏差就會越大。我們這里取N為1,可想而知會有很大偏差。為了解決這個問題,可以采取對同一像素多次采樣的方法,根據需要設置對每個像素采樣的次數(spp, samples per pixel)。實現的效果如下圖所示,可以看到間接光照每次采樣的彈射結果雖然都不一樣,但多次采樣求平均后就可以有效減小噪聲。

上述的采樣方法用偽代碼描述如下,與shade偽代碼類似

ray_generation(camPos, pixel)Uniformly choose N sample positions within the pixelpixel_radiance = 0.0For each sample in the pixelShoot a ray r(camPos, cam_to_sample)If ray r hit the scene at ppixel_radiance += 1 / N * shade(p, sample_to_cam)Return pixel_radiance

現在我們來解決第二個問題,這個遞歸算法沒有出口所以會一直持續下去,因此我們需要認為設置一個出口。

這里采用的方法是俄羅斯輪盤賭。設定一個值Russian Roulette (RR),光線每次彈射前需先與RR“賭博”,如果成功則繼續彈射,否則停止。我們可以設在概率P_RR下,將射出光線返回的渲染方程結果Lo除以P_RR,那么將會有1-P_RR的概率停止彈射直接返回0。在此假設下,我們可以得到期望值E,是與我們期望得到的Lo相同的。
E=P?(Lo/P)+(1?P)?0=LoE=P*(Lo/P)+(1-P)*0=Lo E=P?(Lo/P)+(1?P)?0=Lo
由此,我們的shade偽代碼再次改動如下

shade(p, wo)Manually specify a probability P_RRRandomly select ksi in a uniform dist. in [0, 1]If (ksi > P_RR) return 0.0;Randomly choose ONE direction wi~pdf(w)Trace a ray r(p, wi)If ray r hit the lightReturn L_i * f_r * cosine / pdf(wi) / P_RRElse If ray r hit an object at qReturn shade(q, -wi) * f_r * cosine / pdf(wi) / P_RR

優化

到此,我們終于得到了一個正確的路徑追蹤算法,的的確確能正確渲染出一個像素,但是目前這種做法的效率其實并不高。在計算直接光照時,如果我們按照上面得偽代碼計算直接光照部分,那么每次只會隨機射出一根光線,實際上很難打到光源上,計算效率低下。

為了提高成功采樣到直接光照的概率,我們可以對直接光照計算的方法進一步修改,在彈射點進行多次采樣。與間接光照遞歸計算相比,因為直接光照只會彈射一次到光源,所以這樣并不會造成指數爆炸。

如上圖所示,隨著著色點采樣數的提高,成功采樣的幾率自然會提高。但是當光源很小時,如果我們繼續采用平均采樣,那么彈射的數跟光線中可能只有少數幾根能打到光源上,其他采樣光線可以說都是被浪費掉了,這同樣是我們不希望看到的。

如果能對更加確定的東西采樣,那么這個問題自然迎刃而解。考慮我們是想要找到彈射點能打到光源的有效光線,所以反過來考慮,我們對光源進行采樣。并且實際上,蒙特卡洛積分也是允許我們自定義采樣方法的。
Lo(p,ωo)=∫ΩLi(p,ωi)fr(p,ωi,ωo)(n?ωi)dωiL_o(p,\omega_o)=\int_{\Omega}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)(n*\omega_i)d\omega_i Lo?(p,ωo?)=Ω?Li?(p,ωi?)fr?(p,ωi?,ωo?)(n?ωi?)dωi?
上面是我們在前文我們得到的渲染方程,可以看到我們的積分目標是dωid\omega_idωi?,可以解釋為我們是從著色點出發考慮這個積分的。如果我們對光源進行采樣,積分對象自然也需要變化,所以我們需要找到dωid\omega_idωi?dAdAdA之前的關系。下圖很好展現了dωid\omega_idωi?dAdAdA之前的關系。

回顧以前對立體角ω\omegaω的定義
dω=dAr2d\omega = \frac{dA}{r^2} dω=r2dA?
單位立體角就是單位面積與距離平方的比值。因此在這里我們可以類比得出相似的關系,類似Bllin-Phong模型,由光源投射出的光線方向與半球面有一個夾角,所以這里的A=Acosθ′A=Acos\theta'A=Acosθ,而r自然是兩點之間的距離r=x′?xr=x'-xr=x?x。由此,我們得到dωid\omega_idωi?dAdAdA之前的關系
dω=dAcosθ′∣∣x′?x∣∣2cosθ′=nd\omega = \frac{dAcos\theta'}{||x'-x||^2} \ \ \ \ \ cos\theta'=n dω=∣∣x?x2dAcosθ??????cosθ=n
將上式代入渲染方程,我們就可以得到按光源采樣的新蒙特卡洛積分形式
Lo(p,ωo)=∫ΩLi(p,ωi)fr(p,ωi,ωo)cosθdωi=∫ΩLi(p,ωi)fr(p,ωi,ωo)cosθcosθ′∣∣x′?x∣∣2dA≈1N∑i=1NLi(p,ωi)fr(p,ωi,ωo)cosθcosθ′∣∣x′?x∣∣2p(A)其中cosθ=n?dωcosθ′=n?(?dω)\begin{aligned} L_o(p,\omega_o) &=\int_{\Omega}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)cos\theta d\omega_i\\ &=\int_{\Omega}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)cos\theta\frac{cos\theta'}{||x'-x||^2}dA\\ &\approx\frac{1}{N}\sum_{i=1}^{N}\frac{L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)cos\theta\frac{cos\theta'}{||x'-x||^2}}{p(A)}\\ 其中&cos\theta=n\cdot d\omega \ \ \ \ \ cos\theta'=n\cdot(-d\omega)\\ \end{aligned} Lo?(p,ωo?)其中?=Ω?Li?(p,ωi?)fr?(p,ωi?,ωo?)cosθdωi?=Ω?Li?(p,ωi?)fr?(p,ωi?,ωo?)cosθ∣∣x?x2cosθ?dAN1?i=1N?p(A)Li?(p,ωi?)fr?(p,ωi?,ωo?)cosθ∣∣x?x2cosθ??cosθ=n?dω?????cosθ=n?(?dω)?
對于上式,由pdf性質我們知道按p(A)p(A)p(A)對面積積分的結果應該是1(∫p(A)dA=1\int p(A)dA=1p(A)dA=1),自然p(A)=1Ap(A)=\frac{1}{A}p(A)=A1?

針對直接光照部分,按面積對光源采樣的shade偽代碼如下所示

shade(p, wo)# Contribution from the light source.Uniformly sample the light at x’ (pdf_light = 1 / A)L_dir = L_i * f_r * cos θ * cos θ’ / |x’ - p|^2 / pdf_light# Contribution from other reflectors.L_indir = 0.0Test Russian Roulette with probability P_RRUniformly sample the hemisphere toward wi (pdf_hemi = 1 / 2pi)Trace a ray r(p, wi)If ray r hit a non-emitting object at qL_indir = shade(q, -wi) * f_r * cos θ / pdf_hemi / P_RRReturn L_dir + L_indir

除此之外,還有一個遺漏了的問題,那就是在光源上采樣的光線必須得能射到著色點上,也就是說著色點ppp和光源x′x'x之間不能有物體遮擋。

對上述偽代碼稍作修改,判斷一下是否有物體遮擋

shade(p, wo)# Contribution from the light source.Uniformly sample the light at x’ (pdf_light = 1 / A)Shoot a ray from p to x’If the ray is not blocked in the middle // 判斷是否有物體遮擋L_dir = L_i * f_r * cos θ * cos θ’ / |x’ - p|^2 / pdf_light# Contribution from other reflectors.L_indir = 0.0Test Russian Roulette with probability P_RRUniformly sample the hemisphere toward wi (pdf_hemi = 1 / 2pi)Trace a ray r(p, wi)If ray r hit a non-emitting object at qL_indir = shade(q, -wi) * f_r * cos θ / pdf_hemi / P_RRReturn L_dir + L_indir

自此,我們終于得出了正確的,高效的渲染方式。

總結

為了盡可能展現我們看到的現實世界,實際上也就是渲染一張圖片,再根本點就是渲染每一個像素。對每個像素進行多次采樣,根據路徑追蹤得到的渲染方程計算每一次采樣結果再累加平均,得到該像素理想的渲染結果。

對于渲染方程,是根據路徑追蹤得到的基于物理的渲染。與最初我們做的工作相比,之前是簡單粗暴假設光線由半球均勻隨機采樣得到,存在遞歸指數爆炸,沒有出口,效率低下等問題,而現在我們考慮radiance是有兩部分組成,分別采用不同的方法計算。

  • 直接光照,對光源按面積進行采樣
  • 間接光照,按半球隨機采樣一次,并且采用RR控制遞歸深度

Assignment 7

作業7要求我們用代碼實現路徑追蹤算法。在此之前需要用到多個以前作業實現的函數,下面先貼出這些函數的代碼,附有詳細注解和函數作用講解。

準備工作

Triangle::getIntersection in Triangle.hpp
判斷該光線是否與三角形相交并獲得進出時間和相交點的坐標、法線等屬性,返回包含這些屬性的結構體Intersection

inline Intersection Triangle::getIntersection(Ray ray) {Intersection inter;if (dotProduct(ray.direction, normal) > 0)return inter;double u, v, t_tmp = 0;Vector3f pvec = crossProduct(ray.direction, e2);double det = dotProduct(e1, pvec);if (fabs(det) < EPSILON)return inter;double det_inv = 1. / det;Vector3f tvec = ray.origin - v0;u = dotProduct(tvec, pvec) * det_inv;if (u < 0 || u > 1)return inter;Vector3f qvec = crossProduct(tvec, e1);v = dotProduct(ray.direction, qvec) * det_inv;if (v < 0 || u + v > 1)return inter;t_tmp = dotProduct(e2, qvec) * det_inv;// TODO find ray triangle intersectionif (t_tmp < 0)return inter;inter.happened = true;inter.coords = ray(t_tmp);inter.normal = normal;inter.distance = t_tmp;inter.obj = this;inter.m = m;return inter; }

IntersectP(const Ray& ray, const Vector3f& invDir, const std::array<int, 3>& dirIsNeg) in the Bounds3.hpp
判斷光線ray是否與某一包圍盒是否與相交,用于bvh遞歸對每個劃分節點進行判斷

inline bool Bounds3::IntersectP(const Ray& ray, const Vector3f& invDir,const std::array<int, 3>& dirIsNeg) const {// invDir: ray direction(x,y,z), invDir=(1.0/x,1.0/y,1.0/z), use this because Multiply is faster that Division// dirIsNeg: ray direction(x,y,z), dirIsNeg=[int(x>0),int(y>0),int(z>0)], use this to simplify your logic// TODO test if ray bound intersectsfloat t_Min_x = (pMin.x - ray.origin.x) * invDir[0];float t_Min_y = (pMin.y - ray.origin.y) * invDir[1];float t_Min_z = (pMin.z - ray.origin.z) * invDir[2];float t_Max_x = (pMax.x - ray.origin.x) * invDir[0];float t_Max_y = (pMax.y - ray.origin.y) * invDir[1];float t_Max_z = (pMax.z - ray.origin.z) * invDir[2];if (dirIsNeg[0]) {float t = t_Min_x;t_Min_x = t_Max_x;t_Max_x = t;}if (dirIsNeg[1]) {float t = t_Min_y;t_Min_y = t_Max_y;t_Max_y = t;}if (dirIsNeg[2]) {float t = t_Min_z;t_Min_z = t_Max_z;t_Max_z = t;}float t_enter = std::max(t_Min_x, std::max(t_Min_y, t_Min_z));float t_exit = std::min(t_Max_x, std::min(t_Max_y, t_Max_z));// 這里需要注意判斷t_enter == t_exit的情況// 若相等時返回false,由于light的y值一樣所以厚度為0,則光線與燈相交時也為false,導致全黑if (t_enter <= t_exit && t_exit >= 0)return true;elsereturn false; }

getIntersection(BVHBuildNode* node, const Ray ray)in BVH.cpp
加速結構,用于計算光線ray與物體相交的結果,可只對部分物體判斷而不用遍歷所有物體。通過bvh劃分objects并遞歸判斷,獲得最小的distance也就是時間,得到最近的射線求交結果

Intersection BVHAccel::getIntersection(BVHBuildNode* node, const Ray& ray) const {// TODO Traverse the BVH to find intersectionIntersection inter;Vector3f invdir(1 / ray.direction.x, 1 / ray.direction.y, 1 / ray.direction.z);std::array<int, 3> dirIsNeg;dirIsNeg[0] = ray.direction.x < 0;dirIsNeg[1] = ray.direction.y < 0;dirIsNeg[2] = ray.direction.z < 0;// 若不與任何包圍盒相交,則返回空也就是默認的interif (!node->bounds.IntersectP(ray, invdir, dirIsNeg))return inter;// 若為葉子節點則獲得ray與該節點內triangle相交的結果if (node->left == nullptr && node->right == nullptr)return node->object->getIntersection(ray);// 對孩子節點進行遞歸,返回最近交點Intersection hit1 = getIntersection(node->left, ray);Intersection hit2 = getIntersection(node->right, ray);return hit1.distance < hit2.distance ? hit1 : hit2; }

實現過程

在深入理解并正確實現上述代碼以后,我們再來看一下本次作業框架提供的用于實現路徑追蹤算法的函數。

  • castRay(const Ray ray, int depth)in Scene.cpp:
    在其中實現 Path Trac-ing 算法,可能用到的函數有:

  • intersect(const Ray ray)in Scene.cpp:
    求一條光線與場景的交點

  • sampleLight(Intersection pos, float pdf) in Scene.cpp:
    在場景的所有光源上按面積 uniform 地 sample 一個點,并計算該 sample 的概率密度

  • sample(const Vector3f wi, const Vector3f N) in Material.cpp:
    按照該材質的性質,給定入射方向與法向量,用某種分布采樣一個出射方向

  • pdf(const Vector3f wi, const Vector3f wo, const Vector3f N) in Material.cpp:
    給定一對入射、出射方向與法向量,計算 sample 方法得到該出射方向的概率密度

  • eval(const Vector3f wi, const Vector3f wo, const Vector3f N) in Material.cpp:
    給定一對入射、出射方向與法向量,計算這種情況下的 f_r 值

    除此之外,可能用到的變量有:

  • RussianRoulette in Scene.cpp: P_RR, Russian Roulette 的概率

除此之外,本次作業由于框架原因所以對原偽代碼做了一些修改(主要是wo定義與課程內容相反,由像素指向著色點,而不再是由著色點向外)

shade(p, wo)sampleLight(inter, pdf_light)Get x, ws, NN, emit from interShoot a ray from p to xIf the ray is not blocked in the middleL_dir = emit * eval(wo, ws, N) * dot(ws, N) * dot(ws, NN) / |x-p|^2 / pdf_lightL_indir = 0.0Test Russian Roulette with probability RussianRoulettewi = sample(wo, N)Trace a ray r(p, wi)If ray r hit a non-emitting object at qL_indir = shade(q, wi) * eval(wo, wi, N) * dot(wi, N) / pdf(wo, wi, N) / RussianRouletteReturn L_dir + L_indir

根據上述偽代碼我們可以得到下面這個圖,方便幫助我們理解并寫代碼

由于在前文學習過程中我們簡化了渲染方程,忽略了物體本身發光的部分,所以如果按上述偽代碼實現得到的渲染圖中光源部分會是黑色的。很簡單,如果彈射光線遇到發光的物體則直接返回,我們補上該部分即可得到正確的渲染圖。

最終實現的castRay函數如下,附有詳細注解

// Implementation of Path Tracing Vector3f Scene::castRay(const Ray &ray, int depth) const {// TO DO Implement Path Tracing Algorithm here// 計算直接光照部分Vector3f L_dir (0, 0, 0);// 從像素射出光線作為著色點的入射光線,獲得渲染方程中入射光線與著色點相交的各項參數Intersection inter_obj = intersect(ray);if (!inter_obj.happened) // 需先判斷從像素采樣的該光纖是否有射到物體return L_dir;if (inter_obj.m->hasEmission()) // 如果追蹤到光源則直接返回光源,保證光源是亮的return inter_obj.m->getEmission();Vector3f p = inter_obj.coords;Vector3f N = inter_obj.normal.normalized(); // 法線需要計算cos,所以需要單位化Vector3f wo = ray.direction; // 由于框架原因,這里的wo為像素到著色點的方向,與著色點向外的方向相反// 計算反射光線與光源相交,為提高采樣效率所以從光源出發采樣Intersection inter_light;float pdf_light;sampleLight(inter_light, pdf_light); // 對光源按面積采樣,直接填入默認參數,得到著色點與光源的交點Vector3f x = inter_light.coords;Vector3f ws = (x - p).normalized(); // 從物體指向光源// 從著色點射出光線,與著色點反射的光線比較,判斷著色點反射的光線是否能射到光源Ray objTolight(p, ws);float d1 = (x - p).norm(); // 著色點與光源距離float d2 = intersect(objTolight).distance; // 著色點與相交物體距離// 計算L_dir直接光照if (d2 - d1 > -0.001) { // 做差判斷浮點數是否相等Vector3f eval = inter_obj.m->eval(wo, ws, N); // 注意參數的方向,需要入射方向、出射方向Vector3f emit = inter_light.emit; // 光源投射到著色點的光線的radianceVector3f NN = inter_light.normal.normalized();float cos_theta_obj = dotProduct(N, ws);float cos_theta_light = dotProduct(NN, -ws); // 這里要取負號,因為ws是從著色點指向光源,與NN夾角大于90度為負L_dir = emit * eval * cos_theta_obj * cos_theta_light / std::pow(d1, 2) / pdf_light;}// 遞歸計算間接光照部分Vector3f L_indir (0, 0, 0);float P_RR = get_random_float(); // 采用俄羅斯輪盤賭,避免無窮遞歸,最終數學期望一樣if (P_RR < RussianRoulette) {Vector3f wi = inter_obj.m->sample(wo, N).normalized(); // 對著色點隨機采樣出射光線Ray ray_objToobj(p, wi); // 根據采樣獲得從著色點射向其他物體的光線Intersection inter = intersect(ray_objToobj);if (inter.happened && !inter.m->hasEmission()) { // 如果有交點且交點材質不發光Vector3f eval = inter_obj.m->eval(wo, wi, N); // 計算著色點的eval,而不是反射光線與其他物體交點的float pdf = inter_obj.m->pdf(wo, wi, N); // 計算著色點采樣的pdffloat cos_theta = dotProduct(wi, N);L_indir = castRay(ray_objToobj, depth + 1) * eval * cos_theta / pdf / RussianRoulette;}}return L_dir + L_indir; }

在實現過程中有幾點值得注意

  • 在判斷直接光照彈射的光線是否有遮擋的時候,需要用浮點數比較著色點到光源的距離d1和著色點彈射光線與最近相交物體的距離d2是否相等。判斷浮點數是否相等我們可以采用做差的方法,由于d1>=d2,所以需要d2-d1>=EPSION,我在這里的EPSION取值為-0.001,能夠滿足判斷要求。
  • 對于判斷光線是否與某包圍盒相交的函數IntersectP,在上課時老師講到圖形學里并不會太關注邊界情況,所以t_enter<或者<=t_eixt都是沒問題的,但是在本次實驗中我們需要將邊界條件設為小于等于,否則會渲染出的圖片有部分區域是黑色的。

最終結果

設置不同的spp,能夠得到不同的渲染效果。ssp越大,自然渲染的效果越好,花費的時間也更長。下面給出不同spp渲染的結果

spp=1

spp=16

spp=64

spp=256

提高部分

這里實現了多線程加速部分的內容,可以明顯加快渲染過程。具體實現過程不再贅述,這里僅貼一下代碼和不同線程下的渲染時長對比。

渲染時間183264256
單線程2m21m87m
多線程32s4m16m33m145m

Render.cpp:

// // Created by goksu on 2/25/20. // #include <fstream>#include "Scene.hpp" #include "Renderer.hpp" #include <atomic> #include <thread>// 多線程加速渲染 inline float deg2rad(const float& deg) { return deg * M_PI / 180.0; }const float EPSILON = 0.00001; std::atomic_int progress = 0;// The main render function. This where we iterate over all pixels in the image, // generate primary rays and cast these rays into the scene. The content of the // framebuffer is saved to a file. void Renderer::Render(const Scene& scene) {std::vector<Vector3f> framebuffer(scene.width * scene.height);float scale = tan(deg2rad(scene.fov * 0.5));float imageAspectRatio = scene.width / (float)scene.height;Vector3f eye_pos(278, 273, -800);// change the spp value to change sample ammount// spp: sample per pixelint spp = 256; //原本16std::cout << "SPP: " << spp << "\n";int thred = 24;int per = scene.height/thred; // 960/24=40std::thread th[24]; //多線程auto renderRow = [&](uint32_t lrow, uint32_t hrow){for (uint32_t j = lrow; j < hrow; ++j) {for (uint32_t i = 0; i < scene.width; ++i) {// generate primary ray directionfloat x = (2 * (i + 0.5) / (float)scene.width - 1) *imageAspectRatio * scale;float y = (1 - 2 * (j + 0.5) / (float)scene.height) * scale;Vector3f dir = normalize(Vector3f(-x, y, 1)); // ??? (x,y,-1) ???for (int k = 0; k < spp; k++){framebuffer[(int)(j*scene.width+i)] += scene.castRay(Ray(eye_pos, dir), 0) / spp; }}progress += 1;UpdateProgress(progress / (float)scene.height);}};for(int i=0;i<thred;i++){th[i] = std::thread(renderRow,i*per,(i+1)*per);}for(int i=0;i<thred;i++){th[i].join();}UpdateProgress(1.f);// save framebuffer to fileFILE* fp = fopen("binary.ppm", "wb");(void)fprintf(fp, "P6\n%d %d\n255\n", scene.width, scene.height);for (auto i = 0; i < scene.height * scene.width; ++i) {static unsigned char color[3];color[0] = (unsigned char)(255 * std::pow(clamp(0, 1, framebuffer[i].x), 0.6f));color[1] = (unsigned char)(255 * std::pow(clamp(0, 1, framebuffer[i].y), 0.6f));color[2] = (unsigned char)(255 * std::pow(clamp(0, 1, framebuffer[i].z), 0.6f));fwrite(color, 1, 3, fp);}fclose(fp); }

參考

Games101:作業7(含提高部分)_Q_pril的博客-CSDN博客_games101 作業7

GAMES101: 現代計算機圖形學入門

總結

以上是生活随笔為你收集整理的GAMES101蒙特卡洛光线追踪及Assignment7的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

五月色综合 | 婷婷五月色综合 | 88av视频 | 中文字幕二区在线观看 | 99精品在线免费在线观看 | 久草网站在线观看 | 亚洲国产大片 | 久久兔费看a级 | 免费在线播放视频 | 欧美乱熟臀69xxxxxx | 欧美日韩免费观看一区=区三区 | 国产原创在线视频 | 色在线网站 | 亚洲精品一区二区三区高潮 | 日本中文字幕网 | 五月天色婷婷丁香 | 精品国产乱码久久久久久久 | 成人在线观看免费视频 | 成x99人av在线www| 一区二区三区污 | 正在播放国产一区 | 在线观看免费高清视频大全追剧 | 国产精品久久毛片 | 五月婷婷综合久久 | 国产99久久| 美女视频黄在线 | 一区二区三区在线不卡 | 亚洲闷骚少妇在线观看网站 | 国产视频资源 | 天天爱天天射天天干天天 | 中文字幕在线免费观看 | 国产成人精品国内自产拍免费看 | 国产精品99久久久久的智能播放 | 九九交易行官网 | 精品a视频 | 日日干日日 | 久久国产成人午夜av影院潦草 | 久久久久国| 亚洲三级黄色 | 免费在线h| 久久av免费电影 | 日韩高清免费在线 | 国产系列精品av | 伊人五月 | 国产黄色免费 | 国产黄在线播放 | 久草在线观看 | 狠狠干 狠狠操 | 91精品爽啪蜜夜国产在线播放 | av亚洲产国偷v产偷v自拍小说 | 久久 精品一区 | 久久激情精品 | 91精品秘密在线观看 | 日韩特级毛片 | 丰满少妇一级 | 欧美一级片在线播放 | 国产黄色片久久久 | 成人一区不卡 | 成人免费观看视频网站 | 午夜av免费在线观看 | 人人爽人人 | 国产激情电影综合在线看 | 日韩免费成人av | 久久视频这里有精品 | 中文字幕成人在线观看 | 久久99热这里只有精品国产 | 最新中文字幕在线资源 | 久久久久国 | zzijzzij日本成熟少妇 | 狠狠躁18三区二区一区ai明星 | 狠狠色狠狠色合久久伊人 | 日韩艹 | 在线观看mv的中文字幕网站 | 国产精品美女久久久免费 | 成人av午夜 | 射综合网 | 在线电影a| 三级小视频在线观看 | 男女啪啪免费网站 | 国产视频手机在线 | 国产1级视频 | 久久 一区 | 国产精品美女久久久久久免费 | 成人黄色在线看 | 国产破处在线播放 | 国产91精品一区二区麻豆网站 | 九九欧美| 十八岁以下禁止观看的1000个网站 | 欧美视频在线观看免费网址 | 久久香蕉一区 | 精品久久久久一区二区国产 | 九九精品视频在线看 | 国产小视频在线看 | 国产精品福利一区 | 99久久精品国产免费看不卡 | 日韩中文字幕国产 | 国产精品11| 99国内精品| 免费av大全 | 97福利在线观看 | 五月激情姐姐 | 在线国产欧美 | 国产精品一二三 | 久久精品国产亚洲精品 | 中文字幕人成乱码在线观看 | 超碰在线免费97 | 亚洲二区精品 | 中文字幕a在线 | 日韩电影在线观看中文字幕 | 高潮久久久| 麻豆视传媒官网免费观看 | 黄色成人小视频 | 国产色视频123区 | 久久久久国产免费免费 | 亚洲欧美日韩精品久久奇米一区 | 蜜臀久久99精品久久久无需会员 | 黄色av影院 | 欧美精品做受xxx性少妇 | 色激情在线 | 亚洲国产日本 | 免费韩国av | 亚洲黄色在线免费观看 | 国产精品嫩草影院9 | 最新日韩在线观看视频 | 精品国产色 | 干狠狠 | 开心激情网五月天 | 国产a级精品 | 亚洲aaa级 | 日本精品视频一区二区 | 成人手机在线视频 | 久久男人视频 | 国产黄色大片免费看 | 欧美日韩国产一区二区三区 | 国产免费小视频 | 人人澡人人草 | 国产一区二区综合 | 日韩剧 | 亚洲一区二区观看 | av资源在线看 | 中文久久精品 | 亚洲色影爱久久精品 | 91精品久久香蕉国产线看观看 | 国产精品99久久久久的智能播放 | 国产精品久久久久久69 | 久久精品直播 | 特级西西人体444是什么意思 | 国产高清在线视频 | 五月婷婷视频在线观看 | 国产精品视频永久免费播放 | 精品国产不卡 | 精品久久久国产 | 六月激情网| 日日爽天天 | 久久精品99久久久久久2456 | 国产精品久久久久久久久久 | av资源中文字幕 | 免费黄在线观看 | 亚洲一级理论片 | 在线观看视频你懂的 | 免费在线观看日韩欧美 | 久久,天天综合 | 国内99视频 | 天天插伊人 | 男女精品久久 | 超碰伊人网| 国产艹b视频 | aaa日本高清在线播放免费观看 | 久久欧美在线电影 | 日本资源中文字幕在线 | 伊人超碰在线 | 射射射综合网 | 欧美一区二区三区在线播放 | 久久97久久 | 久久99精品久久久久久秒播蜜臀 | 91精品免费在线 | 精品国产aⅴ一区二区三区 在线直播av | 香蕉久草 | 欧美a级成人淫片免费看 | 成人在线免费小视频 | 天天干夜夜爱 | 最近高清中文字幕 | 午夜精品999| 中文久草| 中文字幕精品一区久久久久 | 青草草在线视频 | 狠狠色综合欧美激情 | 久久久久久视频 | 天天射天天色天天干 | 久久久免费精品 | 免费观看一级成人毛片 | 国产精品免费久久久久久久久久中文 | 可以免费看av | 精品国产一区二区三区男人吃奶 | 在线国产日本 | 成人啪啪18免费游戏链接 | 在线a亚洲视频播放在线观看 | 玖玖爱免费视频 | 国产精品成久久久久三级 | 久久精品国产免费看久久精品 | 97碰碰精品嫩模在线播放 | 97色狠狠 | 美女视频久久久 | 九九九热视频 | 国产一区二区精品在线 | 天天摸天天操天天舔 | www.黄色片.com | 国产午夜精品福利视频 | 久久精品波多野结衣 | 国产成人黄色网址 | 三级av黄色 | 欧美国产在线看 | 青青河边草免费直播 | 天天干天天干天天 | 久久久久久久网 | 99精品系列 | 中文字幕123区 | 蜜臀av夜夜澡人人爽人人桃色 | 天堂在线v | 色综合久久久久久中文网 | 国产美女免费视频 | 国产成人亚洲在线观看 | 青青河边草免费观看完整版高清 | 国产亚洲欧美日韩高清 | 日韩av影片在线观看 | 91免费高清在线观看 | 久久av福利 | 国产精品久久久久久久久久东京 | 二区精品视频 | 在线国产高清 | 久久影院午夜论 | 欧美激情视频一二区 | 国产精品久久久免费 | 中文字幕在线观看三区 | 久日精品 | 狠狠色丁香久久婷婷综合五月 | 91爱爱中文字幕 | 99爱精品视频 | 久久精品2 | 中文字幕av免费在线观看 | 国产破处精品 | 久久久久成人精品 | 91成人在线网站 | 丁香六月五月婷婷 | 91av免费看 | 久久无码精品一区二区三区 | 伊人天天干| 久久人人爽人人片 | 日韩激情影院 | 91成人短视频在线观看 | 久久久免费看视频 | www.夜夜操.com| 亚洲区色 | 亚洲aⅴ久久精品 | 免费一级片观看 | 最近日韩免费视频 | 亚洲精品乱码久久久久久蜜桃91 | www.午夜| 四虎永久免费 | 国产美女被啪进深处喷白浆视频 | 在线视频在线观看 | 国产一区二区三区高清播放 | 午夜成人免费电影 | 国产精品美女久久久久久久 | 亚洲精选视频免费看 | 亚洲精品国产精品国产 | 久久综合天天 | 亚洲理论片 | 五月激情电影 | 欧美一二三视频 | 国产特级毛片aaaaaa高清 | 国产精品99久久久精品免费观看 | 人人干,人人爽 | 欧美久久久久久久久中文字幕 | 日韩欧美精品在线 | 久久久久久久久久久影院 | 久久66热这里只有精品 | 91探花在线视频 | 国产成人一区二区三区免费看 | 精品999在线 | 日韩激情网 | 91大神精品视频 | 亚洲精品影视在线观看 | 51久久夜色精品国产麻豆 | 精品久久久久久电影 | 成人免费在线电影 | 午夜国产一区 | 韩日在线一区 | 国产一区在线免费观看 | 四虎影视精品成人 | 三级黄色理论片 | av一级片网站 | 日韩久久在线 | 日韩欧美在线综合网 | 久久艹久久 | www欧美色| 日韩在线国产精品 | 欧美日韩亚洲在线观看 | 毛片精品免费在线观看 | 色视频在线免费观看 | 成人综合免费 | 日韩欧美一区二区三区在线观看 | 首页av在线 | 日韩在线中文字幕视频 | 色综合久久久久网 | 在线亚洲小视频 | 日韩字幕在线 | 成人毛片网 | 久久社区视频 | 亚洲日日射 | 四虎在线观看精品视频 | 青青射 | 精品一区精品二区 | 国产一区二区三区久久久 | 99精品黄色片免费大全 | 久久99国产精品久久99 | 免费在线观看a v | 国产精品一区二区三区观看 | 国产亚洲精品久久久久久久久久 | 久草在线精品观看 | 国语精品久久 | 综合色伊人 | 久久视频这里只有精品 | 久久久免费毛片 | 免费a网址| 日韩免费高清在线观看 | 国产三级久久久 | 亚洲精品在线一区二区三区 | 黄色成人av | 黄色在线观看免费网站 | 91av原创| 美女黄频在线观看 | 色综合久久久 | av电影在线不卡 | 国产精品专区在线 | 黄色影院在线免费观看 | 成人av在线直播 | 亚洲最新在线视频 | 日韩三级精品 | 日韩有码专区 | 国产精品自在线 | av色综合| 国产1区在线 | 丁香婷婷激情五月 | 亚洲精品一区二区精华 | 精品久久精品 | 日韩成人中文字幕 | 国产v欧美 | 日韩欧美视频在线播放 | 国产片网站 | 成人精品电影 | 成人一区影院 | 中文字幕在线字幕中文 | 香蕉成人在线视频 | 九色视频网 | 狠狠狠色丁香婷婷综合激情 | 99精品色| 在线成人欧美 | 国产一区二区午夜 | 色五月激情五月 | 国产日韩高清在线 | 91最新在线观看 | 国产免费午夜 | 亚洲成av人片在线观看www | 国产黄色片免费 | 欧美精品免费一区二区 | 国产精品无av码在线观看 | 天天操天天综合网 | 黄色国产在线观看 | 欧美狠狠操 | 欧美二区三区91 | 日本中文字幕在线观看 | 黄网站色成年免费观看 | 激情电影在线观看 | 国产精品美女视频网站 | 亚洲1级片 | 99视频这里只有 | 精品在线观看国产 | av在线看网站 | 在线视频18在线视频4k | 亚洲精品视频偷拍 | 国产最新在线视频 | 97精品国产一二三产区 | 日韩在线视频观看 | av视屏在线| 久久免费视频8 | 国内精品久久久久久久久久清纯 | 亚洲成av片人久久久 | 精品视频在线看 | 色永久免费视频 | 精品国产123 | 久久精品亚洲综合专区 | 伊人永久在线 | 91成人网页版 | 91精品国产一区二区在线观看 | 免费看短 | 国产精品久久精品 | 欧美一级视频免费看 | 久久精品国产精品亚洲精品 | 午夜丁香网 | 日本三级久久久 | 婷婷丁香国产 | 欧美激情视频一二区 | 国产精品黑丝在线观看 | 久久久国产电影 | 狠狠色噜噜狠狠狠狠2021天天 | 又粗又长又大又爽又黄少妇毛片 | 成人黄性视频 | 久久精品aaa| 欧美另类调教 | 色综合综合 | 成人毛片久久 | 视频1区2区 | 亚洲精品国偷拍自产在线观看 | 亚洲成a人片在线www | 成人试看120秒 | 91高清在线 | 成人av免费在线观看 | 九九免费在线视频 | 视频在线观看国产 | 日韩午夜精品 | 免费看的毛片 | 久久午夜羞羞影院 | 国产精品美女久久久久久久 | 成人综合婷婷国产精品久久免费 | 香蕉色综合 | 69国产盗摄一区二区三区五区 | 国产专区一 | 在线探花 | 亚洲色图22p | 日韩午夜网站 | 激情欧美在线观看 | 精品国产乱码久久久久久浪潮 | 亚洲欧美精品一区 | av黄色影院 | 亚洲国产精品久久久久 | 国产精品毛片久久蜜 | 久久综合之合合综合久久 | av福利免费| 色综合久| 美女久久久久久久 | 亚洲妇女av | 免费观看久久 | 中文视频在线播放 | 黄色免费大片 | 欧美日bb| 中文字幕二区在线观看 | 国产午夜精品一区二区三区欧美 | 91精品国产自产在线观看 | 欧美激情综合五月色丁香小说 | 婷婷在线色 | 国产免费久久久久 | 欧美一级视频在线观看 | 免费91在线 | 国产男女无遮挡猛进猛出在线观看 | 国产日本高清 | 一区二区视频免费在线观看 | 精品电影一区 | 久久久久久毛片精品免费不卡 | 午夜久久福利 | 久久国产精品一区二区三区 | 亚洲一级黄色片 | 日韩在线免费小视频 | 国产日本在线 | 国产在线91精品 | 日韩亚洲在线观看 | 中文字幕在线人 | 久久久久久高清 | 天天激情在线 | 黄色小网站在线观看 | 亚洲精品字幕在线观看 | 日韩精品欧美一区 | 色a资源在线 | 中文字幕影片免费在线观看 | 激情视频二区 | 中文字幕欧美三区 | .精品久久久麻豆国产精品 亚洲va欧美 | 99中文在线 | 成片免费观看视频大全 | 2023亚洲精品国偷拍自产在线 | 婷婷色中文 | 色综合久久88色综合天天免费 | 人人讲下载 | 天天干天天操天天爱 | 国产精品人人做人人爽人人添 | 成人一区在线观看 | 国内精品视频免费 | h文在线观看免费 | 日韩亚洲在线 | 久久极品 | 亚洲一二三久久 | 亚洲精品乱码久久久久久写真 | 久9在线| 日韩v在线91成人自拍 | 人人舔人人爽 | 在线视频观看你懂的 | 国产福利一区二区三区在线观看 | 国产成人黄色在线 | 久久99精品久久久久久 | 久久久99精品免费观看乱色 | 日韩在线 一区二区 | 欧美精品三级在线观看 | 精品久久久久一区二区国产 | 亚洲午夜精品福利 | av片中文字幕 | 大胆欧美gogo免费视频一二区 | 久久96国产精品久久99漫画 | 国产亚洲欧美精品久久久久久 | 国产精品麻豆一区二区三区 | 欧美射射射 | 人人插人人草 | 99精品免费视频 | 精品国产1区2区 | 国产成人1区 | 69精品久久久 | 久久久久久久久久久久久久电影 | 丁香久久综合 | 探花视频免费在线观看 | 色婷婷综合在线 | 伊人开心激情 | 91精品国产综合久久婷婷香蕉 | 精品 一区 在线 | av理论电影| 国产免费资源 | 国语久久| 麻豆免费观看视频 | 日韩在线免费电影 | 国产精品入口麻豆www | 粉嫩av一区二区三区免费 | av免费看在线 | 天天色播 | 在线播放日韩 | 久草免费在线 | 911精品美国片911久久久 | 又色又爽又黄高潮的免费视频 | 伊人影院在线观看 | 日韩在线观看影院 | 欧美一二三区在线观看 | 97超碰在线播放 | 日韩精品视频第一页 | 免费在线a | 国产综合精品一区二区三区 | 久久九九免费视频 | 久久久免费精品 | 国产精品国产三级国产aⅴ无密码 | 亚洲激情在线观看 | 国产 字幕 制服 中文 在线 | 久久观看免费视频 | 热精品 | 久久艹欧美 | 久久久久久久久久久久久国产精品 | 久久不卡电影 | 在线视频 成人 | 中文字幕在线观看一区二区三区 | 午夜男人影院 | 黄色小网站免费看 | 国内精品久久久久久久久久清纯 | 黄网在线免费观看 | 美女精品网站 | av网站在线观看免费 | 欧日韩在线视频 | 色偷偷88欧美精品久久久 | 成人亚洲欧美 | 国产免费久久 | 国产亚洲精品久久 | 精品伦理一区二区三区 | 亚洲精品合集 | 久久影院亚洲 | 免费看的黄色的网站 | av网站在线免费观看 | 999久久久久久久久久久 | 在线观看网站你懂的 | www色片| 国产经典 欧美精品 | 激情六月婷婷久久 | 久久精品一二三 | 西西4444www大胆无视频 | 国产成人免费观看 | 成人av网址大全 | 中文字幕亚洲不卡 | 国产精品成人一区二区三区吃奶 | www.色午夜 | 成年人免费av网站 | 亚洲最大免费成人网 | 中文字幕在线不卡国产视频 | 三级黄色欧美 | 成人av网站在线播放 | 天天做天天爱夜夜爽 | 黄av免费 | 精品亚洲欧美一区 | 国产成人一区三区 | 手机成人免费视频 | 国产999精品久久久久久绿帽 | 国产99久久久国产精品 | 黄色免费高清视频 | 又黄又刺激的视频 | 国产精品嫩草影院123 | 日韩欧美在线不卡 | 天天操天天摸天天爽 | 国产成人久久av | 九九视频免费在线观看 | 中文字幕免费 | 久久综合狠狠狠色97 | 久久久久久美女 | 最新久久免费视频 | 24小时日本在线www免费的 | 99久高清在线观看视频99精品热在线观看视频 | 欧美性久久久 | 亚洲成av人片在线观看www | 国产精品乱码高清在线看 | 久久九九精品久久 | 亚洲春色综合另类校园电影 | 亚洲在线成人精品 | 久久伊人精品天天 | 毛片网站免费 | 精品国产精品一区二区夜夜嗨 | 国产分类视频 | 成人全视频免费观看在线看 | 99精品视频在线免费观看 | 91福利在线观看 | 四虎国产精品永久在线国在线 | 婷婷 中文字幕 | 在线观看91精品视频 | 日韩试看 | 成人午夜久久 | 色香com.| 手机看国产毛片 | 久久黄色网址 | 福利视频区 | 午夜国产福利在线 | 黄色在线观看免费 | 亚洲一级片av | 欧美了一区在线观看 | 91精选在线| 国产精品资源网 | 免费在线一区二区 | 中文字幕在线视频国产 | 国产午夜精品久久 | 五月婷婷电影网 | 丁香影院在线 | 8x成人免费视频 | www.国产精品 | 久草在线视频中文 | 韩国av一区二区三区 | 国产精品美女免费看 | 日韩精品免费一区二区在线观看 | 中文字幕色婷婷在线视频 | 免费看片在线观看 | 日韩电影一区二区三区在线观看 | 中文日韩在线 | 中文字幕日本在线观看 | 日韩成人免费在线电影 | 亚洲少妇激情 | 99久久精品久久久久久动态片 | 久久成人精品视频 | 精品99999 | 久久久久国 | www.亚洲| 日韩免费av网址 | 五月天综合色激情 | 国产在线播放一区二区三区 | 97电影院在线观看 | 麻豆极品 | 午夜视频免费 | 精品国产乱码一区二 | 操夜夜操 | 亚洲精品国内 | 黄色午夜| 婷婷丁香色综合狠狠色 | 国产在线播放一区二区三区 | 91大片网站 | 天天操天天干天天玩 | 在线观看黄a | 国产香蕉久久精品综合网 | 蜜臀精品久久久久久蜜臀 | 韩国视频一区二区三区 | 激情五月婷婷 | av一级片在线观看 | 亚洲国产精品女人久久久 | 午夜精品一区二区三区免费 | 二区三区精品 | 人人爱在线视频 | 伊人久久五月天 | 一区二区三区视频网站 | 国产黄色成人av | 伊人伊成久久人综合网站 | 国产在线视频一区二区三区 | 欧美一级片免费在线观看 | 美女搞黄国产视频网站 | 色婷婷av国产精品 | 99国内精品 | 国产免费久久久久 | 色av色av色av | 亚洲精品国产免费 | 免费日韩 精品中文字幕视频在线 | 草久视频在线观看 | 国精产品满18岁在线 | 中文字幕在线观看你懂的 | 久草视频在线免费播放 | 五月婷婷六月综合 | 久久久精品国产免费观看一区二区 | 四川妇女搡bbbb搡bbbb搡 | 久久99国产综合精品免费 | 中文字幕精品视频 | 欧美性受极品xxxx喷水 | 国产人成精品一区二区三 | 黄色美女免费网站 | 九九久久久久久久久激情 | 九九精品在线观看 | 国产在线第三页 | 91丨九色丨蝌蚪丰满 | 99在线热播精品免费 | 国产午夜在线观看 | 国产免费影院 | 日韩免费高清 | 成年人免费看片网站 | 麻豆视频成人 | 美女视频国产 | 91色吧| 亚洲精品午夜久久久久久久久久久 | 24小时日本在线www免费的 | 97av超碰| 超碰97人| 欧美日韩在线免费观看视频 | 国产视频在 | 国产精品国产三级在线专区 | 日韩欧美高清视频在线观看 | 特黄特黄的视频 | 99久久精品免费看国产 | 国产成人精品av在线观 | 成人黄视频 | www.com久久久 | 成人精品一区二区三区电影免费 | 国产视频观看 | 国产大片免费久久 | 97精产国品一二三产区在线 | 精品特级毛片 | 国产a视频免费观看 | 园产精品久久久久久久7电影 | 亚洲蜜桃av | 国产拍揄自揄精品视频麻豆 | 色99网| 亚洲六月丁香色婷婷综合久久 | 国产在线看一区 | 一区二区三区视频 | 少妇搡bbbb搡bbb搡aa | 亚色视频在线观看 | 国产永久免费 | 在线亚洲播放 | 免费日韩电影 | 国产999| 精品久久久久一区二区国产 | 天天射射天天 | 美女久久久久久久久久久 | 日韩一级成人av | 激情婷婷久久 | 男女拍拍免费视频 | 日韩a级免费视频 | 免费看黄色91| 色综合婷婷久久 | 久久久免费少妇 | 国产精品白浆视频 | 天天色欧美 | 四虎成人精品永久免费av | 国产精品一区二区久久精品 | 五月婷婷一区 | 一区免费在线 | 久久久久久久久亚洲精品 | 日韩精品在线免费观看 | 久久国产露脸精品国产 | 天天超碰 | 国产h在线播放 | 国产69精品久久久久9999apgf | 久久免费视频7 | av福利在线 | 人人玩人人添人人 | 久久精品国产亚洲a | 日韩av在线不卡 | 免费看久久 | 亚洲免费成人 | 97av在线| 亚洲人在线视频 | 在线看成人 | 欧美极品少妇xbxb性爽爽视频 | 日日干天天操 | 精品久久久久久亚洲 | 探花视频网站 | 久久福利影视 | 高潮毛片无遮挡高清免费 | 成人av免费看 | 国产午夜小视频 | 亚洲精品美女久久17c | www.日本色| 91免费在线看片 | 免费成人av电影 | 国产原创在线 | 在线视频观看你懂的 | 亚洲永久精品在线观看 | 国产视频精品久久 | 人人干天天干 | 伊人一级| 日韩在线高清免费视频 | 色婷婷啪啪免费在线电影观看 | 亚洲黄色av一区 | 91久久国产综合精品女同国语 | 欧美精品久久天天躁 | 国产精品ssss在线亚洲 | 色婷婷精品大在线视频 | 欧美国产日韩一区 | 免费看的av片| 在线亚洲激情 | 日韩视频免费观看高清完整版在线 | 视频1区2区 | 91看片在线 | 久草在线视频新 | 一级性生活片 | 97人人模人人爽人人喊网 | 精品亚洲免费 | 国产精品免费在线播放 | a黄色片在线观看 | 日韩视频1区 | 黄色成人91 | 亚洲六月丁香色婷婷综合久久 | 色丁香色婷婷 | 欧美在线1区 | 丁香综合五月 | 亚洲一区二区三区91 | 日韩18p| 一区二区 不卡 | 国产免费一区二区三区最新 | 正在播放国产精品 | 国产成人99av超碰超爽 | 婷婷社区五月天 | 亚洲禁18久人片 | 婷婷日 | 日韩电影中文字幕在线观看 | 国语黄色片 | 久久你懂的 | 福利一区在线视频 | 亚洲午夜精品福利 | 久久夜夜夜 | 天天综合亚洲 | 亚洲免费国产视频 | 欧美日本在线观看视频 | 成年人毛片在线观看 | 久久国产品 | 国内丰满少妇猛烈精品播放 | 国内精品美女在线观看 | 99精品久久久 | 97在线视频免费看 | 国产视频资源在线观看 | 亚州精品天堂中文字幕 | 色吊丝av中文字幕 | 久久综合色8888| 国产亚洲成人网 | 91精品久久久久久综合五月天 | 亚洲国产中文在线 | 日韩视频三区 | 日韩综合第一页 | 国产黄色片免费看 | 国产精品18久久久久vr手机版特色 | 中文字幕色在线视频 | 久久久久久久久久久久电影 | 婷婷色av| 在线99视频 | 欧洲精品久久久久毛片完整版 | a黄色片| 精品久久1| 国产网红在线 | 欧美三级在线播放 | 国产在线观看中文字幕 | 国产二区av | 日韩爱爱网站 | 麻豆影视在线观看 | 岛国av在线免费 | 日本中文字幕视频 | 久久综合狠狠综合久久狠狠色综合 | 久久久国产视频 | 国产专区精品视频 | 亚洲成av人影片在线观看 | 国产精品免费看久久久8精臀av | 99久久精品国产一区 | 国产日本在线 | 日韩精品一区二区在线视频 | 日韩午夜一级片 | 97久久久免费福利网址 | 久久99视频免费 | 成年人视频在线免费播放 | 69精品视频 | 久久久麻豆精品一区二区 | 精品一区二区在线免费观看 | 亚洲一区二区三区在线看 | 亚洲日b视频 | 国产成人精品一区二区在线 | 免费观看成人网 | 国产视频一区二区在线播放 | 国产香蕉97碰碰久久人人 | 狠狠操操操 | 激情av一区二区 | 国产成人a亚洲精品 | 国产 一区二区三区 在线 | 成人在线免费视频观看 | 婷婷av网 | 亚洲视频久久久 | 碰超在线| 黄色福利网站 | 国产一级视频 | 久久国产精品久久精品 | 亚洲视频在线播放 | 一区二区三区三区在线 | 九九色网| 九九免费视频 | 天天爱天天射 | 欧美日韩久 | 成人精品999| 五月天天av | 免费亚洲一区二区 | 伊人资源视频在线 | 欧美大jb | 97精品国产97久久久久久久久久久久 | 日韩成人黄色av | 精品高清美女精品国产区 | 国产视频在线观看一区 | 91在线影院 | 国产一区在线精品 | 天天爽夜夜爽精品视频婷婷 | 国产精品一二三 | 中文av网站 | 亚洲国产小视频在线观看 | 久久精品99国产国产 | 久久综合综合久久综合 | 色在线观看网站 | 中文字幕中文字幕在线中文字幕三区 | 91探花国产综合在线精品 | 国产在线播放一区二区 | 精品国产自在精品国产精野外直播 | 久精品一区| 亚洲综合色激情五月 | 国产永久网站 | 亚洲电影成人 | 国产精品aⅴ | 丁香一区二区 | 开心综合网 | 午夜91视频 | 国产精品成人a免费观看 | 狠狠干网站 | 国产一区播放 | 香蕉视频日本 | 天天拍天天色 | 国产男女无遮挡猛进猛出在线观看 | 国产视频美女 | 久久久影院一区二区三区 | 波多野结衣电影一区 | 欧美日韩不卡一区二区三区 | 超碰伊人网 | 麻豆视频在线免费 | 久草电影免费在线观看 | 亚洲精品在线一区二区 | 亚洲天天摸日日摸天天欢 | 亚洲三级av | 中文字幕在线字幕中文 | 亚洲一级二级 | 天天曰天天曰 | 超碰人人草 | 天天干天天做 | 日本黄区免费视频观看 | 亚洲在线不卡 | 日韩成人黄色 | 69国产在线观看 | 一二三四精品 | 99在线精品视频 | 久久久久久毛片 | 中文理论片 | 国产成免费视频 | 亚洲成人资源网 | 国产字幕在线播放 | a在线观看免费视频 | 久久伦理视频 | 亚洲激情综合网 | 十八岁以下禁止观看的1000个网站 | 国产一级二级在线观看 | 免费黄色在线网址 | 国产精品乱码久久久久久1区2区 | 人人干人人超 | 在线观看激情av | 视频三区 | 黄色av免费看 | 国产一区二区成人 | 国产成视频在线观看 | 免费在线国产黄色 | 日韩动漫免费观看高清完整版在线观看 | 精品久久一区二区三区 | 国产精品尤物视频 | www99久久| 一区久久久 | 久久99热国产 | 中文乱幕日产无线码1区 | 69国产精品视频 |