本文要實現的內容是乙個很常見的描邊效果。
(本文的模型來自: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...