UnityShader 單張紋理

2022-09-10 02:24:10 字數 1425 閱讀 4222

紋理最初的目的就是使用一張**來控制模型的外觀。

使用紋理對映可以將附著再模型表面。一般用乙個二位座標(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選單中...