1. Wiki
  2. /画面与光照
  3. /雾

雾

为 Minecraft Bedrock 制作自定义雾:雾设置文件、距离雾和水下雾、体积雾,以及如何把它应用到生物群系或玩家身上。

雾就是那层遮住世界边缘、在水下把一切染成蓝色的朦胧。资源包中的雾文件设置它的颜色以及从多近开始。之后你可以在生物群系中使用它,或者用命令把它给某个玩家。

在本页中,你将为红宝石林地生物群系制作一层温暖的粉色红宝石雾。

文件一览

资源包
RP/
  fogs/
    ruby_fog.json
  biomes/
    ruby_grove.client_biome.json

雾文件

RP/fogs/ruby_fog.json
{
  "format_version": "1.21.90",
  "minecraft:fog_settings": {
    "description": {
      "identifier": "wiki:ruby_fog"
    },
    "distance": {
      "air": {
        "fog_start": 0.6,
        "fog_end": 1.0,
        "fog_color": "#e8a0a8",
        "render_distance_type": "render"
      },
      "water": {
        "fog_start": 0,
        "fog_end": 40,
        "fog_color": "#8a2e4a",
        "render_distance_type": "fixed"
      },
      "weather": {
        "fog_start": 0.2,
        "fog_end": 0.6,
        "fog_color": "#7a5a60",
        "render_distance_type": "render"
      }
    }
  }
}

identifier 需要命名空间。每个文件一种雾。

雾在哪些情况下生效

在 distance 中,每个键代表一种情况。你只需要列出想修改的那些。

键使用时机
air正常游玩,在露天环境中。
weather正在下雨或下雪。
water头部在水下。
lava头部在熔岩中。
lava_resistance带着抗火效果待在熔岩中。
powder_snow陷在细雪中。

字段

字段作用
fog_color雾的颜色,写成 "#e8a0a8" 这样的十六进制字符串。
fog_start雾开始的位置。
fog_end雾完全浓密、看不到更远处的位置。
render_distance_type如何解读上面两个数字。见下文。
transition_fog可选。让雾随时间渐渐出现,比如刚潜入水中时。

render_distance_type 会改变 fog_start 和 fog_end 的含义:

  • "render":数字是玩家渲染距离的比例。0.6 表示渲染距离的 60%。适合 air,这样无论渲染距离设置多少都能正常工作。
  • "fixed":数字以格为单位。40 表示 40 格远。适合水下,让每个人看到的效果都一样。

浓密阴森的雾

用 "fixed" 配上较小的数字,比如 fog_start 设为 2、fog_end 设为 24,就能做出几乎看不清的沼泽或闹鬼生物群系。

用 transition_fog 让雾渐变

原版的水就用了这个,让你潜入水中后视野慢慢变清晰:

在 distance.water 内
"transition_fog": {
  "init_fog": {
    "fog_start": 0,
    "fog_end": 0.01,
    "fog_color": "#8a2e4a",
    "render_distance_type": "fixed"
  },
  "min_percent": 0.25,
  "mid_seconds": 5,
  "mid_percent": 0.6,
  "max_seconds": 30
}

init_fog 是你刚进入时的雾。之后它会向正常设置过渡:开始时过渡 min_percent,mid_seconds 秒后过渡到 mid_percent,max_seconds 秒后完全过渡。

体积雾

开启活力视效后,雾还可以是真正的 3D 薄雾,光线能从中穿过。在 distance 旁边添加一个 volumetric 块:

在 minecraft:fog_settings 内
"volumetric": {
  "density": {
    "air": {
      "max_density": 0.08,
      "max_density_height": 64,
      "zero_density_height": 120
    }
  },
  "media_coefficients": {
    "air": {
      "scattering": [0.05, 0.03, 0.03],
      "absorption": [0.0, 0.0, 0.0]
    }
  },
  "henyey_greenstein_g": {
    "air": {
      "henyey_greenstein_g": 0.6
    }
  }
}
字段作用
max_density薄雾最浓处有多浓。原版生物群系使用较小的值,大约 0.05。
max_density_height最浓处所在的高度(Y)。
zero_density_height雾完全消散的高度。设得比 max_density_height 高,就能做出贴地的雾。
scattering薄雾反射多少红、绿、蓝光。红色越高,光晕越温暖。
absorption薄雾吸收多少红、绿、蓝光。
henyey_greenstein_g光的方向,取值 -1 到 1。接近 1 时,朝太阳看去薄雾会明亮地发光。

没有开启活力视效的玩家只能看到 distance 雾,所以一定也要设置它。

使用你的雾

在生物群系中

用 minecraft:fog_appearance 让客户端生物群系指向它:

RP/biomes/ruby_grove.client_biome.json(在 components 内)
"minecraft:fog_appearance": {
  "fog_identifier": "wiki:ruby_fog"
}

你也可以用这种方式给原版生物群系换上新的雾。用原版标识符(比如 minecraft:plains)创建一个客户端生物群系文件即可。

在两个生物群系的交界处,游戏会把它们的雾混合在一起,所以过渡很平滑。

用命令

/fog 为选定的玩家在所有雾之上叠加一层雾,而且重新加载世界后依然保留:

聊天栏或命令方块
/fog @a push wiki:ruby_fog ruby_event
/fog @a pop ruby_event

最后一个词是你自己起的名字。pop 会移除该名字下最新的一层雾,remove 会移除该名字下的所有雾。

游戏如何选择设置

雾是分层工作的。对于每项设置,游戏从最上层往下检查,使用第一个设置了它的层:

  1. 用 /fog 添加的雾(最新的优先)。
  2. 玩家周围生物群系的雾。
  3. 默认雾。
  4. 如果都没有设置,则使用内置值。

所以一个只设置了 water 的 /fog 文件会保留生物群系的 air 雾。

雾没有变化?

检查 fog_identifier 是否和雾文件中的 identifier 完全一致,包括命名空间。然后检查文件是否在 RP/fogs/ 中,以及资源包是否已在世界中启用。

画面与光照: 参考资料

We use cookies to improve your experience and analyse site traffic. Learn more