Shader 九 凹凸對映

2021-10-03 19:08:06 字數 1864 閱讀 2641

凹凸對映 的兩種方法

1. 在切線空間下計算

// 在切線空間下計算 凹凸對映

shader "unlit/nomalmapintangentspace"

// bump 內建法線紋理,當沒有提供任何法線紋理時,

//"bump"就對應了模型自帶的法線資訊

_bumpmap ("texture",2d) = "bump"{}

//_bumpscale則是用於控制凹凸程度的,當它為0時,

//意味著該法線紋理不會對光照產生任何影響。

_bumpscale("bump scale",float) = 1.0

_specular("specular",color) = (1,1,1,1)

_gloss("gloss",range(8.0,256)) = 20

} subshader

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "lighting.cginc"

fixed4 _color;

sampler2d _maintex;

float4 _maintex_st;

sampler2d _bumpmap;

float4 _bumpmap_st;

float _bumpscale;

fixed4 _specular;

float _gloss;

struct a2v;

struct v2f;

v2f vert(a2v v)

fixed4 frag(v2f i):sv_target

endcg

} }fallback "specular"

}

shader "unlit/nomalmapintangentspace"

// bump 內建法線紋理,當沒有提供任何法線紋理時,

//"bump"就對應了模型自帶的法線資訊

_bumpmap ("texture",2d) = "bump"{}

//_bumpscale則是用於控制凹凸程度的,當它為0時,

//意味著該法線紋理不會對光照產生任何影響。

_bumpscale("bump scale",float) = 1.0

_specular("specular",color) = (1,1,1,1)

_gloss("gloss",range(8.0,256)) = 20

} subshader

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "lighting.cginc"

fixed4 _color;

sampler2d _maintex;

float4 _maintex_st;

sampler2d _bumpmap;

float4 _bumpmap_st;

float _bumpscale;

fixed4 _specular;

float _gloss;

struct a2v;

struct v2f;

v2f vert(a2v v)

fixed4 frag(v2f i):sv_target

endcg

} }fallback "specular"

}

shader 凹凸紋理

使法線紋理上儲存的資訊,將相關變數轉到切線空間進行統一計算。漫反射由法線方向和光源方向求得,高光由半方向和法線方向求得,半方向由光源方向和法線求得,環境光可以由系統內建變數拿到,shader custom normaltangentspacemat 主貼圖 bumpmap normal map 2d...

Unity Shader 中實現凹凸對映

每乙個頂點都有自己的切線空間。在該空間中,z軸是頂點的法線方向,x軸是頂點的切點方向,而y方向則是兩者叉積的方向。我們需要在頂點著色器中把視角方向和光照方向從模型空間變換到切線空間中,即我們需要從模型空間到切線空間的變換矩陣。而很好求的是,這個變換矩陣的逆矩陣正是在頂點著色器中切線 x軸 副切線 y...

凹凸對映(Bump Map)實現原理

凹凸對映和紋理對映非常相似 然而,紋理對映是把顏色加到多邊形上,而凹凸對映是把粗糙資訊加到多邊形上 這在多邊形的視覺上會產生很吸引人的效果。我們只需要新增一點資訊到本來需要使用大量多邊形的物體上。需要注意的是這個物體是平的,但是它看起來卻是粗糙不平的。讓我們來看看上邊的那個立方體。如果你很近地觀察它...