Unity3d《Shader篇》漫反射
2015-06-23 15:42
501 查看
Unity3d《Shader篇》漫反射
Shader "Custom/Ambient" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _Color("Diffuse Material Color", Color) = (1,1,1,1) _SpecColor("Specular Color", Color) = (1,1,1,1) _Shininess("Shininess", Float) = 10 } SubShader { Pass { Tags{ "LightMode" = "ForwardBase" } CGPROGRAM #pragma exclude_renderers gles #pragma vertex vert #pragma fragment frag sampler2D _MainTex; uniform float4 _Color; uniform float4 _SpecColor; uniform float _Shininess; uniform float4 _LightColor0; struct vertexInput { float2 texCoord : TEXCOORD0; float4 vertex : POSITION; float3 normal : NORMAL; }; struct vertexOutput { float4 pos : SV_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; vertexOutput vert( vertexInput input ) { vertexOutput output; float4x4 modelMatrix = _Object2World; float3 normalDir = normalize(float3(mul(_Object2World, float4(input.normal,0.0)))); float3 lightDir = normalize(float3(_WorldSpaceLightPos0)); float3 viewDir = normalize(_WorldSpaceCameraPos - float3(mul(_Object2World,input.vertex))); float specularRefection = float3(_LightColor0)*float3(_SpecColor)*pow(max(0.0,dot(reflect(-lightDir,normalDir),viewDir)),_Shininess); float3 diffuseReflection = float3(_LightColor0)*float3(_Color)*max(0.0,dot(normalDir,lightDir)); float3 ambientLighting = float3(UNITY_LIGHTMODEL_AMBIENT)*float3(_Color); output.color = float4(ambientLighting+diffuseReflection+specularRefection,1.0); output.pos = mul(UNITY_MATRIX_MVP,input.vertex); output.texCoord = input.texCoord; return output; } float4 frag(vertexOutput input) : COLOR { float4 col = tex2D(_MainTex,input.texCoord)*_Color; return input.color*col; } ENDCG } } FallBack "Diffuse" }
相关文章推荐
- Unity使用Shader控制物体材质的透明度(Lambert版和非光照版)
- unity3D游戏开发之雾效、水效和音效
- unity, 设置帧率上限
- Unity C#单例模式
- 解读Unity中的CG编写Shader系列八(镜面反射)
- unity官方文档翻译——Android
- 微软企业库Unity学习笔记(一)
- Unity3D中组件事件函数的执行顺序
- Unity3D内容加密保护
- Unity3D游戏开发之路:一月工作总结
- Unity跨平台原理
- unity3D创建英雄选择栏
- unity学习笔记
- 如何用unity3D编辑英雄技能冷切框
- LZMA C# SDK 结合 UPK 打包压缩 多文件夹 Unity3d实例
- Unity3d基本优化条目
- 【Unity3d】Animator和Animation组件使用注意事项
- 【Unity3d】如何开发Unity自动化补丁工具
- 【Unity3d】热更新Assetbundle资源以及需要注意的地方
- Unity3D 系统宏