用途
arcgis-scene-effects 用于配置 ArcGIS Maps SDK for JavaScript 中 SceneView 的场景环境(environment),涵盖阴影、光照、背景、地下导航与高程等设置,面向需要精细控制三维场景视觉表现的开发场景。
主要能力
环境设置
可在 SceneView 或 arcgis-scene 组件上通过 environment 配置 lighting(directShadowsEnabled、date)、atmosphereEnabled、starsEnabled。
阴影与光照
- 启用直接阴影并设置日期,例如: view.environment = { lighting: { directShadowsEnabled: true, date: new Date("Sun Mar 15 2019 16:00:00 GMT+0100") } };
- 可动态更新光照时间:view.environment.lighting.date = new Date(dateString)。
- 切换符号阴影:通过克隆 renderer 并设置 clone.symbol.symbolLayers.getItemAt(0).castShadows = true。
- 高亮阴影颜色:使用 HighlightOptions(name、color、shadowColor),并可动态修改 shadowColor。
- 虚拟光照:lighting.type = "virtual",用于不依赖太阳位置的一致光照。
透明背景
- 需设置 alphaCompositingEnabled: true。
- 通过 background 使用 RGBA 颜色,如 color: [255, 252, 244, 0];也可克隆背景色并将 a 设为 0 实现透明。
地下导航
- 设置 ground.navigationConstraint = { type: "none" } 允许镜头进入地下。
- 设置 ground.opacity(如 0.4)让地面半透明。
- 可在无底图时设置 ground.surfaceColor。
- 可通过 goTo 的 position.z 为负值导航到地下视点。
局部场景模式
- 使用 viewing-mode="local",并配合裁剪范围(clippingArea 与 extent)。
- 局部场景通常禁用 atmosphereEnabled 与 starsEnabled。
高程信息
支持 elevationInfo 的多种模式:on-the-ground、relative-to-ground、relative-to-scene、absolute-height。可设置 offset 与 unit(如 meters),也可通过 featureExpressionInfo.expression 使用表达式调整 Z 值。注意 on-the-ground 会忽略 offset 与表达式设置。
截图
- viewElement.takeScreenshot({ format: "png" }) 获取整图或指定 area 区域截图。
- 可配合 arcgisViewDrag 事件实现拖拽选区截图。
- 提供 downloadImage 函数将 dataUrl 下载为文件。
大气与星空
在同一 environment 中控制 atmosphereEnabled 与 starsEnabled,可关闭以实现干净可视化。
视角约束与焦点区域
- 通过 constraints.altitude 设置相机最小/最大高度。
- 使用 FocusArea 定义关注区域几何、outline 颜色、id 与 title,并可设置 style 为 "bright" 或 "dark",也可通过 enabled 开关或 SketchViewModel 更新几何。
使用方式
该技能以示例代码为主,示例中同时演示了核心 API(SceneView 类)与 Map 组件(arcgis-scene 自定义元素)两种用法。Map 组件通过 viewOnReady() 等待视图就绪后访问 viewElement.environment、viewElement.map、viewElement.clippingArea 等属性。TypeScript 场景中使用 autocasting,建议配合 as const 以获得类型安全。
适用场景
适用于需要在三维场景中做精细化视觉控制的开发,例如:阴影与光照随时间变化的表达、透明背景叠加、地下与地面以下视角浏览、局部场景裁剪展示、基于属性表达式的高程夸张、以及带框选的场景截图导出。
限制与注意事项
- 透明背景必须设置 alphaCompositingEnabled: true。
- 局部场景需要裁剪范围,且通常需禁用大气与星空。
- 地下导航必须设置 ground.navigationConstraint.type = "none"。
- directShadowsEnabled 可能影响性能。
- on-the-ground 模式下 offset 与表达式设置会被忽略。
- 外部图层可能因跨域(CORS)原因导致截图失败。
暂未提供
该技能的收费、价格、具体平台支持范围、许可方式等信息暂未提供。