介绍
这篇文章主要讲解了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材质实现动态星空的方法有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。