Low Polygon風格的渲染

2021-08-09 10:54:08 字數 2430 閱讀 2501

low polygon風格的渲染也被稱為flat shading。雖然把這篇文章歸到shader類別裡,但其實是完全可以用非shader的方法來解決的。下面兩張,左邊是我們不希望得到的結果,而右邊是我們想要得到的效果。

做美術的同學都知道上面模型的區別就是「硬邊」和「軟邊」的問題。左圖里就是軟邊的效果,軟邊意味著相鄰三角形之間共用頂點,這些被共用頂點的法線(藍線)通常是根據毗連三角形的面法線加權平均計算得到的,如下圖所示(**):

由於共用頂點的存在,光柵化階段的插值使得這些三角麵片中間每個點的點法線都是有三個頂點的法線插值得到的,而這三個法線各不相同, 使得麵片有平滑過渡的效果,從而形成軟邊。在其他風格的渲染中,模型大多都會使用軟邊,這不僅可以減少頂點數目提高效能,還能讓渲染效果更加平滑。

但flat shading顯然不想要平滑的渲染效果,我們希望就算光柵化插值後同乙個三角麵片中每個點的法線都應該是相同的(都等於面法線),只有這樣它們光照計算的結果才會是相同的。如下圖所示(**):

要實現這樣的效果就是把所有相連的邊在建模軟體中設定成硬邊,hard edge。這樣軟體背後就會進行拆頂點的工作,每個三角形有各自屬於自己的三個頂點,不與他人共用,這三個頂點的點法線計算不會受毗連三角形的影響,而僅僅是由該三角麵片的面法線決定。

因此,我們有了解決方案一:在建模軟體中把邊設定成硬邊。

值得高興的是,就算你在建模軟體裡忘記了設定硬邊,unity也是可以直接幫我們做到軟硬邊的轉換的。它的原理其實就是重新拆點、重新計算點法線。

在我們匯入乙個模型後,可以在模型的匯入面板中的normals & tangents塊中,把normals設定成calculate模式、把smoothing angle設定成0就可以得到硬邊的效果。如上圖所示。

這樣的模型可以直接使用任何普通的shader進行渲染,就會得到flat shading的效果。

之前群裡有人問程式產生的網格怎麼實現這種效果。原理也是一樣的,我們只需要保證不要共用頂點、正確計算頂點法線即可。在我的npr專案裡,有這樣乙個例子,把任何模型強制轉化成沒有共用頂點的模型。其中關鍵**是長這個樣子的:

vector3 oldverts = mesh.vertices

;vector4 oldtangents = mesh.tangents

;vector2 olduvs = mesh.uv

;int ********s = mesh.********s

;vector3 newverts = new vector3[********s.length];

vector4 newtangents = new vector4[********s.length];

vector2 newuvs = new vector2[********s.length];

for (int i = 0

; i < ********s.length; i++)

mesh.vertices = newverts;

mesh.tangents = newtangents;

mesh.********s = ********s;

mesh.uv = newuvs;

mesh.recalculatebounds();

mesh.recalculatenormals();

因此,如果你是通過程式方法產生網格的,可以使用類似上面的**來進行網格轉換,再使用普通的shader即可。

上面轉化硬邊的方法會增加頂點數目,有一種完全不需要對網格進行任何處理的方法就是使用geometry shader。這種方法的原理就是在光柵化前、在geometry shader裡給每個頂點增加乙個屬性,面法線facenormal。由於geometry shader中可以知道同乙個三角麵片中的所有三個頂點的資訊,因此我們可以為它們計算乙個相同的面法線值。這樣,即便在經過光柵化插值後,同乙個三角麵片中的面法線也是一樣的。關鍵**如下:

[maxvertexcount(3)]

void geom(******** v2g in[3], inout ********streamtristream)

這種方法有點小題大做,因為geometry shader是sm 4.0中的特性,移動終端大多達不到這樣的要求。

UE4 風格化渲染

本篇思路是基於後處理實現的。獲取光照結果 由於diffusecolor 光照計算 最終顏色 又得益於ue4是延遲渲染,mrt可以儲存許多緩衝資訊,故在後處理獲取diffusecolor很簡單。因此可以反推初光照計算結果。最終顏色 diffusecolor。增加菲尼爾 在後處理獲取法線圖,即可進行菲尼...

建模教程 在ZBrush中渲染漫畫風格的插畫

建立 漫畫插畫 的外觀和感覺想必一定很有趣吧,但是,獲得想要的精確外觀有時也會令人相當沮喪,因此了解一些基本原則,建立類似於zbrush漫畫matcaps的作品很有必要。使用2d外觀渲染3d物件已經不是什麼新鮮事了,今天我們一起來學習如何在zbrush中渲染漫畫角色 hellboy 地獄男爵 的原創...

建築的風格

巴洛克一詞的原意是 扭曲的珍珠 古典主義者用它來稱呼這種被認為是離經叛道的建築風格。這種風格在反對僵化的古典形式,追求自由奔放的格調和表達世俗情趣等方面起了重要作用,對城市廣場 園林藝術以至文學藝術部門都發生影響,一度在歐洲廣泛流行。哥德式建築 英語 gothic architecture 或譯作歌...