Shader套用公式

原谅我,不是很懂这些公式的含义,所以用这个土方法,我想应该有不少人都是这样的,下面的步骤对应是在什么地方做这些动作

1. struct a2v{};(application to view)

2. struct v2f{}

3.v2f vert(a2v v){}

4.fixed4 frag(v2f f){}

一.转换坐标(必有)

1 .float4 vertex:POSITION;

2 .float4 svpos:SV_POSITION;

3 .//将坐标从模型空间转换到剪裁空间
f.svpos = UnityObjectToClipPos(v.vertex);

二.获得法线的直线(必有)

1.float3 normal:NORMAL;

2.float3 worldNormal:TEXCOORD0;

3.f.worldNormal = UnityObjectToWorldNormal(v.normal);

4.//获取法线的直线
   fixed3 normalDir = normalize(f.worldNormal);

三.获取平行光的直线

2.float4 worldVertex:TEXCOORD1;

3.//获得世界顶点(用来获取光源的直线)//(获取摄像机的直线也是这个?)
f.worldVertex = mul(v.vertex, unity_WorldToObject);

4.//获取平行光的直线
fixed3 lightDir = normalize(WorldSpaceLightDir(f.worldVertex));

四.获取相机的视野直线

//相机的视野直线
fixed3 viewDir = normalize(UnityWorldSpaceViewDir(f.worldVertex));

五.//平分线的直线
fixed3 halfDir = normalize(lightDir + viewDir);

六.//获取漫反射颜色
fixed3 diffuse = _LightColor0 * _Diffuse.rgb * max(dot(normalDir, lightDir)*0.5+0.5, 0);

七.//获取高光反射的颜色值
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(dot(normalDir,halfDir), 0), _Gloss);

八获取环境光的颜色

UNITY_LIGHTMODEL_AMBIENT.rgb

九.设置纹理

Pro_MainTex("Textur",2D) = "white"{}

sampler2D _MainTex;
float4 _MainTex_ST;

1.float4 texcoord:TEXCOORD0;

2.float2 uv:TEXCOORD2;

3.//取得纹理顶点
f.uv = v.texcoord.xy * _MainTex_ST.xy+_MainTex_ST.zw;

4.//获取漫反射颜色(此处将漫反射的颜色抹去,换成了纹理的颜色)
fixed3 texColor = tex2D(_MainTex,f.uv.xy);
fixed3 diffuse = _LightColor0 * texColor * max(dot(normalDir, lightDir)*0.5+0.5, 0);

10.对物体表面的凹凸性进行处理(只需要改变切线空间的法线)

Pro: _BumpScale("Bump Scale",Float)=1//保持默认的样子

Float _BumpScale;

tangentNormal.xy = tabgentNormal.xy * _BumpScale ; (在单位化之前处理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值