探索光晕之美:揭秘游戏中的经典美学名词及其奥秘

2026-09-03 0 阅读

在游戏的世界里,我们被无数美轮美奂的场景所吸引,那些令人陶醉的画面和令人沉浸的体验,背后都离不开游戏设计师们对美学的深刻理解和运用。今天,我们就来揭开游戏中的经典美学名词的神秘面纱,一起探索光晕之美的奥秘。

1. 光晕(Halo)

光晕,顾名思义,是指物体边缘发出的光芒。在游戏中,光晕效果常用于表现物体的高光、反光、折射等现象,使场景更加生动和真实。例如,在《光晕》系列中,光晕效果被用来模拟太空环境中的光线效果,营造出一种深邃、神秘的氛围。

代码示例(Unity Shader):

Shader "Custom/Halo"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _HaloSize ("Halo Size", Float) = 0.5
        _HaloColor ("Halo Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float _HaloSize;
            float4 _HaloColor;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                float2 uvOffset = float2(i.uv.x + _HaloSize, i.uv.y + _HaloSize);
                float2 uvCenter = float2(i.uv.x, i.uv.y);
                float4 colHalo = tex2D(_MainTex, uvOffset) * _HaloColor;
                float4 colCenter = tex2D(_MainTex, uvCenter);
                return lerp(col, colHalo, _HaloSize);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

2. 环境光遮蔽(Ambient Occlusion)

环境光遮蔽是一种模拟光线在物体间传播时,被遮挡部分产生的阴影效果。在游戏中,环境光遮蔽可以使场景更加真实,增强角色的立体感和空间感。例如,在《刺客信条》系列中,环境光遮蔽被用来模拟角色在狭窄空间中的阴影效果,使场景更加紧张和刺激。

代码示例(Unity Shader):

Shader "Custom/AmbientOcclusion"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _AOStrength ("AO Strength", Float) = 0.5
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float _AOStrength;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                float ao = tex2D(_AOTexture, i.uv).r;
                ao = pow(ao, _AOStrength);
                return col * ao;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

3. 环境映射(Environment Mapping)

环境映射是一种将周围环境映射到物体表面的技术,可以使场景更加真实和立体。在游戏中,环境映射常用于模拟反射、折射等现象,增强场景的视觉效果。例如,在《古墓丽影》系列中,环境映射被用来模拟水面、墙壁等物体的反射效果,使场景更加生动和真实。

代码示例(Unity Shader):

Shader "Custom/EnvironmentMapping"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _EnvMap ("Environment Map", Cube) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float3 worldPos : TEXCOORD0;
                float3 worldNormal : TEXCOORD1;
                float2 uv : TEXCOORD2;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            samplerCUBE _EnvMap;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
                o.worldNormal = normalize(mul(unity_ObjectToWorld, float4(v.normal, 0)).xyz);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed3 normal = normalize(i.worldNormal);
                fixed3 reflection = normalize(reflect(normal, float3(0, 0, 1)));
                fixed4 col = tex2D(_MainTex, i.uv);
                return texCUBE(_EnvMap, reflection) * col;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

4. 模糊(Blur)

模糊是一种将图像进行模糊处理的技术,可以使场景更加柔和、浪漫。在游戏中,模糊常用于模拟镜头、水面、雾气等现象,增强场景的氛围感。例如,在《巫师3:狂猎》中,模糊效果被用来模拟雾气效果,使场景更加神秘和神秘。

代码示例(Unity Shader):

Shader "Custom/Blur"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                float2 offset = float2(0.5, 0.5) * _BlurSize;
                float4 col1 = tex2D(_MainTex, i.uv + offset);
                float4 col2 = tex2D(_MainTex, i.uv - offset);
                return lerp(col, lerp(col1, col2, 0.5), 0.5);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

总结

游戏中的美学名词和效果多种多样,它们共同构成了游戏世界的美丽画卷。通过了解这些美学名词和效果,我们可以更好地欣赏游戏中的美景,也可以为游戏开发提供一些灵感和思路。希望这篇文章能帮助你更好地理解游戏中的光晕之美。

分享到: