跳到主要内容

1 篇博文 含有标签「栅格」

查看所有标签

山体阴影

· 阅读需 5 分钟
杨
技术支持

什么是山体阴影

“山体阴影”(Hillshade,也叫地形阴影或地形晕渲)是地理信息系统(GIS)中一种常见的地形可视化技术,用于根据数字高程模型(DEM)模拟太阳照射下的地形明暗效果,让地形起伏更直观。

核心原理简述

山体阴影的生成,本质上是**光照模型(Lighting Model)**在数字高程模型(DEM)上的应用。 整个计算链如下:

DEM(高程栅格) → 局部坡度/坡向 → 法向量(Normal)→ 光线方向(Light Vector)→ 光照计算 → 灰度阴影值

即通过模拟光线与地形表面的角度关系,求出每个像元的明暗程度。

最终的亮度计算可概括为:

I=(NL)×LightIntensity+AmbientIntensityI=(N⋅L)×LightIntensity+AmbientIntensity

其中:

  • NN:单位法向量(由DEM梯度计算)
  • LL:单位光线方向向量(由太阳方位角、太阳高度角定义)
  • NLN \cdot L:二者的点积,表示光线与坡面的夹角余弦,决定明暗
  • 其余参数控制不同的物理尺度视觉表现

参数简介

LightDirection (太阳方位角) & ZenithAngle(太阳高度角)

这两者决定了光线方向向量 LL

光线向量分量:

L=(sinAzcosZ,cosAzcosZ,sinZ)L = (\sin A_z \cos Z, \cos A_z \cos Z, \sin Z)
  • LightDirection(Azimuth):控制光从哪边照来(如西北315°、东90°)。
  • ZenithAngle(Altitude):控制光线与地面的夹角(0°=地平线,90°=正顶)。

👉 对应效果:

  • 方位角:改变阴影朝向;
  • 高度角:改变阴影长度、立体感强弱。

AmbientIntensity(环境光强度)LightIntensity(直射光强度)

两者共同定义光照方程的亮度组成

基本形式(朗伯光照模型):

I=NL×LightIntensity+AmbientIntensityI = N \cdot L \times \text{LightIntensity} + \text{AmbientIntensity}
  • AmbientIntensity:无方向的柔光,防止背光区全黑;
  • LightIntensity:有方向的直射光,决定明暗对比度。

ElevationFactor(高程–平面换算因子)

DEM 的高程单位(Z轴)可能与水平坐标(X/Y轴)单位不一致(尤其经纬度 DEM)。

  • 若坐标为经纬度(°),需将高程(m)换算成角度尺度;
  • 若坐标为米制(如UTM、Web Mercator),可设为 1。

这是为了保持在计算法向量时,地形坡度的几何比例真实。 否则山体会被“压扁”或“过度夸张”。


Extrusion(拉伸因子)**

这实际上是对 Z 值的视觉夸张因子,用于强调地形起伏。 在计算法向量时,Z 值会乘以:

Z=Z×ElevationFactor×ExtrusionZ' = Z \times \text{ElevationFactor} \times \text{Extrusion}

效果:

  • 小比例尺 DEM(分辨率粗):适当放大(如 5~8)以增强立体感;
  • 高精度 DEM(如 10m):值可设 1~2。

参数汇总表

参数中文名称常见取值*作用机理调整效果 & 建议
LightDirection太阳方位角(°,顺时针自北)0 – 360(默认 315° = 西北)太阳方位角,决定光从哪边照来,控制“阴影朝向”。- 早晨效果:90°(东)- 中午偏南:180°- 常见“北西向光”凸显南坡:315°
ZenithAngle太阳高度角(°,0=地平线,90=正顶)0 – 90(默认 45°)太阳高度角- 低角度(10°):阴影拉长,立体感强,但山谷易过暗。- 高角度(60°+):阴影短,效果柔和,堆叠阴影少。
LightIntensity直射光强度0 – 1(默认 0.7 ~ 1.0)朗伯项的系数,越大明暗差越大。- 与 AmbientIntensity 的相对比例才重要。一般 LightIntensity + Ambient ≈ 1。- 若想突出山脊,可把 LightIntensity 提到 1.2,并适当降低 Ambient。
AmbientIntensity环境光强度0 – 1(默认 0.6 ~ 0.9)在朗伯光照模型中加入一条“到处都有的柔光”,公式:I = N·L × LightIntensity + Ambient。- 提高可见暗部细节,防止背光区域完全黑。- 过高:阴影发灰、立体感削弱;过低:对比度过强、细节丢失。- 若想表现“夕阳侧光”可把 Ambient 设低一些(≈ 0.3)。
ElevationFactor海拔因子 / 高程–平面换算因子取决于坐标系- 经纬度 DEM:1 / (地球周长×度数) ≈ 1/(111 km);- 同单位平面坐标:1把 Z 高程转换到与 X/Y 相同量纲,否则在 3D 叉积中比例失真。- 如果 DEM 单位已是米而坐标系是 Web Mercator/UTM 的米,可以直接设 1。- 如果是经纬度(°)+ 高程(m),需乘约 0.000009(即 1 m ≈ 9e-6°)。
Extrusion拉伸因子0 – 10(默认 1 ~ 5)与 ElevationFactor 相乘后用于 夸张地形起伏。- 数值越大,山峰越尖锐、沟谷越深;0 表示完全平坦阴影。- 大比例尺(10 m DEM)通常 1 ~ 2;小比例尺(90 m DEM)可放大到 5 ~ 8。

四种预设效果

为了方便用户使用,XinGEO预设了四种模式

预设LightDirection(°,顺时针自北)ZenithAngle(°,光源高度)LightIntensityAmbientIntensityExtrusion*适用场景与视觉效果
晨光90°(正东)20 – 30°0.850.42长阴影、对比强,强调山脊朝西侧投影;适合凸显晨曦氛围。
正午180°(正南)70 – 80°0.60.551.5阴影最短,立体感柔和;适合作底图与叠加图层共用时不抢视觉焦点。
夕阳270°(正西)15 – 25°0.90.352与晨光对称但方向相反;夕照金黄、山谷朝东侧拉长阴影。
夜光(月光/微光)315°(西北,常见“斜上方月光”)60°0.30.71.5几乎无强直射,靠高环境光呈现柔和暗调;可用于暗色系底图或夜景模式。

为地形数据增加山体阴影

在栅格数据使用分级填色时,可以使用山体阴影,这里以全球海陆地形栅格数据为例。

image-20251018082848698

下面为四种效果,依次为晨光、正午、夕阳、夜光。

晨光

正午

夕阳

夜光