查看原文
其他

北京CBD夜景灯光特效还可以这么美,四步教你实现!

超图知道 超图集团 2022-07-17
SuperMap iClient3D for WebGL默认的光照系统,能够满足大多数情况下的需求。但在一些特殊的场景中,需要对场景内的光照系统进行个性化设置,这时就可以使用自定义光源来实现。本文以北京CBD夜景为例,介绍如何通过多种自定义光源来打造城市夜景灯光特效。 先来看看最终实现的北京CBD夜景灯光特效。


实现这样的灯光特效很简单,只需要四步哦!


第一步 因为是夜景,首先关闭太阳光与环境光

scene.sun.show false;

scene.lightSource.ambientLightColor new Cesium.Color(0001);


第二步 给场景添加一个平行光和点光源作为底光
平行光位置不限,保证整个场景都能有一个偏蓝的色调。点光源的置于重点建筑群附近,提升该区域的亮度,作为整个场景的视觉中心区域。


// 新增直射光-整个环境var dirLightOptions = {
    
targetPositiontargetPosition1,
    
colornew Cesium.Color(0.010.010.31.0),
    intensity0.1
};
directionalLight_v new Cesium.DirectionalLight(positiondirLightOptions);
scene.addLightSource(directionalLight_v);
// 新增点光源-整个环境var pointLightPos3 new Cesium.Cartesian3.fromDegrees(116.4647793217546839.905807158839266220.0);
var pointLightOptions3 = {
    
cutoffDistance2000,
    
colornew Cesium.Color(0.040.180.431.0),
    
intensity0.001
};
pointLight3 new Cesium.PointLight(pointLightPos3pointLightOptions3);
scene.addLightSource(pointLight3);


第三步 依次给重点建筑单独打造灯光效果
这里以场景中的最高楼-国贸大厦为例,在其周围添加多个点光源,并设置光源颜色为偏青蓝色的冷色调。点光源的高度大致位于80米处,以打亮建筑的中下部分。用同样的方法给其它重点建筑添加灯光效果。


// 新增点光源-最高建筑var pointLightPoszuigao1 new Cesium.Cartesian3.fromDegrees(116.4597656562852739.9104200931627680.0);
var pointLightOptionszuigao1 = {
    
cutoffDistance360.0,
    
colornew Cesium.Color(0.150.451.41.0),
    
intensity0.12
};
pointLightzuigao1 new Cesium.PointLight(pointLightPoszuigao1pointLightOptionszuigao1);
scene.addLightSource(pointLightzuigao1);
var pointLightPoszuigao2 new Cesium.Cartesian3.fromDegrees(116.4605985255840239.9107648811475480.0);
pointLightzuigao2 new Cesium.PointLight(pointLightPoszuigao2pointLightOptionszuigao1);
scene.addLightSource(pointLightzuigao2);
var pointLightPoszuigao3 new Cesium.Cartesian3.fromDegrees(116.4605815547631239.909594589433380.0);
pointLightzuigao3 new Cesium.PointLight(pointLightPoszuigao3pointLightOptionszuigao1);
scene.addLightSource(pointLightzuigao3);
var pointLightPoszuigao4 new Cesium.Cartesian3.fromDegrees(116.461588216339.91046059980.0);
pointLightzuigao4 new Cesium.PointLight(pointLightPoszuigao4pointLightOptionszuigao1);
scene.addLightSource(pointLightzuigao4);


第四步 给道路添加路灯效果
前面添加的灯光都是针对建筑添加的,道路上面也会有很多的路灯。这里我们通过聚光灯来模拟路灯的效果,因为路灯具有明显的方向性。由于之前添加的灯光都是冷色调的,这里给路灯设置一个比较明显的暖色调,平衡场景中的颜色分布。因为场景是支持HDR的,所以可以给光源颜色设置大于1的RGB值(6, 5, 0.2, 1)。另外给光源设置一个合适的衰减系数(3),保证灯光在向周围传播的时候逐渐减弱。


// 新增聚光灯-横向道路-路灯1var spotLightPosludeng1_1 new Cesium.Cartesian3.fromDegrees(116.4621554899723639.90774343263118630);
var spotLightTargetPosludeng1_1 new Cesium.Cartesian3.fromDegrees(116.4621554899723639.9077434326311860);
var spotLightOtionsludeng1_1 = {
    
colornew Cesium.Color(650.21),
    
distance100,
    
decay3,
    
intensity13,
    
angleMath.PI 2
};
spotLightludeng1_1 new Cesium.SpotLight(spotLightPosludeng1_1spotLightTargetPosludeng1_1spotLightOtionsludeng1_1);
scene.addLightSource(spotLightludeng1_1);
// 新增聚光灯-横向道路-路灯2var spotLightPosludeng1_2 new Cesium.Cartesian3.fromDegrees(116.4600819843743439.9077990456204230);
var spotLightTargetPosludeng1_2 new Cesium.Cartesian3.fromDegrees(116.4600819843743439.907799045620420);
spotLightludeng1_2 new Cesium.SpotLight(spotLightPosludeng1_2spotLightTargetPosludeng1_2spotLightOtionsludeng1_1);
scene.addLightSource(spotLightludeng1_2);
// 新增聚光灯-横向道路-路灯3var spotLightPosludeng1_3 new Cesium.Cartesian3.fromDegrees(116.4571893657934139.90783656137609430);
var spotLightTargetPosludeng1_3 new Cesium.Cartesian3.fromDegrees(116.4571893657934139.9078365613760940);
spotLightludeng1_3 new Cesium.SpotLight(spotLightPosludeng1_3spotLightTargetPosludeng1_3spotLightOtionsludeng1_1);
scene.addLightSource(spotLightludeng1_3);


基于以上四步,就实现了城市夜景灯光特效。


友情提示:1.每种灯光的具体用法,可以参考在线范例:http://support.supermap.com.cn:8090/webgl/examples/editor.html#lightSource2.场景中的纹理自发光,泛光等其它特效可参考特效的制作流程文档。


撰文|三维研发中心 孟宝航


【精彩阅读】

01 好书 |《大数据地理信息系统原理、技术与应用》OMG,买它买它买它!

02 一张图读懂自然保护地整合优化

03 AI也会化妆?一大波动漫风美妆地图来袭!

04 超图2019年年报一览,净利润增长超30%

05 超图致GIS教育从业人士的一封信


欢迎转载~

爱看你就点在看!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存