1. 程式人生 > >基於物理的渲染技術(PBR)系列二

基於物理的渲染技術(PBR)系列二

筆者介紹:姜雪偉,IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,國家專利發明人;已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《Unity3D實戰核心技術詳解》電子工業出版社等。

繼續上篇部落格中基於物理的渲染技術(PBR)系列一的講解,在這裡我們引入了一種被稱為渲染方程(Render Equation)的東西。它是某些聰明絕頂人所構想出來的一個精妙的方程式,是如今我們所擁有的用來模擬光的視覺效果最好的模型。基於物理的渲染所堅定的遵循的是一種被稱為反射率方程(The Reflectance Equation)的渲染方程的特化版本。要正確的理解PBR 很重要的一點就是要首先透徹的理解反射率方程:


反射率方程一開始可能會顯得有些嚇人,不過隨著我們慢慢對其進行剖析,讀者最終會逐漸理解它的。要正確的理解這個方程式,我們必須要稍微涉足一些輻射度量學(Radiometry)的內容。輻射度量學是一種用來度量電磁場輻射(包括可見光)的手段。有很多種輻射度量(radiometric quantities)可以用來測量曲面或者某個方向上的光,但是我們將只會討論其中和反射率方程有關的一種。它被稱為輻射率(Radiance),在這裡用來表示。輻射率被用來量化單一方向上發射來的光線的大小或者強度。由於輻射率是由許多物理變數集合而成的,一開始理解起來可能有些困難,因此我們首先關注一下這些物理量:

輻射通量:輻射通量

表示的是一個光源所輸出的能量,以瓦特為單位。光是由多種不同波長的能量所集合而成的,而每種波長則與一種特定的(可見的)顏色相關。因此一個光源所放射出來的能量可以被視作這個光源包含的所有各種波長的一個函式。波長介於390nm到700nm(納米)的光被認為是處於可見光光譜中,也就是說它們是人眼可見的波長。在下面你可以看到一幅圖片,裡面展示了日光中不同波長的光所具有的能量:


輻射通量將會計算這個由不同波長構成的函式的總面積。直接將這種對不同波長的計量作為引數輸入計算機圖形有一些不切實際,因此我們通常不直接使用波長的強度而是使用三原色編碼,也就是RGB(或者按通常的稱呼:光色)來作為輻射通量表示的簡化。這套編碼確實會帶來一些資訊上的損失,但是這對於視覺效果上的影響基本可以忽略。

立體角:立體角用表示,它可以為我們描述投射到單位球體上的一個截面的大小或者面積。投射到這個單位球體上的截面的面積就被稱為立體角(Solid Angle),你可以把立體角想象成為一個帶有體積的方向:


可以把自己想象成為一個站在單位球面的中心的觀察者,向著投影的方向看。這個投影輪廓的大小就是立體角。

輻射強度:輻射強度(Radiant Intensity)表示的是在單位球面上,一個光源向每單位立體角所投送的輻射通量。舉例來說,假設一個全向光源向所有方向均勻的輻射能量,輻射強度就能幫我們計算出它在一個單位面積(立體角)內的能量大小:


計算輻射強度的公式如下所示:


其中表示輻射通量除以立體角

在理解了輻射通量,輻射強度與立體角的概念之後,我們終於可以開始討論輻射率的方程式了。這個方程表示的是,一個擁有輻射強度的光源在單位面積,單位立體角上的輻射出的總能量:

L=d2ΦdAdωcosθ


輻射率是輻射度量學上表示一個區域平面上光線總量的物理量,它受到入射(Incident)(或者來射)光線與平面法線間的夾角的餘弦值的影響:當直接輻射到平面上的程度越低時,光線就越弱,而當光線完全垂直於平面時強度最高。這和我們在前面的基礎光照教程中對於漫反射光照的概念相似,其中就直接對應於光線的方向向量和平面法向量的點積:

