Shader自学笔记 2.1.1 逐顶点漫反射光照模型实现
2017-01-15 05:09
549 查看
Shader "Custom/two/LightModel1" { Properties { // 定义Color类型属性 _Diffuse ("Diffuse", Color) = (1,1,1,1) } SubShader { Pass{ Tags{"LightMode"="ForwardBase"} CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" fixed4 _Diffuse; struct a2v{ float4 vertex:POSITION; float3 normal:NORMAL; }; struct v2f{ float4 pos:SV_POSITION; fixed3 color:COLOR; }; v2f vert(a2v v){ v2f o; // 转换模型顶点坐标由模型坐标到剪裁面坐标 o.pos=mul(UNITY_MATRIX_MVP,v.vertex); // 获取环境光 fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz; // 转换法线到世界坐标 fixed3 worldNormal=normalize(mul(v.normal,(float3x3)_World2Object)); // 获取光源 fixed3 worldLight=normalize(_WorldSpaceLightPos0.xyz); // 漫反射光照模型计算公式 // c_diffuse=(c_light*m_diffuse)max(0,n*I_light) fixed3 diffuse=_LightColor0.rgb*_Diffuse.rgb*saturate(dot(worldNormal,worldLight)); // 环境光和漫反射光照相加 o.color=ambient+diffuse; return o; } // 直接把顶点颜色输出 fixed4 frag(v2f i):SV_Target{ return fixed4(i.color,1.0); } ENDCG } } Fallback "Diffuse" }
兰伯特属于经验模型,根据光源方向和物体表面的法线夹角有直接关系,就是,夹角越大,物体表面越暗,夹角越小,物体表面就越亮。
相关文章推荐
- Shader自学笔记 2.1.2 逐像素漫反射光照模型实现
- Shader自学笔记 2.2.1 逐顶点高光反射光照模型
- Shader自学笔记 2.1.3 半兰伯特光照模型实现
- Shader自学笔记 3.1.1 采样纹理加入到光照模型中
- <unity shader入门精要> - unity shader 中实现漫反射光照模型
- UnityShader初级篇——实现逐顶点漫反射光照模型
- OpenGL 4.0 GLSL 用单光源 实现逐顶点 漫反射光照模型
- Unity3D - Shader - 实现漫反射光照模型
- Unity Shader入门精要笔记(九):Unity 的基础光照——漫反射的实现
- Unity Shader 学习笔记(十二)漫反射卷积光照模型
- Shader自学笔记 2.2.2 逐像素高光反射光照模型
- UnityShader入门精要学习笔记(五):Unity中实现漫反射光照模型
- UnityShader初级篇——实现逐顶点高光反射光照模型
- 【Unity Shaders】学习笔记——SurfaceShader(十一)光照模型
- 学习笔记——基本光照模型简单实现
- Unity实现标准光照模型的Shader代码
- Unity shader学习之逐顶点漫反射光照模型
- Unity|ShaderLab笔记整理-四(逐顶点漫反射+环境光 +高光反射Phone)
- 三种光照模型的shader实现
- 基于GPU实现的经典光照模型算法:漫反射模型(使用cg语言实现)