亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

山东| 灌南县| 青龙| 贵州省| 小金县| 岳阳县| 福建省| 民丰县| 修文县| 台安县| 江达县| 太仓市| 防城港市| 凌海市| 滨州市| 礼泉县| 西藏| SHOW| 芮城县| 盱眙县| 塔河县| 庆安县| 奈曼旗| 吴桥县| 屯门区| 福海县| 岚皋县| 清远市| 沅江市| 铜陵市| 温泉县| 武夷山市| 镇赉县| 交口县| 筠连县| 上杭县| 民勤县| 洪湖市| 康马县| 黑山县| 建始县|