小隨筆 寫乙個基於幾何生成方法的描邊效果

2021-08-08 06:51:59 字數 1482 閱讀 6265

本文要實現的內容是乙個很常見的描邊效果。

(本文的模型來自:rts mini legion lich)

實現的思路來自《real time rendering》的相關章節,即基於幾何生成方法的描邊。相關的理論內容已經有不少文章都提到過,這裡簡單概況一下就是在繪製模型時用兩個pass,第一遍正常繪製模型;第二遍繪製則要將模型正面剔除——正面剔除的原因在下面的演示中我會告訴各位原因——接著在vs中修改頂點位置,將頂點沿著法線方向膨脹一定距離,然後在fs中將模型用純色輸出即可。

(來自:【翻譯】西川善司「實驗做出的遊戲圖形」「guilty gear xrd -sign-」中實現的「純**動畫的實時3d圖形」的秘密,前篇(2))

好了,現在就讓我們來實現這個效果吧。

首先我們顯然總共需要兩個pass,但是我們先實現乙個pass,將模型正常的繪製出來。

// 第乙個pass用來渲染正常的模型

pass

;struct v2f

;sampler2d _maintex;

float4 _maintex_st;

fixed4 frag (v2f i) : sv_target

endcg

經過這次繪製,螢幕上出現了正常的模型。

除此之外,在vs中我們不能直接使用在model空間的法線資訊,因此還要將頂點的法線資訊從model空間轉換到clip空間。

float3 normal = mul((float3x3) unity_matrix_mvp, v.normal);
然後將頂點沿著法線方向膨脹一定距離:

pos.xy += _outlinefactor * normal.xy;
嗯。現在的效果有點贊了。

最後再來看看為什麼要開啟正面剔除,如果沒有正面剔除我們將看到的是乙個顏色錯誤的模型。

就像下面這樣:

-eof-

最後打個廣告,歡迎支援我的書《unity 3d指令碼程式設計》

小隨筆 寫乙個基於幾何生成方法的描邊效果

本文要實現的內容是乙個很常見的描邊效果。本文的模型來自 rts mini legion lich 實現的思路來自 real time rendering 的相關章節,即基於幾何生成方法的描邊。相關的理論內容已經有不少文章都提到過,這裡簡單概況一下就是在繪製模型時用兩個pass,第一遍正常繪製模型 第...

最近寫的乙個小軟體

工具實現的功能很簡單,實現 查詢指定資料夾 及其下屬資料夾 的檔案中包含指定字串,或替換成其他字串的功能.介面如下 其實寫這個軟體的目的是因為 1.我正在看的乙個電子書 非 哈哈 中間都有大量網頁資訊廣告資訊的插入,非常不爽 2.日常操作經常想在一堆檔案中找到以前的某個語法的例子,卻苦於無現成工具....

python寫乙個完整的小程式 自己寫的乙個小程式

該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 自己寫了乙個python 簿,import sys import android import types import time import re droid android.android address def show result dialo...