Unity3D Shader(19)——一个简单的色散
2017-09-06 00:25
369 查看
这里放一个简单的色散的效果。
Shader "Custom/fresel" { Properties { _FresnelBias("Bias",range(0,1))=0 _FresnelScale("Scale",range(0,1))=0 _FresnelPow("Pow",range(0,5))=1 _CubeTex ("CubeTex", cube) = "white" {} } SubShader { Tags {"RenderType"="Opaque" "Queue"="transparent"} LOD 100 grabpass{} Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" struct v2f{ float3 refr_r:TEXCOORD0; float3 refr_g:TEXCOORD1; float3 refr_b:TEXCOORD2; float3 L:TEXCOORD3; float3 N:TEXCOORD4; float3 V:TEXCOORD5; float4 pos:SV_POSITION; }; samplerCUBE _CubeTex; float _FresnelBias,_FresnelScale,_FresnelPow; v2f vert(appdata_base v) { v2f o; o.pos=UnityObjectToClipPos(v.vertex); float3 i=WorldSpaceViewDir(v.vertex); i=-normalize(i); o.V=-i; float3 n=mul(float4(v.normal,0),unity_WorldToObject).xyz; n=normalize(n); o.N=n; o.refr_r=refract(i,n,0.96); o.refr_g=refract(i,n,0.98); o.refr_b=refract(i,n,1); o.L=normalize(WorldSpaceLightDir(v.vertex)); return o; } fixed4 frag(v2f i):SV_Target { fixed4 col; col.r=texCUBE(_CubeTex,i.refr_r).r; col.g=texCUBE(_CubeTex,i.refr_g).g; col.b=texCUBE(_CubeTex,i.refr_b).b; float diff=max(0,dot(i.N,i.L)); float3 H=normalize(i.L+i.V); float spec=pow(max(0,dot(i.N,H)),64); col.a=1; col=col*_LightColor0*diff+_LightColor0*spec; float4 fresnel=_FresnelBias+_FresnelScale*pow(1+dot(i.N,-normalize(i.V)),_FresnelPow); col=lerp(col,_LightColor0,fresnel); return col; } ENDCG } } //FallBack "Diffuse" }
相关文章推荐
- 【Unity Shaders】Reflecting Your World —— 在Unity3D中创建一个简单的动态Cubemap系统
- 1.3 Unity3D 的一个简单预览
- Unity3d:一个简单的画圈圈手势判断
- 一个简单的GLSL Shader例子【转】
- 一个简单的水波浪效果Shader
- 【Unity Shaders】Reflecting Your World —— 在Unity3D中创建一个简单的动态Cubemap系统
- 19. 如何使用GameCenter制作一个简单的多人游戏教程:第二部分
- Unity3D 粒子系统实现一个简单的爆炸效果
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- Unity3D一个简单的动画混合Demo
- Unity3D ShaderLab <六>通过改变纹理的UV坐标实现简单的水流效果
- unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- <Shader>一个简单的边缘发光的例子
- Directx11教程(19) 画一个简单的地形
- 3D引擎:Horde3D:Shader类里的 结构体,以及渲染一个 Logo的简单流程(三)
- 一个简单的GLSL Shader例子
- 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)
- Unity3d 一个简单的玻璃效果实现!
- 用unity3D做一个简单的2D井字棋游戏
- 一个简单的GLSL Shader例子