镜面高光
2016-04-15 09:56
316 查看
1.求出入射光向量
2.顶点法线向量
3.根据CG函数求出 反射光
4.反射光与视向量点积 求出镜面高光的系数 乘以对应颜色值
2.顶点法线向量
3.根据CG函数求出 反射光
4.反射光与视向量点积 求出镜面高光的系数 乘以对应颜色值
Shader "Custom/test1" { properties { _SpecularColor("SpecularColor",color)=(1,1,1,1) _shininess("shininess",range(4,64)) = 8 } SubShader { pass { Tags{"LightMode"="ForwardBase"} CGPROGRAM #pragma vertex vert #pragma fragment frag #include "unitycg.cginc" #include "lighting.cginc" float4 _SpecularColor; float _shininess; struct v2f{ float4 pos:POSITION; fixed4 col:COLOR; }; v2f vert(appdata_base v) { v2f o; o.pos = mul(UNITY_MATRIX_MVP,v.vertex); float3 N = normalize(v.normal); float3 L = normalize(_WorldSpaceLightPos0); N = mul(float4(N,0),_World2Object).xyz; N = normalize(N); //漫反射 float ndot =pow(saturate(dot(L,N)),_shininess); //环境光 o.col = _LightColor0*ndot+UNITY_LIGHTMODEL_AMBIENT; //镜面高光 //1.求出入射光 float3 I = -WorldSpaceLightDir(v.vertex); //2.求出法线 float3 wN = UnityObjectToWorldNormal(v.normal); //3.计算反射 float3 R = reflect(I,wN); //4.计算视向量 float3 V = WorldSpaceViewDir(v.vertex); //5.归一求点积 R = normalize(R); V = normalize(V); float specularScale = saturate(dot(R,V)); o.col+=_SpecularColor*specularScale; return o; } fixed4 frag(v2f IN):COLOR { //光照计算放在片段程序中,交接顶点会变得比较平滑 return IN.col; } ENDCG } } }
相关文章推荐
- 发送POST请求数据包&解决发过去的中文在后台显示乱码"????"
- js当前时间加减一天,和格式化时间格式
- Linux中常用操作命令
- sizeof与strlen的区别:面试回答
- js 合并表格
- Python的网页下载器:urllib2.urlopen
- BFS与DFS
- 光照漫反射(平行光)
- MAC系统显示隐藏文件
- 点光源
- Android Studio:Gradle project refresh failed. Connection timed out: connect.
- Data Guard配置
- java中的变量
- 导出Excel
- resizableImageWithCapInsets 图片拉伸
- Awk使用案例总结(运维必会)
- HTML5的新特性
- C# 模拟光照运算以及背面剔除
- 解决Android 6.0动态添加权限问题
- VC++如何将程序最小化到托盘