Unity3D材质实现动态星空的方法

  介绍

这篇文章主要讲解了Unity3D材质实现动态星空的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

材质“未点燃的/Test"
  {
  属性
  {
  (γ)[头(CubeMap)] _MainColor (“MainColor"、颜色)=(0.5,0.5,0.5,1)
  _Spec (“Spec"、范围(1,8))=1
  [NoScaleOffset] _Tex (“CubeMap"立方体)=癰lack" {}
  [头(旋转)][切换(_ENABLEROTATION_ON)] _EnableRotation(“启用Rotation"、浮点数)=0
  [IntRange] _Rotation (“Rotation"范围(0360))=0
  _RotationSpeed (“RotationSpeed"、浮点数)=1
  [头(雾)][切换(_ENABLEFOG_ON)] _EnableFog(“启用Fog"、浮点数)=0
  _FogHeight (“FogHeight"、范围(0,1))=1
  _FogSmooth (“FogSmooth"范围(0.01,1))=0.01
  _FogHill (“FogHill"、范围(0,1))=0.5
  
  
  }
  SubShader
  {
  标记{“RenderType"=癇ackground"“Queue"=癇ackground"“IgnoreProjector"=癟rue"“ForceNoShadowCasting"=癟rue"}
  LOD 100
  剔除掉
  ZWrite掉
  CGPROGRAM
  # include“UnityShaderVariables.cginc"
  # include“UnityCG.cginc"
  # pragma目标3.0
  # pragma shader_feature _ENABLEROTATION_ON
  # pragma shader_feature _ENABLEFOG_ON
  # pragma表面冲浪线头keepalpha noshadow noambient novertexlights nolightmap nodynlightmap nodirlightmap nofog nometa noforwardadd顶点:vertexRo
  
  
  结构的输入
  {
  float3 worldPos;
  float3 vertextofrag;
  };
  
  
  制服float4 _MainColor;
  统一浮动_Spec;
  制服samplerCUBE _Tex;
  制服_Rotation一半;
  制服_RotationSpeed一半;
  制服_FogHeight一半;
  制服_FogSmooth一半;
  制服_FogHill一半;
  制服half4 _Tex_HDR;
  
  
  half3 decode_HDR (half4数据)
  {
  返回DecodeHDR(数据、_Tex_HDR);
  }
  空白vertexRo (inout appdata_full v,输入o)
  {
  阿,UNITY_INITIALIZE_OUTPUT(输入);
  float3 _worldPos=mul (unity_ObjectToWorld v.vertex);
  浮动_lerpResult=昆虫蜜(1.0,(unity_OrthoParams.y/unity_OrthoParams.x), unity_OrthoParams.w);
  float3 _append=float3 (_worldPos.x _worldPos.y * _lerpResult _worldPos.z);
  float3 _nor_append=正常化(_append);
  浮动_timeMove=_Time.y;
  float3 _timeMove1=float3 (cos(弧度(_Rotation + _timeMove * _RotationSpeed)), 0,罪(弧度(_Rotation + _timeMove * _RotationSpeed)) * 1);
  _lerpResult float3 _timeMove2=float3 (0, 0);
  float3 _timeMove3=float3 (sin(弧度(_Rotation + _timeMove * _RotationSpeed)), 0,因为(弧度(_Rotation + _timeMove * _RotationSpeed)));
  float3 _nor_worldPos=正常化(_worldPos);
  # ifdef _ENABLEROTATION_ON
  o.vertextofrag=mul (float3x3 (_timeMove1, _timeMove2 _timeMove3) _nor_worldPos);
  其他#
  o.vertextofrag=_nor_append;
  # endif
  
  
  }
  fixed4 LightingLint (SurfaceOutput年代,float3 lightDir、浮点数衰减器)
  {
  返回fixed4 (0, 0, 0, s.Alpha);
  }
  空白冲浪(输入我inout SurfaceOutput o)
  {
  half4 CUBEdata=https://www.yisu.com/zixun/texCUBE (_Tex i.vertextofrag);
  half3 CUBEdataHDR=decode_HDR (CUBEdata);
  float4 CUBEColor=(float4 (CUBEdataHDR, 0)) * _MainColor * _Spec * unity_ColorSpaceDouble;
  float3 _nor_worldPos=正常化(i.worldPos);
  浮动_lerpFog=昆虫蜜(饱和(战俘(_nor_worldPos.y/_FogHeight 1 -_FogSmooth)), 0, _FogHill);
  float4 FinalColor=昆虫蜜(unity_FogColor、CUBEColor _lerpFog);
  # ifdef _ENABLEFOG_ON
  o.Emission=FinalColor.rgb;
  其他#
  o.Emission=CUBEColor.rgb;
  # endif
  o.Alpha=1;
  
  
  }
  ENDCG
  }
  
  }

规范:亮度

旋转:开始旋转角度,可以调节

RotationSpeed:旋转速度

雾开头:雾化效果,可以看算法实现

 Unity3D材质实现动态星空的方法

看完上述内容,是不是对Unity3D材质实现动态星空的方法有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。

Unity3D材质实现动态星空的方法