【Unity3D自学记录】 Unity3D Shader之外发光材质
2014-07-02 15:45
369 查看
Shader "Faye/OutLightting" { Properties { _MainTex("Texture (RGB)", 2D) = "black" {} _Color("Color", Color) = (0, 0, 0, 1) _AtmoColor("Atmosphere Color", Color) = (0.5, 0.5, 1.0, 1) _Size("Size", Float) = 0.1 _Falloff("Falloff", Float) = 5 _FalloffPlanet("Falloff Planet", Float) = 5 _Transparency("Transparency", Float) = 15 _TransparencyPlanet("Transparency Planet", Float) = 1 } SubShader { Pass { Name "PlanetBase" Tags {"LightMode" = "Always"} Cull Back CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_fog_exp2 #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" uniform sampler2D _MainTex; uniform float4 _MainTex_ST; uniform float4 _Color; uniform float4 _AtmoColor; uniform float _FalloffPlanet; uniform float _TransparencyPlanet; struct v2f { float4 pos : SV_POSITION; float3 normal : TEXCOORD0; float3 worldvertpos : TEXCOORD1; float2 texcoord : TEXCOORD2; }; v2f vert(appdata_base v) { v2f o; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.normal = v.normal; o.worldvertpos = mul(_Object2World, v.vertex).xyz; o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } float4 frag(v2f i) : COLOR { i.normal = normalize(i.normal); float3 viewdir = normalize(_WorldSpaceCameraPos-i.worldvertpos); float4 atmo = _AtmoColor; atmo.a = pow(1.0-saturate(dot(viewdir, i.normal)), _FalloffPlanet); atmo.a *= _TransparencyPlanet*_Color; float4 color = tex2D(_MainTex, i.texcoord)*_Color; color.rgb = lerp(color.rgb, atmo.rgb, atmo.a); return color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal); } ENDCG } Pass { Name "AtmosphereBase" Tags {"LightMode" = "Always"} Cull Front Blend SrcAlpha One CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_fog_exp2 #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" uniform float4 _Color; uniform float4 _AtmoColor; uniform float _Size; uniform float _Falloff; uniform float _Transparency; struct v2f { float4 pos : SV_POSITION; float3 normal : TEXCOORD0; float3 worldvertpos : TEXCOORD1; }; v2f vert(appdata_base v) { v2f o; v.vertex.xyz += v.normal*_Size; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.normal = v.normal; o.worldvertpos = mul(_Object2World, v.vertex); return o; } float4 frag(v2f i) : COLOR { i.normal = normalize(i.normal); float3 viewdir = normalize(i.worldvertpos-_WorldSpaceCameraPos); float4 color = _AtmoColor; color.a = pow(saturate(dot(viewdir, i.normal)), _Falloff); color.a *= _Transparency*_Color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal); return color; } ENDCG } } FallBack "Diffuse" }
相关文章推荐
- 【Unity3D自学记录】Unity Shader 常用函数列表
- 【Unity3D自学记录】进击的Shader
- 【Unity3D自学记录】Unity3D游戏开发之跑酷游戏项目讲解
- 【Unity3D自学记录】自制插件之简单批量修改
- 【Unity3D自学记录】网络编程之TCP&UDP的区别
- 外发光材质Shader
- Unity3D - 发光材质(Emissive Materials)
- 【Unity3D自学记录】 Unity 延迟执行一段代码的较为优雅的方式
- 【Unity3D自学记录】判断物体是否在镜头内
- 【Unity3D自学记录】UnityWebPlayer网页全屏模式代码
- 【Unity3D自学记录】物品展示必备(旋转与缩放)
- unity3d ulua framwork build打包后shader丢失的问题记录
- 【Unity3D自学记录】纯GUI实现Flappy Bird
- Unity3D 发光Shader
- 【Unity3D自学记录】Resources加载
- 【Unity3D自学记录】Unity3D之自制小钟表
- 【Unity3D自学记录】VR插件CardboardSDKForUnity解析(一)
- 【Unity3D自学记录】MonoBehaviour的事件和具体功能总结
- 【Unity3D自学记录】Unity3D之自制小钟表
- 【shader学习记录】半兰伯特材质和逐顶点/逐像素漫反射