1. 程式人生 > >OpenGL——理解延遲著色法(上篇)

OpenGL——理解延遲著色法(上篇)

本文件只是學習心得,系統學習請參考原文。 之前看Unity的文件的時候,經常看到正向渲染和延遲渲染這樣高大上的名詞,然後看了一下文件,依舊保持一臉懵逼的狀態。 直到我學習了這篇之後,才真正理解了延遲渲染的意義和存在價值。 Q1:正向渲染的缺陷是什麼? 大部分片段著色器輸出,都會被之後的輸出覆蓋,浪費了大量資源。而且場景越複雜,光源越多,這種浪費越嚴重。 Q2:延遲著色延遲的是那一部分? 延遲的是複雜的光照部分。也就是片段著色器的部分。 Q3:延遲著色發的原理是什麼? 把幾何處理階段的資料,存到G-Buffer中去,然後像類似後期處理一樣的方式,去利用G-Buffer中的資料去計算光照 OpenGL並沒有限制我們往顏色快取裡面存放什麼資料,這是延遲著色法得以實現的大前提。 Q4:延遲著色發算是後期處理的一種嗎? 原則上不是。 雖然有相似之處,比如,想把資料寫入到Buffer中去,然後在一張Quad(四個頂點組成的平面)上計算最終結果。 但是,延遲渲染中的G-Buffer中的資料,並不是最終結果,他只是整個渲染過程的一部分,只有加上延遲著色的那部分,才算完成了一個完整的渲染過程。 Q5:延遲著色法有哪些缺點? 需要消耗大量快取。 不能處理顏色混合。 迫使你對大部分場景使用相同的光照演算法,雖然可以通過包含跟多關於材質的資料來減緩這一缺陷,但是也意味著會消耗更多的視訊記憶體。 Q6:延遲著色為什麼會消耗大量快取? 因為我們要把大量資料存放到G-Buffer中,比如:頂點資料,法線向量資料,顏色資料,鏡面反射係數資料等等。 初次之外,還要傳入觀察點位置和光源資料,當然,這些是可以忽略不計的。 Q7:延遲著色法為什麼不支援顏色混合。 因為G緩衝中所有的資料都是從一個單獨的片段中來的,也就是最前面的片段,而混合需要依賴當前片段和之前的片段進行計算操作(注意:在處理G緩衝的時候,實質上的片段操作還木有開始,下圖中的G-Buffer.fs本質上是填充G-Buffer的過程,而不是在計算片段。) 下圖是我對延遲著色發的過程的理解,這張圖不包含通過前向著色法結合延遲著色法進行統一渲染的流程,那將是另一篇心得的內容。 第一組Shader,用來填充G-Buffer。 第二組Shader,用來通過G-Buffer中的資料來計算複雜的光照 第三組Shader,用來渲染光源,因為光源通常不參與光照計算,所以要單獨提取出來渲染。 結合原文對應的例子程式碼,看這張圖效果會更好!

相關推薦

OpenGL——理解延遲著色

本文件只是學習心得,系統學習請參考原文。 之前看Unity的文件的時候,經常看到正向渲染和延遲渲染這樣高大上的名詞,然後看了一下文件,依舊保持一臉懵逼的狀態。 直到我學習了這篇之後,才真正理解了延遲渲染的意義和存在價值。 Q1:正向渲染的缺陷是什麼? 大部分片段著色

網路程式設計懶人入門(一):快速理解網路通訊協議

1、寫在前面 論壇和群裡常會有技術同行打算自已開發IM或者訊息推送系統,很多時候連基本的網路程式設計理論(如網路協議等)都不瞭解,就貿然定方案、寫程式碼,顯得非常盲目且充滿技術風險。即時通訊網論壇裡精心整理了《[通俗易懂]深入理解TCP協議》、《不為人知的網路程式設計》、《

延遲任務排程系統—技術選型與設計

本文來自網易雲社群 延遲任務的場景是? 現有的解決方案是? 存在的問題是什麼? 希望達到的目標是? 可以實現的方案有? RabbitMQ實現 通過死信和死信路由實現 通過延遲訊息外掛來實現 Redis實現 Delay

【MyBatis源碼分析】insert方法、update方法、delete方法處理流程

times database connect 環境 enable clas 它的 java對象 ace 打開一個會話Session 前文分析了MyBatis將配置文件轉換為Java對象的流程,本文開始分析一下insert方法、update方法、delete方法處理的流程,至

編程經常使用設計模式具體解釋--工廠、單例、建造者、原型

-a 裝飾器模式 nds support art 類的繼承 兩個 開放 lose 參考來自:http://zz563143188.iteye.com/blog/1847029 一、設計模式的分類 整體來說設計模式分為三大類: 創建型模式。共五種:工廠方法模式、抽

2017最新PHP經典面試題目匯總

4.0 .net true 服務 一次 模板 混合 符號 組織 原文鏈接:http://www.cnblogs.com/zhyunfe/p/6209097.html 1、雙引號和單引號的區別 雙引號解釋變量,單引號不解釋變量 雙引號裏插入單引號,其中單引號裏如果有變量

