Skip to content

天空球

jstzwj edited this page Jan 30, 2023 · 2 revisions

在一些大型的游戏中,有几个必不可少的元素,例如天空大地房屋和草坪,正因为有这些元素的存在才使得场景额外的真实。 天空可以看作是一个很大的容器,它将整个世界包围在其中。 模拟天空是很简单,在开发过程中,通常会把天空卷积成一个球体,以图片的形式存放起来。 渲染时通过读取该纹理来渲染天空背景,我们称它为天空盒(Sky box),这是一种最广泛的用于各种实时渲染中的技术, 在 Ray-MMD 中一共有4种可选的方式用于模拟天空球,分别是 Image-Based lighting,Sky Hemisphere,Sky Night, Time of day, Time of night, 此外由于天空的光照来至无数的方向,每一个方向都可以作为对模型光照的贡献值, 由于实时计算环境光的阴影几乎是不可能的,游戏中会采用烘培出的环境光遮蔽贴图以及屏幕空间的环境光遮蔽(Screen Space Ambient Occlusion)来近似模拟。

基于图像的照明(Image-Based lighting)

如概要所说渲染天空球通常会将天空以图片的形式存放起来,渲染时通过读取该图片来渲染天空背景,作为图像照明, IBL(Image-Based lighting)也是近几年新起的一套预过滤环境贴图的使其能够让天空球作为一个大 的环境光源,因此使用不同的天空球光照效果是不一样的,也自然会产生出不同的冷暖色调,同时通过它产生的光照是其它天空球中最好的
alt
alt

在 Ray-MMD 中主要使用能够支持高动态范围的HDR文件,假设白炽灯,远光灯,太阳,散发出的光都是白色的,但太阳是最刺眼的,其次远光灯和白炽灯这样只用RGB来描述光的颜色是远远不够的,因此需要一个光强来描述颜色的强度,对此jpg,png,tga这类,RGB最大只有255的并不是高动态范围HDR(High-dynamic-range).因此IBL的图片最好使用支持颜色超出255的图像文件,如dds, hdr等,这样光照效果会更亮,立体感更强,同时越亮的区域产生的泛光(bloom)也会越大(左边没有使用HDR的天空球,右边则是使用HDR的):

参数

当你载入Sky with box.pmx,在MMD表情栏中你可以看到模型的表情有如下这些参数:

表情名 作用
BalanceR/G/B+ 增加红/绿/蓝的分量到天空球
BalanceR/G/B- 减少红/绿/蓝的分量到天空球
BalanceGray+ 天空球的色彩逐渐转换为灰度
DiffuseR/G/B+ 增加漫反射光照红/绿/蓝的分量
DiffuseR/G/B- 减少漫反射光照红/绿/蓝的分量
DiffuseGray+ 对漫反射光照逐渐转换为灰度
SpecularR/G/B+ 增加镜面反射光照红/绿/蓝的分量
SpecularR/G/B- 减少镜面反射光照红/绿/蓝的分量
SpecularGray+ 对镜面反射光照逐渐转换为灰度
EnvDiffLight+ 增加漫反射的光照强度,效果等同于 DiffuseR/G/B+ 同时调节
EnvDiffLight- 减少漫反射的光照强度,效果等同于 DiffuseR/G/B- 同时调节
EnvSpecLight+ 增加镜面反射的光照强度,效果等同于 SpecularR/G/B+ 同时调节
EnvSpecLight- 减少镜面反射的光照强度,效果等同于 SpecularR/G/B- 同时调节
EnvSSSLight+ 当材质具有次表面的属性时,增加次表面散射的透射程度
EnvSSSLight- 当材质具有次表面的属性时,减少次表面散射的透射程度
EnvRotateX 围绕X轴旋转天空球以及光照效果
EnvRotateY 围绕Y轴旋转天空球以及光照效果
EnvRotateZ 围绕Z轴旋转天空球以及光照效果

自定义天空球

  1. 解压在 Ray-MMD 的 Tools 目录中的 cmft_rgbt_x1024.zip
    link text
  2. 选择一张hdr文件, 并改名为skybox.hdr, 然后拖拽到exe上,后缀fast,meidum,high会分别输出不同大小的天空球,一般使用fast即可
    link text
  3. 如果文件格式是正确的将会进行处理,效果如下
    link text
  4. 程序运行完后会多出skybox_hdr.dds,skydiff_hdr.dds和skyspec_hdr.dds文件
    link text
  5. 将skybox.dds, skydiff_hdr.dds, skyspec_hdr.dds 复制到Template目录中的texture目录
    link text
  6. 然后把Template目录剪切到Skybox目录下,否则MMD加载会出现路径不对,最后重命名Template为你想要的文件名 link text

Sky Hemisphere

