unity中app实现拖拽_在 Unity 中实现体积光渲染

当光线穿过胶体,由于胶体微粒对光线的散射作用,产生丁达尔现象。在实时渲染中这样的效果常称为体积光 (Volumetric Light),有时也称作上帝光 (god light)。本文将简单介绍体积光散射效果的相关原理,及在 Unity SRP 下的简单实现。本文大部分内容参考自 Real-time Rendering 4th Chapter 14 [0] 和 GDC 2016 上 Inside 开...
摘要由CSDN通过智能技术生成

当光线穿过胶体,由于胶体微粒对光线的散射作用,产生丁达尔现象。在实时渲染中这样的效果常称为体积光 (Volumetric Light),有时也称作上帝光 (god light)。

本文将简单介绍体积光散射效果的相关原理,及在 Unity SRP 下的简单实现。

本文大部分内容参考自 Real-time Rendering 4th Chapter 14 [0] 和 GDC 2016 上 Inside 开发者的 presentation [1].

本文需要的前置知识包括

  • 数学
  • 图形学
  • Unity SRP

先放个效果图

559e9c26d3a3d02d91cecc7a65192579.png

代码在 GitHub, tag: volume-light

https://github.com/SardineFish/SRP-Demos/tree/volume-light​github.com

Light Scattering

光在介质中传播,会受以下四种因素而发生改变:

  • Absorption,光线被物质吸收并由光能转化为其他能量
  • Out-scattering,光线被介质中的微粒向外散射
  • Emission,介质由于黑体辐射等因素产生自发光
  • In-scattering,从其他地方散射到当前光路上的光线

af65afde3c713924d2419ff88edac8be.png

其中,介质对光线的吸收和散射会影响光线在介质中的透射率 (transmittance)

我们可以用下式来描述一个点光源发出的光线在介质中的散射效果:

其中

表示在介质中某一位置 x 到摄像机位置 c 的光线透射率函数,
表示介质中 x 点向视线方向 v 的散射光,关于该式的详细推导见参考文献 [2]。

0142656d18815d90ae05ed23451b7d99.png

Transmittance

光线在介质中两点

间的透射率可以用下式描述

其中

该式又被称为 Beer-Lambert Law,式中

表示介质中 x 处对光线的衰减率,包括介质对光线的吸收和向外散射,即
。τ 被称为 optical depth,表示最终对光线的衰减量,没有单位。在该式下,越高的衰减率或者更长的距离,都会使得 optical depth 增大,并得到更低的光线透射率。σt 可以具有 RGB 分量,例如下图是 σt = (0.5, 1.0, 2.0) 的介质中的光线透射率与透射距离的关系,以及表现出来的散射颜色。

89ea2cf2d13ce22f3cd51c283bf34f4a.png

Scattering

在介质中的 x 处,从点光源发出的光线散射到 v 方向上的光,可以通过下式表述

where $n$ is the number of lights, p(v, l) is the phase function, v(x, p) is the visibility function,
is the direction vector to the ith light, and
is the position of the ith light. In addition,
is the radiance from the ith light as a function of the distance to its position.

Visibility Function

式中的 visibility function v(x, p) 表示从光源位置 p 到介质中位置 x 的光的通过率,可以表述为以下函数

也就是说,我们需要考虑从光源发出的光线受物体的遮挡,以及在射入到介质中 x 点所受到的衰减作用。

Phase Function

phase function 用于描述在宏观上光线在介质中经过散射到各方向上的概率分布,通常表示为入射与出射光线夹角 θ 的函数 p(θ). 因为能量守恒,phase function 在单位球上的积分必须等于1.

d3a9abf00475342130d56b9aaefceb7b.png

基于物理的 phase function 根据介质中微粒与入射光线波长的相对大小

,可以分为几种不同的散射模型
  • 时适用 Rayleigh scattering (例如空气)
  • 时适用 Mie scattering
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值