紋理最初的目的就是使用一張**來控制模型的外觀。
使用紋理對映可以將附著再模型表面。一般用乙個二位座標(u,v)來表示紋理對映座標,也稱uv座標。
我們通常使用一張紋理來代替物體漫反射顏色。
//upgrade note: replaced '_object2world' with 'unity_objecttoworld'
shader
"custom/chapter7-singletexture
" _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;
fixed4 _specular;
float
_gloss;
float4 _maintex_st;
//紋理型別屬性
struct
a2v;
struct
v2f;
v2f vert(a2v v)
fixed4 frag(v2f i):sv_target
endcg}}
fallback
"diffuse
"}
在屬性裡宣告了_maintex的紋理屬性,_color來做 整體物體的色調控制
float4 _maintex_st;//紋理型別屬性
unity中,使用紋理名_st的方式來宣告某個紋理的屬性,對頂點紋理座標進行偏移和縮放。unity也提供了乙個內建巨集transform_tex來幫我們計算。
o.uv = v.texcoord.xy*_maintex_st.xy+_maintex_st.zw;
計算過法線和光照方向後,進行紋理取樣。實質是利用tex2d函式取樣。第乙個引數是要被取樣的紋理,第二個引數是紋理座標。
最後將取樣結果和顏色屬性_color的乘積來作為材質的反射率。
fixed3 albedo = tex2d(_maintex,i.uv).rgb*_color.rgb; //材質的反射係數的取樣
fixed3 ambient = unity_lightmodel_ambient.xyz*albedo;
fixed3 diffuse = _lightcolor0.rgb*albedo*max(0,dot(worldnormal,worldlightdir));
最後疊加漫反射,環境光和高光返回即可。
UnityShader初級篇 遮罩紋理
shader unity shaders book chapter 7 mask texture bumpmap normal map 2d bump bumpscale bump scale float 1.0 高光反射遮罩紋理 specularmask specular mask 2d whit...
Unity Shader 入門精要之基礎紋理
最近在看unity shader入門精要這本書,打算進攻下圖形學這一塊了,加油吧 1.紋理對映座標也被叫做uv座標,通常範圍都被歸一化到 0,1 需要注意的是opengl和directx在二維空間座標系是有差異的,但unity已經幫咱們處理好這個問題了,是用符合opengl的傳統,也就是原點位於左下...
UnityShader學習 立方體紋理及其應用
1.天空盒子 是什麼?天空盒子 skybox 是遊戲中用於模擬背景的一種方法。當我們在場景中使用了天空盒子時,整個場景就被包圍在乙個立方體內。在unity中,天空盒子是在所有不透明物體之後渲染的,而其背後使用的網格是乙個立方體或乙個細分後的球體。怎麼用?製作材質 window lighting選單中...