91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

unity3d中圖片渲染流程是什么

發布時間:2022-01-19 09:38:09 來源:億速云 閱讀:394 作者:小新 欄目:大數據

這篇文章給大家分享的是有關unity3d中圖片渲染流程是什么的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

相關名詞

GPU(Graphic Processor Unit)

圖形處理單元

GLSL(OpenGL Shading Language)著色語言

是用來在OpenGL中著色編程的語言,也即開發人員寫的短小的自定義程序,他們是在顯卡的 GPU 上執行的,代替了固定的渲染管線的一部分,使渲染管線中不同層次具有可編程性。比如:視圖轉換、投影轉換等。GLSL 的著色器代碼分成2個部分:Vertex Shader(頂點著色器)和Fragment(片斷著色器)

頂點著色器(VertexShader)

一般用來處理圖形每個頂點變換(旋轉/平移/投影等)

頂點著色器是OpenGL中用于 計算頂點屬性 的 程序 。頂點著色器是逐頂點運算的程序,也就是說 每個頂點數據都會執行一次頂點著色器,當然這是 并行 的,并且頂點著色器運算過程中無法訪問其他頂點的數據。

一般來說典型的需要計算的頂點屬性主要包括頂點坐標變換、逐頂點光照運算等等。頂點坐標由自身坐標系轉換到歸一化坐標系的運算,就是在這里發生的。

片元著色器程序(FragmentShader)

一般用來處理圖形中每個像素點顏色計算和填充

片段著色器是OpenGL中用于計算片段(像素)顏色的程序。片段著色器是逐像素運算的程序,也就是說 每個像素都會執行一次片段著色器 ,也是 并行 的。

頂點 & 頂點數據

頂點指的是我們在繪制一個圖形時它的頂點位置數據。這個數據可以直接存儲在數組中或者將其緩存到GPU內存中。

畫圖一般是先畫好圖像的骨架,然后再往骨架里面填充顏色。頂點數據就是圖像的骨架,OpenGL中的圖像都是由圖元組成。在OpenGLES中,有3種類型的圖元:點、線、三角形。

頂點數組(VertexArray) & 頂點緩沖區(VertexBuffer)

開發者可以選擇設定函數指針,在調用繪制方法的時候,直接由內存傳入頂點數據,也就是說這部分數據之前是存儲在 內存 當中的,被稱為 頂點數組 。而性能更高的做法是,提前分配一塊 顯存 ,將頂點數據預先傳入到顯存當中。這部分的顯存,就被稱為 頂點緩沖區 。

光柵化(Rasterization)

是把 頂點數據轉換為片元的過程 ,將圖轉化為一個個柵格組成的圖象。把物體的數學描述以及與物體相關的顏色信息轉換為屏幕上用于對應位置的像素及用于填充像素的顏色。

光柵化包含了兩部分的工作。第一:決定窗口坐標中的哪些整型柵格區域被基本圖元占用;第二:分配一個顏色值和一個深度值到各個區域。

紋理

可以理解為圖片。

圖片加載的工作流程

UIImage *image = [UIImage imageWithContentsOfFile:@"filePath"];

從磁盤中加載一張圖片,這個時候的圖片并沒有解壓縮;

imageView.image = image;

然后將生成的 UIImage 賦值給 UIImageView ,這一步確認顯示圖片,CPU 才開始解碼;

接著一個隱式的 CATransaction 捕獲到了 UIImageView 圖層樹的變化;

在主線程的下一個 runloop 到來時,Core Animation 提交了這個隱式的 transaction ,這個過程可能會對圖片進行 copy 操作。

受圖片是否字節對齊等因素的影響,這個 copy 操作可能會涉及以下部分或全部步驟:

  1. 分配內存緩沖區用于管理文件 IO 和解壓縮操作。

  2. 將文件數據從磁盤讀到內存中。

  3. 將壓縮的圖片數據解碼成未壓縮的 位圖 形式。

  4. 最后 Core Animation 中 CALayer 使用未壓縮的位圖數據渲染 UIImageView 的圖層。

  5. CPU 計算好圖片的Frame,圖片解壓 后就會交給 GPU 來做圖片渲染。

解壓縮

  1. 解壓默認是在 主線程 中執行的。

  2. 圖片的解壓縮是一個非常耗時的 CPU 操作,所以只有在 確認要顯示時,CPU 才會對其進行解壓縮。

  3. 解壓過的圖片會緩存起來,不會重復解壓。

  4. 在子線程提前對圖片進行強制解壓縮,而強制解壓縮的原理就是對圖片進行重新繪制,得到一張新的解壓縮后的位圖。其中,用到的最核心的函數是 CGBitmapContextCreate

CPU / GPU渲染過程中具體分工

CPU: 計算視圖 frame,圖片解碼,需要繪制紋理圖片通過數據總線交給 GPU

GPU: 紋理混合,頂點變換與計算,像素點的填充計算,渲染到幀緩沖區。

時鐘信號: 垂直同步信號V-Sync / 水平同步信號H-Sync。

iOS設備雙緩沖機制: 顯示系統通常會引入兩個幀緩沖區,是 CPU 與 GPU 協作完成的

渲染流程

  1. GPU 獲取獲取圖片的坐標

  2. 將坐標交給 頂點著色器 (頂點計算)

  3. 將圖片 光柵化 (獲取圖片對應屏幕上的像素點)

  4. 片元著色器 計算 (計算每個像素點的最終顯示的顏色值)

  5. 從幀緩存區中渲染到屏幕上

感謝各位的閱讀!關于“unity3d中圖片渲染流程是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗山县| 德安县| 宁阳县| 金坛市| 连州市| 新兴县| 磐安县| 原平市| 禄劝| 红原县| 隆子县| 广昌县| 迁安市| 揭西县| 庆云县| 恭城| 呈贡县| 福鼎市| 汉源县| 莆田市| 佛学| 泗洪县| 米林县| 丰镇市| 汤阴县| 丽江市| 额尔古纳市| 信阳市| 衡阳县| 靖远县| 鹿泉市| 乌恰县| 同德县| 通山县| 乳山市| 旺苍县| 泰安市| 大田县| 邢台县| 清镇市| 奉节县|