Sky Hemisphere是一个非常便捷的可定制的纯色天空球,用于制造一些非真实的光照环境,如果你喜欢清新的风格 它可能会更加适合于你,它只有三种颜色被用于控制分别是:北极,赤道,南极的颜色,默认时颜色为纯白色 alt

参数

当你载入Sky with box.pmx,在MMD表情栏中你可以看到模型的表情有如下这些参数:

表情名 作用
TopH/S/V 调整天空球上方的色相, 饱和度,亮度
TopExponent+ 调整天空球上方与正前方插值时的权重
TopExponent- 调整天空球上方与正前方插值时的权重
MediumH/S/V 调整天空球正前方的色相, 饱和度,亮度
BottomH/S/V 调整天空球下方的色相, 饱和度,亮度
BottomExponent+ 调整天空球下方与正前方插值时的权重
BottomExponent- 调整天空球下方与正前方插值时的权重
EnvDiffLight+ 增加漫反射的光照强度
EnvDiffLight- 减少漫反射的光照强度
EnvSpecLight+ 增加镜面反射的光照强度
EnvSpecLight- 减少镜面反射的光照强度
EnvSSSLight+ 当材质具有次表面的属性时,增加次表面散射的透射程度
EnvSSSLight- 当材质具有次表面的属性时,减少次表面散射的透射程度
EnvRotateX 围绕X轴旋转天空球以及光照效果
EnvRotateY 围绕Y轴旋转天空球以及光照效果
EnvRotateZ 围绕Z轴旋转天空球以及光照效果

Sky Night

Sky Night 在Sky Hemisphere上增加一些额外内容,如星空,用于打造自定义的夜景天空球,默认时颜色为黑色 alt

参数

当你载入Sky with box.pmx,在MMD表情栏中你可以看到模型的表情有如下这些参数:

表情名 作用
TopH/S/V 调整天空球上方的色相, 饱和度,亮度
TopExponent+ 调整天空球上方与正前方插值时的权重
TopExponent- 调整天空球上方与正前方插值时的权重
MediumH/S/V 调整天空球正前方的色相, 饱和度,亮度
BottomH/S/V 调整天空球下方的色相, 饱和度,亮度
BottomExponent+ 调整天空球下方与正前方插值时的权重
BottomExponent- 调整天空球下方与正前方插值时的权重
EnvDiffLight+ 增加漫反射的光照强度
EnvDiffLight- 减少漫反射的光照强度
EnvSpecLight+ 增加镜面反射的光照强度
EnvSpecLight- 减少镜面反射的光照强度
EnvSSSLight+ 当材质具有次表面的属性时,增加次表面散射的透射程度
EnvSSSLight- 当材质具有次表面的属性时,减少次表面散射的透射程度
EnvRotateX 围绕X轴旋转天空球以及光照效果
EnvRotateY 围绕Y轴旋转天空球以及光照效果
EnvRotateZ 围绕Z轴旋转天空球以及光照效果

Time of day

这是一个基于物理近似的大气散射模型,用于模拟真实的户外天空,通过调节主光源的位置来控制太阳的方位,实现日出到日落的过程, 同时该模型的源码公开在了ShaderToy,你可以单击此链接,该演示可以通过鼠标 的位置实时调整太阳方位 alt

参数

当你载入Sky with box.pmx,在MMD表情栏中你可以看到模型的表情有如下这些参数:

表情名 作用
EnvDiffLight+ 增加漫反射的光照强度
EnvDiffLight- 减少漫反射的光照强度
EnvSpecLight+ 增加镜面反射的光照强度
EnvSpecLight- 减少镜面反射的光照强度
EnvSSSLight+ 当材质具有次表面的属性时,增加次表面散射的透射程度
EnvSSSLight- 当材质具有次表面的属性时,减少次表面散射的透射程度
EnvRotateX 围绕X轴旋转天空球以及光照效果
EnvRotateY 围绕Y轴旋转天空球以及光照效果
EnvRotateZ 围绕Z轴旋转天空球以及光照效果

Time of night

该模型如Time of day一样,用于模拟户外的夜景效果,同时你可以通过调节主光源的位置,来控制月球的位置 alt

参数

当你载入Sky with box.pmx,在MMD表情栏中你可以看到模型的表情有如下这些参数:

表情名 作用
EnvDiffLight+ 增加漫反射的光照强度
EnvDiffLight- 减少漫反射的光照强度
EnvSpecLight+ 增加镜面反射的光照强度
EnvSpecLight- 减少镜面反射的光照强度
EnvSSSLight+ 当材质具有次表面的属性时,增加次表面散射的透射程度
EnvSSSLight- 当材质具有次表面的属性时,减少次表面散射的透射程度
EnvRotateX 围绕X轴旋转天空球以及光照效果
EnvRotateY 围绕Y轴旋转天空球以及光照效果
EnvRotateZ 围绕Z轴旋转天空球以及光照效果
Clone this wiki locally