Recent breakthroughs in text-to-image synthesis have been driven by diffusion models trained on billions of image-text pairs. Adapting this approach to 3D synthe- sis would require large-scale datasets of labeled 3D data and efficient architectures for denoising 3D data, neither of which currently exist. In this work, we circum- vent these limitations by using a pretrained 2D text-to-image diffusion model to perform text-to-3D synthesis. We introduce a loss based on probability density distillation that enables the use of a 2D diffusion model as a prior for optimization of a parametric image generator. Using this loss in a DeepDream-like procedure, we optimize a randomly-initialized 3D model (a Neural Radiance Field, or NeRF) via gradient descent such that its 2D renderings from random angles achieve a low loss. The resulting 3D model of the given text can be viewed from any angle, relit by arbitrary illumination, or composited into any 3D environment. Our approach requires no 3D training data and no modifications to the image diffusion model, demonstrating the effectiveness of pretrained image diffusion models as priors. See dreamfusion3d.github. io for a more immersive view into our 3D results.
(最近文本到图像合成的突破是由数十亿图像-文本对上训练的扩散模型驱动的。 将这种方法应用于三维合成需要大规模的标记三维数据集和有效的三维数据去噪体系结构,而这两者目前都不存在。 在这项工作中,我们通过使用一个预先训练的2D文本到图像扩散模型来执行文本到3D的合成,从而规避了这些限制。 我们引入了一种基于概率密度蒸馏的损失,它使得可以使用二维扩散模型作为参数图像生成器优化的先验。 在类似于DeepDream的过程中利用这种损失,我们通过梯度下降优化随机初始化的三维模型(神经辐射场,或NERF),使其从随机角度的2D渲染达到低损失。 生成的给定文本的三维模型可以从任何角度观看,可以通过任意光照进行重置,也可以合成到任何三维环境中。 我们的方法不需要三维训练数据,也不需要修改图像扩散模型,证明了预先训练的图像扩散模型作为先验信息的有效性。 请参见:)
图1:DreamFusion使用预先训练好的文本到图像扩散模型,根据文本提示生成逼真的3D模型。渲染的3D模型从两个视图呈现,无纹理的渲染和右边的法线。
文章思路:用从2D扩散模型的蒸馏中得到的损失来代替CLIP。我们的损失是基于概率密度蒸馏,最小化基于前向扩散过程的具有共享均值的高斯分布族与通过预先训练的扩散模型学习的得分函数之间的KL散度。所得到的分数蒸馏采样(SDS)方法使得能够经由可微分图像参数化中的优化进行采样。通过将SDS与针对此3D生成任务定制的NeRF变体相结合,DreamFusion为用户提供的各种文本提示生成高保真连贯的3D对象和场景。
用(加权)证据下界(ELBO)训练生成模型,简化为参数φ的加权去噪得分匹配目标(Ho et al., 2020; Kingma et al., 2021):
L D i f f ( ϕ , x ) = E t ∼ U ( 0 , 1 ) , ϵ ∼ N ( 0 , I ) [ w ( t ) ∥ ϵ ϕ ( α t x + σ t ϵ ; t ) − ϵ ∥ 2 2 ] ( 1 ) \mathcal{L}_{\mathrm{Diff}}(\phi,\mathbf{x})=\mathbb{E}_{t\sim\mathcal{U}(0,1),\epsilon\sim\mathcal{N}(\mathbf{0},\mathbf{I})}\left[w(t)\|\epsilon_\phi(\alpha_t\mathbf{x}+\sigma_t\epsilon;t)-\epsilon\|_2^2\right]\:\quad(1) LDiff(ϕ,x)=Et∼U(0,1),ϵ∼N(0,I)[w(t)∥ϵϕ(αtx+σtϵ;t)−ϵ∥22](1)
其中 w ( t ) w(t) w(t)是取决于时间步长 t t t的加权函数。扩散模型训练由此可以被视为学习潜变量模型(Sohl-Dickstein等人,2015年; Ho等人,2020),或者学习与数据的噪声版本相对应的分数函数序列(Vincent, 2011; Song & Ermon, 2019; Song et al., 2021).。我们将使用 p ϕ ( z t ; t ) p_{\phi}(\mathbf{z}_{t};t) pϕ(zt;t)表示近似的边缘分布,其得分函数由 s ϕ ( z t ; t ) = − ϵ ϕ ( z t ; t ) / σ t . \:s_{\phi}(\textbf{z}_t;t)=-\epsilon_{\phi}(\textbf{z}_t;t)/\sigma_t.\: sϕ(zt;t)=−ϵϕ(zt;t)/σt.。
我们的工作建立在文本到图像扩散模型的基础上,该模型学习 ϵ ϕ ( z t ; t , y ) \epsilon_\phi(\mathbf{z}_t;t,y) ϵϕ(zt;t,y),条件是文本嵌入 y y y (Saharia et al., 2022; Ramesh et al., 2022; Nichol et al., 2022)。这些模型使用无分类器指导(CFG,Ho & Salimans,2022),其联合学习无条件模型以通过指导尺度参数ω实现更高质量的生成: ω : ϵ ^ ϕ ( z t ; y , t ) = ( 1 + ω ) ϵ ϕ ( z t ; y , t ) − ω ϵ ϕ ( z t ; t ) {\omega}\colon\hat{\epsilon}_{\phi}(\mathbf{z}_{t};y,t)=(1+\omega)\epsilon_{\phi}(\mathbf{z}_{t};y,t)-\omega\epsilon_{\phi}({\mathbf{z}_{t}};t) ω:ϵ^ϕ(zt;y,t)=(1+ω)ϵϕ(zt;y,t)−ωϵϕ(zt;t)。CFG改变评分函数以优选其中条件密度与无条件密度的比率大的区域。
在实践中,设置 ω > 0 ω>0 ω>0以多样性为代价提高了样本保真度。我们始终使用 ϵ ^ \hat{\epsilon} ϵ^和 p ^ \hat{p} p^来表示噪声预测和边际分布的指导版本。
图2:文本到图像扩散模型的2D采样方法比较,文本为“一张穿毛衣的树蛙的照片”。对于分数蒸馏采样,作为示例,我们使用图像生成器,其通过使 x = ( f l i p ( θ , ) θ ) x=(flip(\theta,)\theta) x=(flip(θ,)θ)将图像限制为对称的。
现有的从扩散模型中抽样的方法生成的样本与模型训练所用的观察数据具有相同的类型和维度。 尽管条件扩散采样具有相当大的灵活性(例如修复),但在像素上训练的扩散模型传统上只用于采样像素。 我们对采样像素不感兴趣;
相反,我们希望创建从随机角度渲染时看起来像好的图像的 3D 模型。 此类模型可以指定为可微分图像参数化,其中可微分生成器 g g g 转换参数 θ \theta θ 以创建图像 x = g ( θ ) x = g(\theta) x=g(θ)。 DIP 允许我们表达约束,在更紧凑的空间中进行优化(例如,基于任意分辨率坐标的 MLP),或利用更强大的优化算法来遍历像素空间。 对于 3D,我们让 θ \theta θ 为 3D 体积的参数, g g g 为体积渲染器。 为了学习这些参数,我们需要一个可以应用于扩散模型的损失函数。
我们的方法利用扩散模型的结构通过优化实现易于处理的采样——一种损失函数,当最小化时,会产生一个样本。 我们优化参数 θ \theta θ,使 x = g ( θ ) x = g(\theta) x=g(θ) 看起来像来自冻结扩散模型的样本。为了执行该优化,我们需要可微损失函数,其中似真图像具有低损失,并且不可信图像具有高损失,以类似于DeepDream的风格。我们首先研究了重复使用扩散训练损失(等式1)找到学习的条件密度 p ( X ∣ y ) p(X|y) p(X∣y)。
重新使用扩散训练损失(等式1)找到学习的条件密度 p ( X ∣ y ) p(X|y) p(X∣y)。虽然高维度中的生成模型的模式通常远离典型样本(Nalisnick等人,2018),扩散模型训练的多尺度性质可能有助于避免这些病理。最小化关于生成的数据点 x = g ( θ ) x = g(\theta) x=g(θ) 的扩散训练损失给出 θ ∗ = a r g m i n θ L D i f f ( ϕ , x = = g ( θ ) ) \theta^{*}=\mathrm{argmin}_{\theta}\mathcal{L}_{\mathrm{Diff}}(\phi,\mathbf{x}=={g(\theta)}) θ∗=argminθLDiff(ϕ,x==g(θ))。在实践中,我们发现,即使使用单位DIP(其中x = θ),该损失函数也不会产生真实的样本。Graikos等人(2022)的并行工作表明,这种方法可以与精心选择的时间步长计划一起工作,但我们发现这个目标很脆弱,其时间步长计划难以调整。
为了理解这种方法的困难,考虑 L D i f f \mathcal{L}_{\mathrm{Diff}} LDiff的梯度:
∇ θ L D i f f ( ϕ , x = g ( θ ) ) = E t , ϵ [ w ( t ) ( ϵ ^ ϕ ( z i ; y , t ) − ϵ ) ⏟ N o i s e R e s i d u a l ∂ ϵ ^ ϕ ( z t ; y , t ) z t ⏟ U − N e t J a c o b i a n ∂ x ∂ θ ⏟ G e n e r a t o r J a c o b i a n ] ( 2 ) \nabla_{\theta}\mathcal{L}_{\mathrm{Diff}}(\phi,\mathbf{x}=g(\theta))=\mathbb{E}_{t,\epsilon}\left[w(t)\underbrace{(\hat\epsilon_{\phi}(\mathbf{z}_i;y,t)-\epsilon)}_{\mathrm{Noise\ \ Residual}}\underbrace{\frac{\partial\hat{\epsilon}_{\phi}(\mathbf{z}_t;y,t)}{\mathbf{z}_{t}}}_{U-Net Jacobian}\underbrace{\frac{\partial\mathbf{x}}{\partial\theta}}_{\mathrm{Generator Jacobian}}\right]\quad(2) ∇θLDiff(ϕ,x=g(θ))=Et,ϵ w(t)Noise Residual (ϵ^ϕ(zi;y,t)−ϵ)U−NetJacobian zt∂ϵ^ϕ(zt;y,t)GeneratorJacobian ∂θ∂x (2)
其中我们将常数 α t I = ∂ z t / ∂ x \alpha_{t}\mathbf{I}=\partial\mathbf{z}_{t}/\partial\mathbf{x} αtI=∂zt/∂x吸收到 w ( t ) w(t) w(t)中。在实践中,U-Net雅可比项计算起来很昂贵(需要通过扩散模型U-Net反向传播),并且由于其被训练为近似边缘密度的缩放Hessian,因此对于小噪声水平条件很差。我们发现,省略U-Net雅可比项会导致使用扩散模型优化DIP的有效梯度:
∇ θ L S D S ( ϕ , x = g ( θ ) ) ≜ E t , ϵ [ w ( t ) ( ϵ ^ ϕ ( z t ; y , t ) − ϵ ) ∂ x ∂ θ ] ( 3 ) \nabla_\theta\mathcal{L}_{\mathrm{SDS}}(\phi,\mathbf{x}=g(\theta))\triangleq\mathbb{E}_{t,\epsilon}\left[w(t)\left(\hat{\epsilon}_\phi(\mathbf{z}_t;y,t)-\epsilon\right)\dfrac{\partial\mathbf{x}}{\partial\theta}\right]\quad(3) ∇θLSDS(ϕ,x=g(θ))≜Et,ϵ[w(t)(ϵ^ϕ(zt;y,t)−ϵ)∂θ∂x](3)
直观地,该损失用对应于时间步长t的随机量的噪声扰动X,并且估计遵循扩散模型的得分函数的更新方向以移动到更高密度区域。虽然用于学习具有扩散模型的DIP的该梯度可能显得特别,但是在附录A.4中,我们表明它是加权概率密度蒸馏损失的梯度使用从扩散模型学习的得分函数:
∇ θ L S D S ( ϕ , x = g ( θ ) ) = ∇ θ E t [ σ t / α t w ( t ) K L ( q ( z t ∣ g ( θ ) ; y , t ) ∥ p ϕ ( z t ; y , t ) ) ] . ( 4 ) \nabla_\theta\mathcal{L}_{\mathrm{SDS}}(\phi,\mathbf{x}=g(\theta))=\nabla_\theta\mathbb{E}_t\left[\sigma_t/\alpha_t w(t)\mathrm{KL}(q(\mathbf{z}_t|g(\theta);y,t)\|p_\phi(\mathbf{z}_t;y,t))\right].\quad(4) ∇θLSDS(ϕ,x=g(θ))=∇θEt[σt/αtw(t)KL(q(zt∣g(θ);y,t)∥pϕ(zt;y,t))].(4)
我们将我们的采样方法命名为分数蒸馏采样(SDS),因为它与蒸馏有关,但使用分数函数而不是密度。我们将其称为采样器,因为变分族 q ( Z t ∣ ⋯ ) q(Z_t|\cdots) q(Zt∣⋯)当 t → 0 t → 0 t→0时消失,变分分布 g ( θ ) g(\theta) g(θ)的平均参数成为感兴趣的样本。我们的损失很容易实现(见图8),并且对加权 w ( t ) w(t) w(t)的选择相对稳健。
图8:Score Distillation Sampling的伪代码,其中包含一个特定于应用程序的生成器,该生成器定义了从参数到图像的可区分映射。梯度g的计算不需要通过扩散模型的U-网络进行反向传播。我们用stopgradient算子来表示损失但是参数更新也可以利用显式VJP容易地计算:g = matmul(weight(t) * (-epshat t - eps), grad(x, params)).。
由于扩散模型直接预测更新方向,我们不需要通过扩散模型反向传播;该模型简单地充当预测图像空间编辑的有效的、冻结的批评者。
图3:DreamFusion从自然语言标题生成3D对象,例如“a DSLR photo ofa peacock on a surfboard.”场景由一个神经辐射场表示,该辐射场是随机初始化的,并针对每个字幕从头开始训练。我们的NeRF使用MLP参数化体积密度和反照率(颜色)。我们从一个随机的摄像机渲染NeRF,使用从密度梯度计算的法线,以随机的光照方向对场景进行着色。着色显示从单个视点看不明确的几何细节。为了计算参数更新,DreamFusion扩散渲染,并使用(冻结)条件Imagen模型重建渲染,以预测注入的噪声 ϵ ^ ϕ ( z t ∣ y ; t ) \hat{\epsilon}_{\phi}(\mathbf{z}_{t}|y;t) ϵ^ϕ(zt∣y;t)。这包含应该提高保真度的结构,但方差很高。减去注入噪声产生低方差更新方向stopgrad [ ϵ ^ ϕ − ϵ ] [\hat{\epsilon}_{\phi}-\epsilon] [ϵ^ϕ−ϵ],通过渲染过程反向传播以更新NeRF MLP参数。
现在我们已经演示了如何将扩散模型用作通用连续优化问题中的损失以生成样本,我们将构建特定的算法,该算法允许我们从文本生成3D物体。对于扩散模型,我们使用Saharia等人(2022)的Imagen模型,该模型已经过训练,可以从文本合成图像。我们仅使用64×64基本模型(而不是用于生成更高分辨率图像的超分辨率级联),并按原样使用此预训练模型,不做任何修改。为了从文本合成场景,我们用随机权重初始化一个NeRF模型,然后从随机的相机位置和角度重复渲染NeRF的视图,使用这些渲染作为我们的分数蒸馏损失函数的输入,该函数围绕Imagen。正如我们将展示的那样,使用这种方法的简单梯度下降最终会产生类似于文本的3D模型(参数化为NeRF)。关于我们的方法的概述,参见图3。
NeRF是一种用于神经逆渲染的技术,其由体积光线跟踪器和多层感知器(MLP)组成。从NeRF渲染图像是通过从相机的投影中心投射每个像素的光线通过像素在图像平面中的位置并向外投射到世界中来完成的。沿着每条射线采样的3D点 μ \mu μ然后通过MLP,其产生4个标量值作为输出体积密度 τ \tau τ(在该3D坐标处的场景几何形状有多不透明)和RGB颜色c。然后,从光线的背面向相机对这些密度和颜色进行alpha合成,生成像素的最终渲染RGB值:
C = ∑ i w i c i , w i = α i ∏ j < i ( 1 − α j ) , α i = 1 − exp ( − τ i ∥ μ i − μ i + 1 ∥ ) , ( 5 ) \mathbf{C}=\sum_i w_i\mathbf{c}_i,\quad w_i=\alpha_i\prod_{jC=i∑wici,wi=αij<i∏(1−αj),αi=1−exp(−τi∥μi−μi+1∥),(5)
在传统的NeRF用例中,我们给出了输入图像和相关联的相机位置的数据集,并且NeRF MLP使用每个像素的渲染颜色和来自输入图像的对应地面真实颜色之间的均方误差损失函数从随机初始化进行训练。这产生了一个3D模型(由MLP的权重参数化),可以从以前看不见的视图中产生逼真的渲染。我们的模型建立在mip-NeRF 360(巴伦等人,2022),这是NeRF的改进版本,其减少了混叠。虽然mip-NeRF 360最初是为从图像进行3D重建而设计的,但它的改进也有助于我们的生成文本到3D任务(详见附录)。
Shading.传统的NeRF模型发射辐射,其是以观察3D点的光线方向为条件的RGB颜色。相比之下,我们的MLP参数化表面本身的颜色,然后由我们控制的照明照亮(通常称为“着色”的过程)。使用NeRF类模型的生成或多视图3D重建的先前工作已经提出了各种反射模型(Bi等人,2020; Boss等人,2021年; Srinivasan等人,2021; Pan等人,2022年)。我们对每个点使用RGB反照率ρ(材质的颜色):
( τ , ρ ) = M L P ( μ ; θ ) , ( 6 ) (\tau,\boldsymbol{\rho})=\mathrm{MLP}(\boldsymbol{\mu};\theta),\quad(6) (τ,ρ)=MLP(μ;θ),(6)
其中 τ \tau τ是体积密度。计算3D点的最终着色输出颜色需要指示对象几何体的局部方向的法向量。该表面法向量可以通过相对于3D坐标 μ \mu μ归一化密度 τ \tau τ的负梯度来计算: n = − ∇ μ τ / ∥ ∇ μ τ ∥ \boldsymbol{n}=-{\nabla}_{\boldsymbol{\mu}}\tau/\left\|{\nabla}_{\boldsymbol{\mu}}\tau\right\| n=−∇μτ/∥∇μτ∥(Yariv等人,2020年; Srinivasan等人,2021年)。对于每个法线n和材料反照率ρ,假设某个点光源具有3D坐标 l l l和颜色 l p l_p lp,以及环境光颜色 l a l_a la,我们使用漫反射来渲染沿着光线的每个点(Lambert,1760;Ramamoorthi & Hanrahan,2001)来为每个点产生颜色c:
c = ρ ∘ ( ℓ ρ ∘ max ( 0 , n ⋅ ( ℓ − μ ) / ∥ ℓ − μ ∥ ) + ℓ a ) . ( 7 ) \mathbf c=\boldsymbol\rho\circ\left(\boldsymbol\ell_\rho\circ\max\left(0,\boldsymbol n\cdot\left(\boldsymbol\ell-\boldsymbol\mu\right)/\left\|\boldsymbol\ell-\boldsymbol\mu\right\|\right)+\boldsymbol\ell_a\right).\quad(7) c=ρ∘(ℓρ∘max(0,n⋅(ℓ−μ)/∥ℓ−μ∥)+ℓa).(7)
利用这些颜色和我们先前生成的密度,我们用标准NeRF中使用的相同渲染权重wi来近似体渲染积分(等式5)。如先前关于文本到3D生成的工作(Hong等人,2022; Michel等人,2021),我们发现用白色(1,1,1)随机替换反照率颜色 ρ ρ ρ以产生“无纹理”着色输出是有益的。这防止模型产生退化解决方案,其中场景内容被绘制到平面几何体上以满足文本条件。例如,这鼓励优化以产生3D松鼠而不是包含松鼠图像的平坦表面,这两者从某些视角和照明条件看起来可能是相同的。
Scene Structure.虽然我们的方法可以生成一些复杂的场景,但我们发现,仅查询固定边界球体内的NeRF场景表示,并使用从第二MLP生成的环境图来计算背景颜色是有帮助的,该第二MLP将位置编码的光线方向作为输入。我们使用累积的alpha值在此背景颜色之上合成渲染的光线颜色。这可以防止NeRF模型以非常接近相机的密度填充空间,同时仍然允许它在生成的场景后面绘制适当的颜色或背景。为了生成单个对象而不是场景,减小的边界球体可能是有用的。
**Geometry regularizers.**我们构建的mip-NeRF 360模型包含许多其他细节,为了简洁起见,我们省略了这些细节。类似于Jain et al.(2022),我们在每条射线沿着不透明度上加入了正则化惩罚,以防止不必要地填充空白空间。为了防止其中法向量背向相机的密度场中的病变,我们使用Ref-NeRF(Verbin等人,2022年)。当包括无纹理着色时,此代价非常重要,因为密度场将尝试将法线定向为远离摄影机,从而使着色变得更暗。关于NeRF的这些正则化子和其他超参数的全部细节见附录A.2。
给定预训练的文本到图像扩散模型、NeRF形式的可微分图像参数化以及最小值是良好样本的损失函数,我们拥有不使用 3D 数据进行文本到 3D 合成所需的所有组件。 对于每个文本提示,我们训练一个随机初始化的 NeRF从头开始。 DreamFusion 优化的每次迭代执行以下操作:
1.随机相机和光线采样。 在每次迭代中,相机位置在球坐标中随机采样,仰角 ϕ c a m ∈ [ − 10 ° , 90 ° ] \phi_{cam} ∈ [−10°, 90°] ϕcam∈[−10°,90°],方位角 θ c a m ∈ [ 0 ° , 360 ° ] \theta_{cam} ∈ [0°, 360°] θcam∈[0°,360°],与原点的距离在 [1, 1.5] ]. 作为参考,前面描述的场景包围球的半径为 1.4。 我们还对原点周围的“观察”点和“向上”向量进行了采样,并将它们与相机位置相结合以创建相机姿势矩阵。 我们还对焦距乘数 λ f o c a l ∈ U ( 0.7 , 1.35 ) \lambda_{focal} ∈ \mathcal{U}(0.7, 1.35) λfocal∈U(0.7,1.35) 进行采样,使得焦距为 λ f o c a l w \lambda_{focal}w λfocalw,其中 w = 64 是以像素为单位的图像宽度。 点光源位置 l l l 从以相机位置为中心的分布中采样。 我们发现使用大范围的相机位置对于合成连贯的 3D 场景至关重要,并且大范围的相机距离有助于提高学习场景的分辨率。
2.渲染。给定相机姿态和灯光位置,我们以64 × 64分辨率渲染阴影NeRF模型,如第3.1节所述。我们在照明颜色渲染、无纹理渲染和无任何阴影的反照率渲染之间随机选择。
3.具有视图相关条件的扩散损失。文本提示通常描述对象的规范视图,而在对不同视图进行采样时,这些规范视图不是很好的描述。因此,我们发现基于随机采样的相机的位置将视图相关文本附加到所提供的输入文本是有益的。对于高仰角 ϕ c a m > 60 ° \phi_{cam}>60° ϕcam>60°,我们附加“俯视图”。对于 ϕ c a m ≤ 6 0 ∘ \phi_{\mathrm{cam}}\leq60^{\circ} ϕcam≤60∘,我们使用文本嵌入的加权组合,根据方位角 θ c a m \theta_{cam} θcam的值附加“前视图”、“侧视图”或“后视图”(详见附录A.2)。我们使用Saharia等人(2022)的预训练的64 × 64基础文本到图像模型。该模型在大规模网络图像文本数据上进行训练,并且以T5-XXL文本嵌入为条件(Raffel等人,2020年)。我们使用加权函数 w ( t ) = σ t 2 w(t)=\sigma_{t}^{2} w(t)=σt2,但发现均匀加权执行类似。我们对 t ∼ U ( 0.02 , 0.98 ) t ∼ U ( 0.02 , 0.98 ) t\sim\mathcal{U}(0.02,0.98)t\sim\mathcal{U}(0.02,0.98) t∼U(0.02,0.98)t∼U(0.02,0.98)进行采样,避免了由于数值不稳定性而导致的非常高和非常低的噪声水平。对于无分类器指导,我们设置 ω = 100 ω = 100 ω=100,发现更高的指导权重给予提高样本质量。这比图像采样方法大得多,并且可能是由于我们的目标的模式搜索性质而需要的,这导致在小的引导权重下的过度平滑(参见附录表九)。给定渲染的图像和采样的时间步长t,我们对噪声进行采样,并根据等式1计算NeRF参数的梯度3.
噪声进行采样,并根据等式1计算NeRF参数的梯度3.
图4:DreamFusion可用于创建和优化3D场景。在这里,我们迭代地优化一个示例文本提示,同时从四个不同的视点渲染每个生成的场景。