最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【TA進階】三平面映射:紋理拉伸的解決之道


版權聲明

  • 本文為“優(yōu)夢創(chuàng)客”原創(chuàng)文章,您可以自由轉(zhuǎn)載,但必須加入完整的版權聲明

  • 文章內(nèi)容,不得刪減、修改、演繹

  • 相關學習資源見文末

各位同學大家好!我是雷蒙德,有十四年游戲開發(fā)經(jīng)驗,參與過多款上線項目的游戲引擎開發(fā)和架構(gòu)設計。

今天要給大家分享的是 “三平面映射”技術。

那么什么是”三平面映射”技術呢?

大家看到的畫面上右上角的這個地形渲染效果,也許你認為它是簡單的在地形的網(wǎng)格模型上貼上一張地表紋理貼圖實現(xiàn)的,但實際并不是這樣!

大家知道,在一款室外場的游戲當中,地形是一個必不可少的元素,但是要渲染出正確的地形效果并不容易,因為它會涉及到高低起伏、遠近層次、懸崖峭壁等因素,同時還要考慮到大地形的渲染性能開銷。

這通常很難用簡單的紋理貼圖去表現(xiàn)。

這時我們就需要使用“程序化的方式”去渲染游戲當中的地形效果,也就是要寫Shader來處理地形!

就比如大家畫面上右上角的這個最基本的地形,它也是通過從地形上方投影到地形表面上渲染出來的,我們可以稱之為“單平面映射”。

這對于起伏的山丘,這看起來很好,但是在陡峭的懸崖上,單一的投影方向看起來很糟糕,我們稱之為“紋理拉伸”。

因此,我們需要用今天我要給大家分享的“三平面映射技術”,來實現(xiàn)屏幕右下角的地形渲染效果!

當然,三平面渲染用途很廣泛,下面我們來看一看今天的議題:

首先,我會帶著大家綜合性的了解三平面映射的應用場景

接著,我們從一個最簡單的球體渲染出發(fā)學習“三平面映射”的原理

最后,我會帶著大家從技術的角度,學習三平面映射在Unity當中的技術實現(xiàn)、坑點以及進階點

為什么要采用三平面映射

單平面映射

地形是一個受歡迎的用例,因為它通常具有難以紋理化的幾何圖形。

基本地形通常從上方有一個單獨的UV投影。我們可以稱之為“單平面”投影的UV。

對于起伏的山丘,這看起來很好,但是在陡峭的懸崖上,單一的投影方向看起來很糟糕。

在上述地形上,從單個UV投影延伸到近垂直懸崖上的紋理非常明顯。

紋理拉伸

以地形為例,地形的UV坐標在網(wǎng)格中展開時,在X-Y平面上是均勻分布的,但我們的地面是高低起伏的,因此UV坐標和地面起伏不匹配,就產(chǎn)生了“紋理拉伸

手工展UV

我們可以讓負責建模的美術同學將UV坐標“小心的”展開到跟地形高低起伏匹配

但是,這將浪費大量的美術人力,并且不適用于以下情形:

  1. 頂點是流動的

  2. 貼圖的UV坐標是流動的

  3. 地形是程序化生成的

此時,手工調(diào)整不能適應實時渲染要求,就需要我們通過實時渲染去解決問題!

解決之道

具體的做法是采用“三平面映射”——從三個方向去采樣同一張貼圖

它得到的效果是這樣的:

三平面映射的應用

當然,三平面映射不僅可以用于普通網(wǎng)格地形,還適用于以下情形:

1、瀑布:

對于瀑布,如果采用單平面映射,那么瀑布將只在黃色“或者”紅色箭頭方向獲得正確的紋理映射,而無法在兩個方向同時獲得正確的紋理映射

并且,由于瀑布的頂點是隨著水流流動而變化的,所以也只能采用三平面映射來采樣瀑布的噪點和法線圖

2、程序化建模的地形

如圖所示,程序化建模的地形,由于地形的起伏是動態(tài)的,因此無法人工調(diào)整UV坐標,也需要三平面映射

3、水池的焦散效果

水池焦散如果只對池底部分單平面采樣,遇到的問題跟前面瀑布是一樣的!