float cosTheta = dot(lightDir, N);  

輻射率方程很有用,因為它把大部分我們感興趣的物理量都包含了進去。如果我們把立體角和麵積看作是無窮小的,那麼我們就能用輻射率來表示單束光線穿過空間中的一個點的通量。這就使我們可以計算得出作用於單個(片段)點上的單束光線的輻射率,我們實際上把立體角轉變為方向向量然後把面轉換為點。這樣我們就能直接在我們的著色器中使用輻射率來計算單束光線對每個片段的作用了。

事實上,當涉及到輻射率時,我們通常關心的是所有投射到點上的光線的總和,而這個和就稱為輻射照度或者輻照度(Irradiance)。在理解了輻射率和輻照度的概念之後,讓我們再回過頭來看看反射率方程:

相關推薦

基於物理渲染技術PBR系列

筆者介紹:姜雪偉,IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,國家專利發明人;已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《Unity3D實戰核心技術詳解》電子工業出版社等。繼續上篇部落格中基於物理的渲染技術(PBR)系列一的講解,

基於物理渲染技術PBR系列

筆者介紹:姜雪偉,IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,國家專利發明人;已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《Unity3D實戰核心技術詳解》電子工業出版社等。PBR,或者用更通俗一些的稱呼是指基於物理的渲染(Phys

基於物理渲染技術PBR系列

筆者介紹:姜雪偉,IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,國家專利發明人;已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《Unity3D實戰核心技術詳解》電子工業出版社等。BRDF,或者說雙向反射分佈函式,它接受入射(光)方向ωi

基於物理渲染技術PBR系列

筆者介紹:姜雪偉,IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,國家專利發明人;已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《Unity3D實戰核心技術詳解》電子工業出版社等。接著上一篇部落格講解的內容基於物理的渲染技術(PBR)系列

基於 DirectX11 的 MMDViewer 03-渲染管線1

present esc ren 調用 param directx11 回調函數 hicon 文章   準備工作:     開始搭建框架之前,你需要確保已經進行了 D3D 開發環境的搭建,相關教程可以閱讀這篇文章。不了解 DirectX11 的人,這個作者有關 Direc

基於HTTP協議的幾種實時資料獲取技術

轉載自五月的倉頡 HTTP協議 HTTP協議是建立在TCP協議上的應用層協議,協議的本質是請求----應答: 即對於HTTP協議來說,服務端給一次響應後整個請求就結束了,這是HTTP請求最大的特點,也是由於這個特點,HTTP請求無法做到的是服務端向客戶端主動推送資料。 但由於H

基於數字光柵投影的結構光三維測量技術總結

概述 三維重建 光學三維測量 被動三維測量 主動三維測量 基於PMP的結構光三維測量技術 結

PDF技術-Java實現Office系列檔案轉PDF檔案

最近,公司要求做個檔案轉pdf的調研報告,於是在網上找了一些實現方法,現在將這些方法做個對比,並記錄下來,以後或許有用呢,哈哈。 首先說一下需求,產品要求不能使用第三方軟體實現,因為這種實現方式效率不高,所以需要使用“純Java程式碼”實現。同時也對跨平臺有要求,系統需要執行在linux系統

Android中基於HTTP的通訊技術3使用HttpClient進行Get方式通訊

繼續搬磚學習android通訊(來自極客學院) 使用HttpClient進行Get方式通訊,通過HttpClient建立網路連結,使用HttpGet方法讀取資料,並且通過Response獲取Entity返回值。package com.example.httpclientge

Android中基於HTTP的通訊技術5Google開源庫 使用 Volley 實現 JSON 字串請求

使用 Volley 實現 JSON 字串請求,通過極少的程式碼以及更方便理解的引數完成通訊。 (來自極客學院的學習筆記,我是搬運工- -)   Volley是谷歌開發android平臺的網路通訊庫:更

PBR基於物理渲染

什麼是基於物理渲染(PBR)? 傳統3D材質製作方法是基於藝術家的手藝的,由美術根據個人評估繪製Diffuse貼圖調整顏色後進行渲染。好處是畫成什麼顏色就是什麼顏色,製作流程簡單修改直觀,缺點則是質量不穩定,難以標準化和做進一步的細緻分工,導致遊戲製作規模受到人力限制;

基於 HTTP 協議的幾種實時數據獲取技術

通過 tty 輪詢 至少 不能 info back 同步 都在 HTTP協議 HTTP協議大家都很熟悉了,開始本文之前,首先簡單回顧一下HTTP協議。 HTTP協議是建立在TCP協議上的應用層協議,協議的本質是請求----應答:

鏡像的分層結構 - 每天5分鐘玩轉容器技術11

數據 9.png upload 問題: 所有 rfi image tle acs Docker 支持通過擴展現有鏡像,創建新的鏡像。 實際上,Docker Hub 中 99% 的鏡像都是通過在 base 鏡像中安裝和配置需要的軟件構建出來的。比如我們現在構建一個新的鏡像,

調試 Dockerfile - 每天5分鐘玩轉 Docker 容器技術15

top add font tom middle 程序 ria family 是個 包括 Dockerfile 在內的任何腳本和程序都會出錯。有錯並不可怕,但必須有辦法排查,所以本節討論如何 debug Dockerfile。 先回顧一下通過 Dockerfile 構建鏡像

網絡構建入門技術5——子網劃分應用

掩碼 -1 參考資料 臺電 www 說明 網絡 com hive 說明(2017-5-16 11:27:00): 題目: 一個公司有530臺電腦,組成一個對等局域網,子網掩碼和IP設多少最合適? 1. 首先選IP地址類別,A類太多,C類不夠用,就選B類了,假設為188.18

Dockerfile 常用指令 - 每天5分鐘玩轉 Docker 容器技術16

依次 官方文檔 構建 bottom str -s 暴露 工作 12px 是時候系統學習 Dockerfile 了。下面列出了 Dockerfile 中最常用的指令,完整列表和說明可參看官方文檔。 FROM指定 base 鏡像。 MAINTAINER設置鏡像的作

RUN vs CMD vs ENTRYPOINT - 每天5分鐘玩轉 Docker 容器技術17

docker 教程 容器 RUN、CMD 和 ENTRYPOINT 這三個 Dockerfile 指令看上去很類似很容易混淆。本節將通過實踐詳細討論它們的區別。簡單的說RUN 執行命令並創建新的鏡像層RUN 經常用於安裝軟件包。CMD 設置容器啟動後默認執行的命令及其參數但 CMD 能夠被 doc

使用公共 Registry - 每天5分鐘玩轉 Docker 容器技術19

docker 教程 容器 保存和分發鏡像的最直接方法就是使用 Docker Hub。Docker Hub 是 Docker 公司維護的公共 Registry。用戶可以將自己的鏡像保存到 Docker Hub 免費的 repository 中。如果不希望別人訪問自己的鏡像,也可以購買私有 repos

Docker 鏡像小結 - 每天5分鐘玩轉 Docker 容器技術21

列表 例如 normal one sys tro docker comm color 本節我們對 Docker 鏡像做個小結。 這一部分我們首先討論了鏡像的分層結構,然後學習了如何構建鏡像,最後實踐使用 Docker Hub 和本地 registry。 下面是鏡像的常用操作

如何運行容器?- 每天5分鐘玩轉 Docker 容器技術22

docker 教程 容器 上一章我們學習了如何構建 Docker 鏡像,並通過鏡像運行容器。本章將深入討論容器:學習容器的各種操作,容器各種狀態之間如何轉換,以及實現容器的底層技術。運行容器docker run 是啟動容器的方法。在討論 Dockerfile 時我們已經學習到,可用三種方式指定容器