Unity3d shader 学习笔记

这里记录一些shader入门的一些基础公式。

光照模型:
  • 漫反射光照模型核心公式:

    lambert=max(0,N⃗ L⃗ ) (N:normal,L:lightDir)
    漫反射光照 = 法线向量和光照向量的点积(要控制在0~1的范围内)。

  • 半兰伯特漫反射光照模型核心公式(half lambert)

    lambert=(N⃗ L⃗ )×0.5+0.5

    半兰伯特漫反射光照模型其实跟上面漫反射光照模型公式基本上一样,half lambert光照模型会让暗面变得更加亮一点,不会出现特别暗的这种效果。

  • Phong高光反射光照模型

    specular=max(0,V⃗ R⃗ )m(V⃗ :;R⃗ :;m:)

  • Blinn-Phong高光反射光照模型,此模型不需要反射光向量,用 (视角方向向量 + 光照向量)代替

    specular=max(0,N⃗ H⃗ )m(N⃗ :线;H⃗ :V⃗ +L⃗ ;m:)



一些公式:
  • 顶点坐标系转换到裁剪坐标系
mul(UNITY_MATRIX_MVP,vertex)
  • 环境光
UNITY_LIGHTMODEL_AMBIENT
  • 法线坐标转换到世界坐标系
normal = mul(fixed4(v.normal,0),unity_WorldToObject).xyz;
//这里和上面一句是一样的效果,只是unity内置了此函数给我们用
normal = UnityObjectToWorldNormal(v.normal);
  • 归一化光照向量
lightDir = normalize(_WorldSpaceLightPos0.xyz);
//这里和上面一句是一样的效果,只是unity内置了此函数给我们用
lightDir = normalize(UnityWorldSpaceLightDir(worldPos));
  • 视角方向
viewDir = normalize(_WorldSpaceCameraPos.xyz - worldPos.xyz);
//这里和上面一句是一样的效果,只是unity内置了此函数给我们用
viewDir = normalize(UnityWorldSpaceViewDir(worldPos));
  • 反射光方向
//反射光方向 注:这里取负值,是因为_WorldSpaceLightPos0方向是有物体到光源方向的,
//而CG的reflect方法是需要光源到物体方向的,所以这里取负值
fixed3 reflectDir = normalize(reflect(-lightDir,normal));
  • 获取texture uv像素
//_MainTex_ST.xy:代表缩放值,_MainTex_ST.zw:代表偏移量
uv = texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
//上面这一句unity给我们提供的宏
o.uv = TRANSFORM_TEX(texcoord,_MainTex);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值