unity shader 毛絨材質效果的實現

2021-08-19 08:24:07 字數 2090 閱讀 7199

今天主要說的主題是如下圖所示的幾種毛絨材質的效果實現。

仔細看你就會發現3張圖中的實現效果各不相同。一是和用的噪波圖不同有關係,第二個就是實現方式有些不一樣,裡面實際上用了兩種實現方式。

先說第一種簡單的實現方式,主體思路是先用曲面細分,然後再將頂點按照法線方向和噪波圖凸起。(這裡說下曲面細分是不可以在手機平台使用的)。因為這種方法實現起來特別簡單,我就直接用sf的連圖做解釋,不把敲的原始碼丟上來了。

這裡需要注意的有3個地方。

第乙個  就是必須要啟用曲面細分,不然頂點數肯定是不夠的。我在自己專案裡是呼叫unity自帶的曲面細分,並不知道sf怎麼寫的,所以不進行細講曲面細分怎麼寫。

第二  就是我把噪波圖作為ao圖計算到了漫反射裡面增加世界上的凹凸效果。

第三  就是vertex+=normaldir*噪波圖.r*_power這個凸起計算了。可以看連圖中vertexoff那個口的連線。

這種方法的優點是沒有用混合模式,各種計算不容易出錯,大家肯定都知道透明是乙個大坑,能少碰少碰。

然後實際效果就是這樣的,和我上面的展示圖肯定有差距,大家自己進行優化,我也是敲了很久的。

******************************===分割一下******************************===

說完第一種低消耗效果還過的去的方法下面我們來說說第二種效果比較好但是處理起來消耗居高還很麻煩的方法。不過為了效果啥都可以忍。看下圖,我想大部分人就可以知道大部分實現方法了。

這個效果是在一中的效果發現進一步過來的。你們應該都看出來了,這時候開啟了混合計算。

首先這裡繼承上面一中的123點,不再重寫了。

不過這裡需要關閉深度,開啟混合

zwrite on

cull off

blend srcalpha oneminussrcalpha // alpha blending

然後要說的是這裡採用的方法是用了50個pass逐層外擴,然後逐層縮小範圍。這裡上段其中乙個pass的原始碼。

pass

blend [_srcblend] [_dstblend]

cgprogram

#pragma target 5.0

#pragma exclude_renderers gles

#pragma shader_feature _ _alphatest_on _alphablend_on _alphapremultiply_on

#pragma shader_feature _emission

#pragma shader_feature _metallicglossmap

#pragma shader_feature ___ _detail_mulx2

#pragma shader_feature _parallaxmap

#pragma vertex vert

#pragma fragment frag

#pragma multi_compile_fwdbase

#define marzafurbasepass

#define fur_offset 0.010000//就是這裡控制變化,有50個這樣的pass,當然還有50個這樣的forwardadd的pass

#include "mffz.cginc"

endcg

}

UnityShader例項11 積雪材質

積雪材質是我自己給這個材質取的名字,既然是積雪,那顧名思義,雪是從天而降的,因此積雪都是在物體朝上的表面 不管你的模型怎麼擺放 雪都保證是積在物體朝上 在unity裡就是y軸正方向 的表面,如下圖所示 要保證向上的面有積雪,其實就是模型表面的法線方向與世界座標空間的y軸正方向保持一致積雪多,否則積雪...

Unity Shader實現玻璃材質效果

主要是通過反射和折射來達到透明的效果,用菲涅爾來混疊。shader部分 shader unlit crystal 折射角度 etaratio etaratio range 0,1 0 菲涅爾係數 fresnelbias fresnelbias float 0.5 fresnelscale fresn...

UnityShader例項03 邊緣光材質

邊緣光材質 邊緣光材質原理和xray材質相類似,shader 也就長得幾乎一樣了 shader 實現 vf版本 01 shader penglu rimlight vf rimcolor rimcolor color 0,1,1,1 rimpower rim power range 0.1,8.0 ...