在场景后面绘制任意 CSS background-image 值,渐变或图像,方法是使场景的清除颜色透明并为画布设置样式。
CSS 背景图像值
已应用的样式
在场景后面沿给定方向绘制两种颜色之间的直线渐变,色标以沿该方向的百分比表示。
两种颜色、方向和两个色标位置
已应用的样式
在场景后面绘制两种颜色之间的圆形渐变,从 position 以给定的 shape 向外扩散,色标以距中心的百分比表示。
两种颜色、中心位置、两个色标位置和形状
已应用的样式
在场景后面绘制经过多种颜色的直线渐变,每种颜色有自己的色标百分比;colors 和 stops 的长度必须相同,否则返回一个错误对象。
颜色、各自的色标位置和方向
已应用的样式,或当列表长度不一致时的错误信息
在场景后面绘制经过多种颜色的圆形渐变,每种颜色有自己的色标百分比;colors 和 stops 的长度必须相同,否则返回一个错误对象。
颜色、各自的色标位置、中心位置和形状
已应用的样式,或当列表长度不一致时的错误信息
在场景后面显示一张图像,并用 CSS 背景选项控制它如何重复、缩放、定位和滚动;场景的清除颜色变为透明,使图像透出来。
图像 URL 以及重复、尺寸、位置、附着、原点和裁剪选项
已应用的样式
bitbybit.babylon.scene.canvasBackgroundImage({ imageUrl: "https://example.com/backdrop.jpg", repeat: Bit.Inputs.Base.backgroundRepeatEnum.noRepeat, size: Bit.Inputs.Base.backgroundSizeEnum.cover, position: Bit.Inputs.Base.gradientPositionEnum.center, attachment: Bit.Inputs.Base.backgroundAttachmentEnum.scroll, origin: Bit.Inputs.Base.backgroundOriginClipEnum.paddingBox, clip: Bit.Inputs.Base.backgroundOriginClipEnum.borderBox });
使某个相机成为场景渲染所通过的相机,并分离之前活动相机的控制。
要激活的相机
const camera = bitbybit.babylon.camera.arcRotate.create({ radius: 20, target: [0, 0, 0], alpha: 45, beta: 70, lowerBetaLimit: 1, upperBetaLimit: 179, angularSensibilityX: 1000, angularSensibilityY: 1000, panningSensibility: 1000, wheelPrecision: 3, maxZ: 1000 });
bitbybit.babylon.scene.activateCamera({ camera });
给出场景当前渲染所通过的相机。
当前激活的相机
重新定位默认的公转相机(名为 Camera 的那个),并设置其限制和灵敏度。
相机被放置在 position 处注视 lookAt;半径、alpha 和 beta 的限制约束它可以缩放和公转的范围,角度以度为单位,灵敏度设置它的响应速度,越低越快。
位置、目标以及可选的限制和灵敏度
bitbybit.babylon.scene.adjustActiveArcRotateCamera({ position: [20, 20, 20], lookAt: [0, 0, 0], lowerRadiusLimit: 5, upperRadiusLimit: 100, lowerBetaLimit: 1, upperBetaLimit: 179, angularSensibilityX: 1000, angularSensibilityY: 1000, panningSensibility: 1000, wheelPrecision: 3, maxZ: 1000 });
用内置天空盒之一包围场景,并将其用作反射材质所采用的环境光照。
blur 柔化可见的天空,environmentIntensity 缩放它照亮场景的程度,hideSkybox 保留光照但隐藏天空本身。
内置天空盒及其尺寸、模糊度、环境强度和可见性
用从你自己的纹理加载的天空盒包围场景,并将其用作环境光照。
textureUrl 可以指向 .hdr 文件、.env 文件或六张立方体面图像的根路径;没有它时什么也不发生。hideSkybox 保留光照但隐藏天空本身。
纹理 URL 和尺寸、天空盒尺寸、模糊度、环境强度和可见性
用从你自己加载的立方体纹理构建的天空盒包围场景,并将其用作环境光照。
texture 可以来自 .hdr 或 .env 文件。hideSkybox 保留光照但隐藏天空本身;enableGroundProjection 将天空的下部压平为模型所站立的地面。
立方体纹理、天空盒尺寸、模糊度、环境强度、可见性和地面投影
const texture = new BABYLON.CubeTexture("https://example.com/env/studio", bitbybit.babylon.scene.getScene());
bitbybit.babylon.scene.enableSkyboxFromTexture({ texture, size: 1000, blur: 0.1, environmentIntensity: 0.7, hideSkybox: false, enableGroundProjection: true, projectedGroundRadius: 20, projectedGroundHeight: 3 });
将远处的几何渐隐为一种颜色,就像雾霾一样。
linear 从 start 到 end 渐隐,以场景单位表示;exponential 和 exponentialSquared 改为按 density 渐隐,忽略距离;none 关闭雾。
雾的模式、颜色、密度以及起始和结束距离
像 drawPointLight 一样向场景添加点光源,但不返回它;适用于只需要光源存在的脚本。
灯光的位置、颜色、强度、灯泡半径和阴影设置
bitbybit.babylon.scene.drawPointLightNoReturn({ position: [10, 20, 10], intensity: 2000, diffuse: "#ffffff", specular: "#ffffff", radius: 0.5, enableShadows: true, shadowGeneratorMapSize: 1024, shadowDarkness: 0, transparencyShadow: false, shadowUsePercentageCloserFiltering: true, shadowContactHardeningLightSizeUVRatio: 0.2, shadowBias: 0.0001, shadowNormalBias: 0.002, shadowMaxZ: 1000, shadowMinZ: 0.1, shadowRefreshRate: 1 });
列出通过本库创建的光源的阴影生成器,每个启用了阴影的光源一个;绘制的网格会作为投射体注册到它们。
阴影生成器,或空列表
添加一个从某点向各个方向发光的光源,像灯泡一样,在其位置可选地带一个发光的小球。
enableShadows 为 true 时会创建阴影生成器,场景中已有的每个网格都投射和接收阴影;intensity 是光通量,因此数千的值是正常的。
灯光的位置、颜色、强度、灯泡半径和阴影设置
点光源
const light = bitbybit.babylon.scene.drawPointLight({ position: [10, 20, 10], intensity: 2000, diffuse: "#ffffff", specular: "#ffffff", radius: 0.5, enableShadows: true, shadowGeneratorMapSize: 1024, shadowDarkness: 0, transparencyShadow: false, shadowUsePercentageCloserFiltering: true, shadowContactHardeningLightSizeUVRatio: 0.2, shadowBias: 0.0001, shadowNormalBias: 0.002, shadowMaxZ: 1000, shadowMinZ: 0.1, shadowRefreshRate: 1 });
像 drawDirectionalLight 一样向场景添加平行光,但不返回它;适用于只需要光源存在的脚本。
灯光的方向、颜色、强度和阴影设置
bitbybit.babylon.scene.drawDirectionalLightNoReturn({ direction: [-100, -100, -100], intensity: 0.5, diffuse: "#ffffff", specular: "#ffffff", enableShadows: true, shadowGeneratorMapSize: 1024, shadowDarkness: 0, transparencyShadow: false, shadowUsePercentageCloserFiltering: true, shadowContactHardeningLightSizeUVRatio: 0.2, shadowBias: 0.0001, shadowNormalBias: 0.002, shadowMaxZ: 1000, shadowMinZ: 0, shadowRefreshRate: 1 });
添加一个沿 direction 处处以相同方式照射的光源,像太阳一样。
enableShadows 为 true 时会创建阴影生成器,场景中已有的每个网格都投射和接收阴影;intensity 是一个普通系数,1 为全强度。
灯光的方向、颜色、强度和阴影设置
平行光
const sun = bitbybit.babylon.scene.drawDirectionalLight({ direction: [-100, -100, -100], intensity: 0.5, diffuse: "#ffffff", specular: "#ffffff", enableShadows: true, shadowGeneratorMapSize: 1024, shadowDarkness: 0, transparencyShadow: false, shadowUsePercentageCloserFiltering: true, shadowContactHardeningLightSizeUVRatio: 0.2, shadowBias: 0.0001, shadowNormalBias: 0.002, shadowMaxZ: 1000, shadowMinZ: 0, shadowRefreshRate: 1 });
在 BabylonJS 默认使用的左手坐标系和右手坐标系之间切换场景,右手系是大多数 CAD 工具和 glTF 的约定;活动相机会被刷新以匹配。
是否使用右手坐标系
作为整体的 BabylonJS 场景:活动相机及其限制、带阴影的灯光、天空盒和环境光照、雾、物理、指针事件、画布背景以及清除所有已绘制内容。场景容纳每个网格、灯光和相机;大多数脚本只在设置光照和相机时接触它一次,然后向其中绘制。