<Shader>phong 光照模型和 blinn phong 模式
2017-05-31 14:55
429 查看
Shader "Custom/Lighting001" { Properties{ _diffuseColor("diffuse :",color) = (1,1,1,1) _specularColor("specular:",color) = (1,1,1,1) _shimininess("specular power",range(1,100)) = 10 } SubShader{ pass{ CGPROGRAM #pragma vertex verx #pragma fragment frag #include "unitycg.cginc" #include "Lighting.cginc" float4 _diffuseColor; float4 _specularColor; fixed _shimininess; struct v2f{ float4 pos:POSITION; float3 normal:NORMAL; float4 vertex:TEXCOORD0; }; v2f verx(appdata_base IN) { v2f OUT; OUT.pos = mul(UNITY_MATRIX_MVP,IN.vertex); OUT.normal = IN.normal; OUT.vertex = IN.vertex; return OUT; } fixed4 frag(v2f IN):COLOR { float4 color = UNITY_LIGHTMODEL_AMBIENT; float3 N = UnityObjectToWorldNormal(IN.normal); float3 L = WorldSpaceLightDir(IN.vertex); L = normalize(L); float diffuseScale = saturate(dot( N,L)); float3 diffuse = _diffuseColor.rgb * _LightColor0.rgb * diffuseScale; //不用reflect方法进行求的specular float3 R = normalize(2 * dot(N,L) * N - L); float3 V = WorldSpaceViewDir(IN.vertex); V = normalize(V); //不用公式自己计算出来的光照强度 //float specularScale = dot(R,V); //float3 specular= _specularColor.rgb * _LightColor0.rgb * pow(max(0.0,specularScale),_shimininess); //Phong 光照模型 // float3 reflectDir = reflect(-L,V); // float3 specular= _specularColor.rgb * _LightColor0.rgb * pow(max(0.0,dot(reflectDir,V)),_shimininess); // //Blinn phong 光照模型 float3 H = L + V; H = normalize(H); float HNDot = dot(H,N); float3 specular= _specularColor.rgb * _LightColor0.rgb * pow(max(0.0,HNDot),_shimininess); return color + float4(diffuse,1.0)+ float4(specular,1.0) ; } ENDCG } } }
相关文章推荐
- <Shader> 自定义光照模型
- <Shader>简单的纹理坐标滚动(水波模型)
- <unity shader入门精要> - unity shader 中实现漫反射光照模型
- <Shader>LightMap光照Shader的实现
- <<最小割模型在信息学竞赛中的应用>>的学习心得
- <Java设计模式>---里斯替换原则(LSP)
- <2> 内存四区和函数的调用模型
- <WIFI>wifi工作模式的获取和设置为AP模式(基于SDK)
- <WIFI>在soft-AP模式下实现配置UDP实验——手机点灯
- <JAVA与模式>之动态代理
- <Java设计模式>—UML类图
- <设计模式2>抽象工厂模式
- <设计模式3>单例模式
- <<C++网络编程 卷1 运用ACE和模式消除复杂性>>
- <译>C#使用设计模式和软件设计原则构建应用程序 PartI
- <黑马程序员>关于享元设计模式
- <当unity模型太大导致卡顿延时的解决方法>
- <<cocoa设计模式>>
- <Shader> 最终版本的水纹效果
- GPU实现“Blinn-Phong 光照模型”(Cg语言)