Vue.js——組件快速入門

綁定 ram 字符串過濾 技術 dem ava 對象 src get Vue.js——60分鐘組件快速入門(上篇) 組件簡介 組件系統是Vue.js其中一個重要的概念,它提供了一種抽象,讓我們可以使用獨立可復用的小組件來構建大型應用,任意類型的應用界面都可以抽象為一個組件

iOS多線程開發之離不開的GCD

sop 先進先出 調度 事件 實現 說明 優先級 子線程 函數 一、GCD基本概念 GCD 全稱Grand Central Dispatch(大中樞隊列調度),是一套低層API,提供了?種新的方法來進?並發程序編寫。從基本功能上講,GCD有點像NSOperatio

支付網關 | 京東618、雙11用戶支付的核心承載系統

java 支付 雙11 支付網關 618 二零一七年六月二十一日,就是年中大促剛結束的那一天,我午飯時間獨在辦公室裏徘徊,遇見X君,前來問我道,“可曾為這次大促寫了一點什麽沒有?”我說“沒有”。他就正告我,“還是寫一點罷;小夥伴們很想了解支撐起這麽大的用戶支付流量所采用的技術。”「摘要

.net ef core 領域設計代碼轉換

解決 con mage keys $1 服務 結構 刪除 sql 一、前言 .net core 2.0正式版已經發布幾個月了,經過研究,決定把項目轉移過來,新手的話可以先看一些官方介紹 傳送門:https://docs.microsoft.com/zh-cn/do

CLR via C# 讀書筆記-27.計算限制的異步操作

top oid 輔助線 var 思考 read 運行 簡單例子 class 前言 學習這件事情是一個習慣,不能停。。。另外這篇已經看過兩個月過去,但覺得有些事情不總結跟沒做沒啥區別,遂記下此文 1.CLR線程池基礎 2.ThreadPool的簡單使用練習 3.執行上下文 4

【SqlServer系列】淺談SQL Server事務與鎖

架構 tab 要求 允許 ble 1.2 定義 由於 數據庫引擎 一 概述 在數據庫方面,對於非DBA的程序員來說,事務與鎖是一大難點,針對該難點,本篇文章試圖采用圖文的方式來與大家一起探討。 “淺談SQL Server 事務與鎖”這個專題共分

【ASP.NET Core】處理異常

關心 指向 然而 sub 相關 pri roo epon netcore 依照老周的良好作風,開始之前先說點題外話。 前面的博文中,老周介紹過自定義 MVC 視圖的搜索路徑,即向 ViewLocationFormats 列表添加相應的內容,其實,對 Razor Page

[ Python ] 基本數據類型及屬性

獲取 string ast 轉換 分割字符串 upper not found 不可 inf 1. 基本數據類型 (1) 數字 - int (2) 字符串 - str (3) 布爾值 - bool 2. int 類型中重要的方法

這一次,真正搞懂信用評分模型

工程師 集中 重要 sklearn app 目的 概率 單變量 是我 python風控評分卡建模和風控常識 https://study.163.com/course/introduction.htm?courseId=1005214003&utm_campaign

從誌願軍“斷刀”再論敏捷之道

慢慢 失敗 多個 之一 朝鮮 無法 一次 mark 學習 從誌願軍“斷刀”再論敏捷之道(上篇) 作者:歐德張(原創) ??在現在的IT項目中,以往常用的是瀑布模型套路,這些年敏捷模式大受歡迎,關於敏捷,現在諸人開口PMI-ACP,閉口則SCRUM,又有諸多實踐、案例遵行其

Win10深度學習環境配置:python3 + curl + pip + Jupyter notebook

好記性不如爛筆頭,純粹為自己的學習生活記錄點什麼! 本次記錄win10下安裝python3+curl+pip+jupyter,以及修改右鍵快捷開啟cmd 對於大多數的學習者,還是習慣選擇在ubuntu系統上學習深度學習,主要還是因為絕大多數演算法實現都是ubunt

資料結構------------線性表

線性表:由n(n>=0)個數據特性相同的元素構成的有限序列 線性表中的袁旭個數n(n>=0)定義為線性表的長度,n=0時為空表 非空的線性表或線性結構特點: 1)存在唯一的一個數被稱為“第一個”的資料元素; 2)存在唯一的一個數被稱為“最後一個”的資料元素; 3)除第

Java中的Object類

   要麼讀書,要麼旅行,身體和心靈總有一個要在路上。——羅馬假日   咱今天學習的是Java的Object類,首先先看程式碼,類裡面有哪些方法。 咱今天學習兩個方法,分別是hashCode,equals。  Obje

Android原生下載基本邏輯+斷點續傳

零、前言 1.今天帶來的是Android原生下載的上篇,主要核心是斷點續傳,多執行緒下載將會在下篇介紹 2.本例使用了Activity,Service,BroadcastReceiver三個元件 3.本例使用了兩個執行緒:LinkURLThread做一些初始工作,DownLoadThread進行核心下