包含此页的版本:
不含此页的版本:
当天空盒(Skybox) 一种特殊类型的材质,用于表示天空。通常是六面的。更多信息
请参阅术语表用于场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表作为反射源(参见照明窗口),
那么本质上是一个“默认”反射探针一个渲染组件,可捕获周围环境的各个方向的球形视图,就像相机一样。然后,捕获的图像将存储为立方体贴图,可供具有反射材质的对象使用。更多信息
请参阅术语表创建,其中包含天空盒数据。
反射探头在内部是一个立方体贴图(Cubemap) 六个方形纹理的集合,可以表示环境中的反射或几何体后面绘制的天空盒。这六个正方形形成了一个围绕物体的假想立方体的面;每个面表示沿世界轴方向(上、下、左、右、前和后)的视图。更多信息
请参阅术语表质地;我们将扩展世界空间法线着色器在 GPU 上运行的程序。更多信息
请参阅术语表上面来研究一下。
现在,代码开始有点参与。当然,如果你想要着色器能够自动处理灯光、阴影、反射和照明系统的其余部分,那么它使用起来会更容易表面着色器 为内置渲染管线编写着色器的简化方法。更多信息
请参阅术语表.此示例旨在向您展示如何以“手动”方式使用照明系统的各个部分。
Shader "Unlit/SkyReflection"
{
SubShader
{
Pass
{
HLSLPROGRAM
#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;
}
ENDHLSL
}
}
}
上面的示例使用内置着色器包含文件中的几个内容: