UnityShader太空中的大气层效果
生活随笔
收集整理的這篇文章主要介紹了
UnityShader太空中的大气层效果
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Shader "Custom/Atmosphere Glow"
{Properties{//大氣層的顏色_AtmoColor("Glow Color", Color) = (1,1,1,1)//大氣層反射效果的強化量_InnterRingFactor("Glow Factor", Float) = 5//大氣層相對于地表的偏移_Offset("Vertex Offset", Float) = 0}SubShader{Tags{"IgnoreProjector" = "True""Queue" = "Transparent""RenderType" = "Transparent"}Pass{Blend One OneAlphaTest Greater 0.1ColorMask RGBACull Back Lighting Off ZWrite Off Fog{ Color(0,0,0,0) }CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma glsl#pragma target 3.0uniform float _InnterRingFactor;uniform float4 _AtmoColor;uniform float _Offset;struct VertexInput{float4 vertex : POSITION;float3 normal : NORMAL;};struct VertexOutput{float4 pos : SV_POSITION;float4 posWorld : TEXCOORD0;float3 normalDir : TEXCOORD1;};VertexOutput vert(VertexInput v){VertexOutput o;//獲得頂點的發現方向o.normalDir = normalize(mul(unity_ObjectToWorld,float4(v.normal, 0)).xyz);//對原來的頂點進行偏移v.vertex.xyz += (_Offset*v.normal);//在世界中的頂點信息o.posWorld = mul(unity_ObjectToWorld, v.vertex);//轉換后得到偏移后的頂點信息o.pos = mul(UNITY_MATRIX_MVP, v.vertex);return o;}float4 frag(VertexOutput i) : COLOR{//視角方向float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);//項目里沒有使用光源,shader中模擬(0,0,0)點為太陽光照(點光源)float3 lightDirection = normalize((0,0,0) - i.posWorld.xyz);float ndl = dot(i.normalDir, lightDirection);float ndv = dot(i.normalDir, viewDirection);//實現的效果為內側描邊//這里當ndv為正數時,指數越大,效果越小,ndv為負數時1-ndv為大于1的數,指數越大,效果越強float3 innerRing = saturate(_AtmoColor.xyz * pow(1 - ndv,_InnterRingFactor)) ;//光源方向參與到運算中float3 finalColor = saturate(pow(ndl + max(0.2, dot(-lightDirection, viewDirection)), 3)) * (innerRing * 2) ;return float4(finalColor, 1);}ENDCG}}
}
效果對比如下:
總結
以上是生活随笔為你收集整理的UnityShader太空中的大气层效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐8个炫酷的 Python 装饰器!
- 下一篇: 地球大气层简介与垂直分层