法線紋理實踐(一)

2021-09-22 17:59:30 字數 1345 閱讀 6890

以下內容來自《unity shader入門精要》

切線空間下計算光照:

光照方向,視角方向全部轉換到切線空間下計算。

世界空間下 計算光照:

將從法線紋理上得到的法線方向轉換到世界空間下,之後再和世界空間下的光照方向,視角方向進行計算。

方法一:

tangent_space_rotation是乙個巨集,參考:

// upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'

// upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'

// upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'

shader "unity sader book/chapter7/chapter7-normalmaptangentspace"

_bumpmap( "normal map", 2d ) = "bump" //法線紋理

_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

// make fog work

#pragma multi_compile_fog

#include "unitycg.cginc"

#include "lighting.cginc"

float4 _color;

sampler2d _maintex;

float4 _maintex_st;

sampler2d _bumpmap;

float4 _bumpmap_st;

float _bumpscale;

float4 _specular;

float _gloss;

struct a2v

;struct v2f

;v2f vert (a2v v)

fixed4 frag (v2f i) : sv_target

endcg

} }fallback "specular"

}

7 2基礎紋理 法線紋理

基礎紋理 凹凸對映 使用一張紋理來修改模型表面的法線 世界空間中的計算 shader unity shader book chapter 7 normalmapworldspace bumpmap normal map 2d bump bump內建的法線紋理,當沒有提供任何法線紋理時,對應模型自帶的...

對法線紋理和置換紋理的一點改進

displacement 設想深度圖在三角形所在切線空間內。對於點法線不垂直於三角形所在面的情況,比如三角形三個頂點的法線不同,或是視線穿過了當前三角形,而下乙個三角形的法線方向與這乙個三角形的法線方向不同的情況,這個設想就是不成立的。displacement的視線可能穿過texture,即u v超...

S04 切線空間與法線紋理

在學習法線貼圖紋理的時候無法避免的遇到了切線空間的學習和理解的問題,在此記錄下自己理解的過程。法線紋理的目的和存在的意義 是在底模上表現出高模的各種凹凸細節,而為什麼要表現凹凸細節呢,很簡單,就是為了光照計算,模擬出高模的凹凸細節,光照的時候可以更加接近現實的質感。如果直接在專案中使用高模的話就不存...