元宇宙技术是在原来的基础上实现的元宇宙沉浸感,参与度,永续性等多方面的高要求。因此将许多的独立工具,平台,基础设施,协议来支持其元宇宙平台的运行。加上AR、VR、5G、云计算等技术的提升,元宇宙也逐步的走进现实。
元宇宙的技术基础
在技术的视角下,技术的意义元宇宙包括了内容系统,链游系统,显示系统,操作系统,实现展示为超越屏幕的3D界面,代表继PC端的时代之后的全息平台实现,支持「元宇宙」的技术集群包括5个板块:
其一,网络和算计技术:包括空间定位运算,虚拟场景结合,实时网络传输,GPU服务器、边缘技术,降低成本和网络拥堵;
其二,人工智能技术;
其三,电子技术;支持链游的程序代码,资源,相关的引擎技术等。
其四,显示技术:实现VR、AR、MR效果,特别是XR,实现各种技术的升级,虚拟世界的沉浸感,不断的深化感知交互等。
其五,通过智能合约,去中心化的清算平台和价值传递机制,保证价值归属与流转,实现经济系统的运行稳定,实现高效的处理方式,透明和确定的稳定性。
shader:
Shader"Luoyinan/Scene/SkyBox"
{
Properties
{
_MainTex("Cubemap Texture",Cube)="white"{}
_FogColor("Height Fog Color",Color)=(1,1,1,1)
_Angle("Angle",Float)=0
_AngleSpeed("Angle Speed",Float)=0.2
_SunDistance("Sun Distance",Float)=20
_SunPower("Sun Power",Float)=1
_MainTex2("Fading Cubemap Texture.Don't Set.",Cube)="white"{}
_Angle2("Fading Cubemap Texture Angle.Don't Set.",Float)=0
_AngleSpeed2("Fading Cubemap Texture Angle Speed.Don't Set.",Float)=0.2
}
SubShader
{
Tags{"Queue"="Background""RenderType"="Background""PreviewType"="Skybox"}
Cull Off ZWrite Off
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include"UnityCG.cginc"
#pragma multi_compile __ _FANCY_STUFF
#pragma multi_compile __ _FADING_ON
struct appdata_t
{
float4 vertex:POSITION;
};
struct v2f
{
float4 pos:SV_POSITION;
float3 texcoord:TEXCOORD0;
#if _FADING_ON
float3 texcoord1:TEXCOORD1;
#endif
half fog:TEXCOORD2;
#if _FANCY_STUFF
half3 dir:TEXCOORD3;
#endif
};
samplerCUBE _MainTex;
#if _FADING_ON
samplerCUBE _MainTex2;
half _Angle2;
half _AngleSpeed2;
fixed _GlobalFadingFactor;
#endif
half _AngleSpeed;
#if _FANCY_STUFF
fixed4 _GlobalMainLightDir;
fixed4 _GlobalMainLightColor;
half _SunDistance;
half _SunPower;
#endif
fixed4 _FogColor;
half _Angle;
v2f vert(appdata_t v)
{
v2f OUT;
OUT.pos=mul(UNITY_MATRIX_MVP,v.vertex);
//天空盒水平旋转
_Angle+=_Time.x*_AngleSpeed;
half sina,cosa;
sincos(_Angle,sina,cosa);
fixed2x2 m=fixed2x2(cosa,-sina,sina,cosa);
OUT.texcoord=half3(mul(m,v.vertex.xz),v.vertex.y).xzy;
#if _FADING_ON
_Angle2+=_Time.x*_AngleSpeed2;
sincos(_Angle2,sina,cosa);
m=fixed2x2(cosa,-sina,sina,cosa);
OUT.texcoord1=half3(mul(m,v.vertex.xz),v.vertex.y).xzy;
#endif
#if _FANCY_STUFF
OUT.dir=v.vertex.xyz;
#endif
//高度雾.高度越低雾越浓,所以v.vertex.y取反.模型空间Y值范围[-1,1],所以乘以2.
half fogFactor=2*(1.0-_FogColor.a)-v.vertex.y;
OUT.fog=saturate(fogFactor);//颜色过渡范围[0,1]
return OUT;
}
fixed4 frag(v2f IN):SV_Target
{
fixed4 finalColor=texCUBE(_MainTex,IN.texcoord);
#if _FADING_ON
fixed4 fadingColor=texCUBE(_MainTex2,IN.texcoord1);
finalColor=lerp(finalColor,fadingColor,_GlobalFadingFactor);
#endif
finalColor=lerp(finalColor,_FogColor,IN.fog);
#if _FANCY_STUFF
//太阳
half3 dir=normalize(IN.dir);//天空盒中心为世界原点,所以位置就等于方向.
half3 dir_sun=normalize(_GlobalMainLightDir.xyz);
half dis=length(dir_sun-dir)*_SunDistance;
finalColor+=(saturate(max(1/dis,0.01))_GlobalMainLightColor)_SunPower;
#endif
finalColor.a=0;//等美术做好天空盒的alpha通道再开放
return finalColor;
}
ENDCG
}
}
Fallback Off
}