技術要領

??友情提醒:文字版本可能無法表達全部思考過程,如有不明白之處,請移步文末觀看視頻版本

要實現(xiàn)“基本的三平面映射”,需要5個步驟:

  • Step 1:根據(jù)頂點的世界空間坐標計算對應的UV坐標

  • Step 2:從x/y/z三個方向?qū)β瓷滟N圖進行采樣

  • Step 3:調(diào)整三平面邊界過渡的銳利度

  • Step 4:將混合權重值單位化

  • Step 5:按三個面的混合權重,將采樣顏色混合在一起

Step 1:根據(jù)頂點的世界空間坐標計算對應的UV坐標

對于每個片元,先取其在三個方向的uv坐標

為了增加更多控制,我們要考慮紋理的縮放系數(shù)_TextureScale

Step 2:從x/y/z三個方向?qū)β瓷滟N圖進行采樣

Step 3:調(diào)整三平面邊界過渡的銳利度

用法線方向作為從三個方向采樣的權重值

法線可以為負,但權重值不能為負,因此需要先通過abs取絕對值

由于法線是連續(xù)過渡的,因此權重值在三個平面的邊界上也是平滑過渡的,這樣可以帶來一個額外的好處:它解決了紋理接縫問題

Step 4:將混合權重值單位化

第三步使用pow來銳化三平面邊界后,可能使計算后的法線值偏小,因此需要重新單位化

Step 5:根據(jù)混合系數(shù),把三個面的采樣顏色混合在一起

通過顏色混合,得到最終效果

以上效果也可以使用UE或ASE完成

三平面映射進階

進階1:三平面映射的物體如何表現(xiàn)細節(jié)?

大家看現(xiàn)在畫面里的這個物體,它是采用了三平面映射技術渲染的一個包含了豐富物體表面細節(jié)的球體

這主要體現(xiàn)在兩方面:

  1. 通過漫反射貼圖,體現(xiàn)了物體的顏色細節(jié)

  2. 通過法線貼圖,體現(xiàn)了物體的凹凸信息

我們?yōu)槁瓷滟N圖應用了三平面映射,以解決紋理拉伸的問題,那么問題來了:

  • 既然漫反射貼圖需要用三平面映射來消除紋理拉伸,那么法線貼圖是不是也要來這么一波?

答案是肯定的!

那么我們應該如何為法線貼圖應用三平面映射呢?受到慣性思維的影響大家可能會想到這個方法1:

方法1是:跟漫反射貼圖一樣進行“三平面映射”

但是這樣得到的效果是錯誤的(如左圖所示):

  • 大家注意我的法線貼圖,它要表現(xiàn)的物體表面細節(jié)是每個小圓點都是凸起的,結(jié)果渲染出來,有一部分小圓點是凹陷進去的

所以,我們不能簡單的“慣性思維”

大家再看下面:

這里的右圖才是正確渲染的球體,它的每一個小圓點都是凸起的!具體的實現(xiàn)過程,我會在我們的

里教給大家

所以,你還認為剛看到的效果是正確的嗎?

進階2:性能進階

參考

  • 更多學習資源請加 qq:1517069595 或 vx:alice17173 獲取

  • 點贊、關注、分享可免費獲得配套學習資源

  • 完整視頻請點擊下方鏈接觀看

【TA進階】三平面映射:紋理拉伸的解決之道


【TA進階】三平面映射:紋理拉伸的解決之道的評論 (共 條)

分享到微博請遵守國家法律
衡水市| 沾化县| 湟中县| 青阳县| 临海市| 云阳县| 内丘县| 郧西县| 资阳市| 屯门区| 克东县| 扶风县| 珠海市| 边坝县| 山阴县| 绍兴市| 咸宁市| 永兴县| 云龙县| 师宗县| 疏附县| 南汇区| 乐清市| 宁安市| 凤山市| 准格尔旗| 鲜城| 康平县| 永登县| 永定县| 台湾省| 冀州市| 乌审旗| 会同县| 曲麻莱县| 平邑县| 洛川县| 平安县| 宁强县| 长武县| 保德县|