当在天空盒一种用于表示天空的特殊材质类型。通常是六面体。更多信息
参见 术语表用作场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是分段设计和构建游戏。更多信息
参见 术语表中的反射源(参见灯光窗口)时,则会创建一个本质上是“默认”的反射探针一个渲染组件,可以捕获其周围环境的球形视图,就像相机一样。然后捕获的图像将存储为立方体贴图,可以由具有反射材质的对象使用。更多信息
参见 术语表,其中包含天空盒数据。反射探针在内部是一个立方体贴图六个方形纹理的集合,可以表示环境中的反射或几何体后面绘制的天空盒。六个正方形形成围绕对象的假想立方体的面;每个面都表示沿世界轴方向(上、下、左、右、前和后)的视图。更多信息
参见 术语表纹理;我们将扩展世界空间法线着色器在 GPU 上运行的程序。更多信息
参见 术语表以查看它。
到目前为止,代码开始变得有点复杂。当然,如果您希望着色器能够自动与灯光、阴影、反射和照明系统的其余部分一起工作,那么使用表面着色器一种简化内置渲染管线着色器编写的方式。更多信息
参见 术语表会容易得多。此示例旨在向您展示如何以“手动”方式使用照明系统的一部分。
Shader "Unlit/SkyReflection"
{
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
half3 worldRefl : TEXCOORD0;
float4 pos : SV_POSITION;
};
v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)
{
v2f o;
o.pos = UnityObjectToClipPos(vertex);
// compute world space position of the vertex
float3 worldPos = mul(_Object2World, vertex).xyz;
// compute world space view direction
float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));
// world space normal
float3 worldNormal = UnityObjectToWorldNormal(normal);
// world space reflection vector
o.worldRefl = reflect(-worldViewDir, worldNormal);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// sample the default reflection cubemap, using the reflection vector
half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.worldRefl);
// decode cubemap data into actual color
half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR);
// output it!
fixed4 c = 0;
c.rgb = skyColor;
return c;
}
ENDCG
}
}
}
上面的示例使用了内置着色器包含文件中的几个内容