Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
imjiangjun
pbrt-v4
提交
dae7eb35
P
pbrt-v4
项目概览
imjiangjun
/
pbrt-v4
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
pbrt-v4
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
dae7eb35
编写于
11月 20, 2020
作者:
M
Matt Pharr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use FastExp() more
上级
32a96243
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
16 addition
and
17 deletion
+16
-17
src/pbrt/bssrdf.cpp
src/pbrt/bssrdf.cpp
+9
-10
src/pbrt/bxdfs.cpp
src/pbrt/bxdfs.cpp
+1
-1
src/pbrt/bxdfs.h
src/pbrt/bxdfs.h
+4
-4
src/pbrt/util/spectrum.h
src/pbrt/util/spectrum.h
+1
-1
src/pbrt/util/spectrum_test.cpp
src/pbrt/util/spectrum_test.cpp
+1
-1
未找到文件。
src/pbrt/bssrdf.cpp
浏览文件 @
dae7eb35
...
...
@@ -57,19 +57,18 @@ Float BeamDiffusionMS(Float sigma_s, Float sigma_a, Float g, Float eta, Float r)
Float
dr
=
std
::
sqrt
(
r
*
r
+
zr
*
zr
),
dv
=
std
::
sqrt
(
r
*
r
+
zv
*
zv
);
// Compute dipole fluence rate $\dipole(r)$ using Equation
// $(\ref{eq:diffusion-dipole})$
Float
phiD
=
Inv4Pi
/
D_g
*
(
std
::
exp
(
-
sigma_tr
*
dr
)
/
dr
-
std
::
e
xp
(
-
sigma_tr
*
dv
)
/
dv
);
Float
phiD
=
Inv4Pi
/
D_g
*
(
FastExp
(
-
sigma_tr
*
dr
)
/
dr
-
FastE
xp
(
-
sigma_tr
*
dv
)
/
dv
);
// Compute dipole vector irradiance $-\N{}\cdot\dipoleE(r)$ using Equation
// $(\ref{eq:diffusion-dipole-vector-irradiance-normal})$
Float
EDn
=
Inv4Pi
*
(
zr
*
(
1
+
sigma_tr
*
dr
)
*
std
::
exp
(
-
sigma_tr
*
dr
)
/
(
dr
*
dr
*
dr
)
-
zv
*
(
1
+
sigma_tr
*
dv
)
*
std
::
exp
(
-
sigma_tr
*
dv
)
/
(
dv
*
dv
*
dv
));
Float
EDn
=
Inv4Pi
*
(
zr
*
(
1
+
sigma_tr
*
dr
)
*
FastExp
(
-
sigma_tr
*
dr
)
/
(
dr
*
dr
*
dr
)
-
zv
*
(
1
+
sigma_tr
*
dv
)
*
FastExp
(
-
sigma_tr
*
dv
)
/
(
dv
*
dv
*
dv
));
// Add contribution from dipole for depth $\depthreal$ to _Ed_
Float
E
=
phiD
*
cPhi
+
EDn
*
cE
;
Float
kappa
=
1
-
std
::
e
xp
(
-
2
*
sigmap_t
*
(
dr
+
zr
));
Float
kappa
=
1
-
FastE
xp
(
-
2
*
sigmap_t
*
(
dr
+
zr
));
Ed
+=
kappa
*
rhop
*
rhop
*
E
;
}
return
Ed
/
nSamples
;
...
...
@@ -90,7 +89,7 @@ Float BeamDiffusionSS(Float sigma_s, Float sigma_a, Float g, Float eta, Float r)
Float
cosTheta_o
=
ti
/
d
;
// Add contribution of single scattering at depth $t$
Ess
+=
rho
*
std
::
e
xp
(
-
sigma_t
*
(
d
+
tCrit
))
/
(
d
*
d
)
*
Ess
+=
rho
*
FastE
xp
(
-
sigma_t
*
(
d
+
tCrit
))
/
(
d
*
d
)
*
HenyeyGreenstein
(
cosTheta_o
,
g
)
*
(
1
-
FrDielectric
(
-
cosTheta_o
,
eta
))
*
std
::
abs
(
cosTheta_o
);
}
...
...
@@ -106,8 +105,8 @@ void ComputeBeamDiffusionBSSRDF(Float g, Float eta, BSSRDFTable *t) {
// Choose albedo values of the diffusion profile discretization
for
(
int
i
=
0
;
i
<
t
->
rhoSamples
.
size
();
++
i
)
t
->
rhoSamples
[
i
]
=
(
1
-
std
::
exp
(
-
8
*
i
/
(
Float
)(
t
->
rhoSamples
.
size
()
-
1
)))
/
(
1
-
std
::
e
xp
(
-
8
));
t
->
rhoSamples
[
i
]
=
(
1
-
FastExp
(
-
8
*
i
/
(
Float
)(
t
->
rhoSamples
.
size
()
-
1
)))
/
(
1
-
FastE
xp
(
-
8
));
ParallelFor
(
0
,
t
->
rhoSamples
.
size
(),
[
&
](
int
i
)
{
// Compute the diffusion profile for the _i_th albedo sample
...
...
src/pbrt/bxdfs.cpp
浏览文件 @
dae7eb35
...
...
@@ -455,7 +455,7 @@ pstd::optional<BSDFSample> HairBxDF::Sample_f(Vector3f wo, Float uc, Point2f u,
// Sample $M_p$ to compute $\thetai$
Float
cosTheta
=
1
+
v
[
p
]
*
std
::
log
(
std
::
max
<
Float
>
(
u
[
0
],
1e-5
)
+
(
1
-
u
[
0
])
*
std
::
e
xp
(
-
2
/
v
[
p
]));
(
1
-
u
[
0
])
*
FastE
xp
(
-
2
/
v
[
p
]));
Float
sinTheta
=
SafeSqrt
(
1
-
Sqr
(
cosTheta
));
Float
cosPhi
=
std
::
cos
(
2
*
Pi
*
u
[
1
]);
Float
sinTheta_i
=
-
cosTheta
*
sinThetap_o
+
sinTheta
*
cosPhi
*
cosThetap_o
;
...
...
src/pbrt/bxdfs.h
浏览文件 @
dae7eb35
...
...
@@ -923,7 +923,7 @@ class LayeredBxDF {
static
Float
Tr
(
Float
dz
,
const
Vector3f
&
w
)
{
if
(
std
::
abs
(
dz
)
<=
std
::
numeric_limits
<
Float
>::
min
())
return
1
;
return
std
::
e
xp
(
-
std
::
abs
(
dz
/
w
.
z
));
return
FastE
xp
(
-
std
::
abs
(
dz
/
w
.
z
));
}
// LayeredBxDF Protected Members
...
...
@@ -1000,9 +1000,9 @@ class HairBxDF {
Float
sinTheta_o
,
Float
v
)
{
Float
a
=
cosTheta_i
*
cosTheta_o
/
v
;
Float
b
=
sinTheta_i
*
sinTheta_o
/
v
;
Float
mp
=
(
v
<=
.1
)
?
(
std
::
e
xp
(
LogI0
(
a
)
-
b
-
1
/
v
+
0.6931
f
+
std
::
log
(
1
/
(
2
*
v
))))
:
(
std
::
e
xp
(
-
b
)
*
I0
(
a
))
/
(
std
::
sinh
(
1
/
v
)
*
2
*
v
);
Float
mp
=
(
v
<=
.1
)
?
(
FastE
xp
(
LogI0
(
a
)
-
b
-
1
/
v
+
0.6931
f
+
std
::
log
(
1
/
(
2
*
v
))))
:
(
FastE
xp
(
-
b
)
*
I0
(
a
))
/
(
std
::
sinh
(
1
/
v
)
*
2
*
v
);
CHECK
(
!
IsInf
(
mp
)
&&
!
IsNaN
(
mp
));
return
mp
;
}
...
...
src/pbrt/util/spectrum.h
浏览文件 @
dae7eb35
...
...
@@ -72,7 +72,7 @@ PBRT_CPU_GPU inline Float Blackbody(Float lambda, Float T) {
const
Float
kb
=
1.3806488e-23
;
// Return emitted radiance for blackbody at wavelength _lambda[i]_
Float
l
=
lambda
*
1e-9
f
;
Float
Le
=
(
2
*
h
*
c
*
c
)
/
(
Pow
<
5
>
(
l
)
*
(
std
::
e
xp
((
h
*
c
)
/
(
l
*
kb
*
T
))
-
1
));
Float
Le
=
(
2
*
h
*
c
*
c
)
/
(
Pow
<
5
>
(
l
)
*
(
FastE
xp
((
h
*
c
)
/
(
l
*
kb
*
T
))
-
1
));
CHECK
(
!
IsNaN
(
Le
));
return
Le
;
}
...
...
src/pbrt/util/spectrum_test.cpp
浏览文件 @
dae7eb35
...
...
@@ -41,7 +41,7 @@ TEST(Spectrum, Blackbody) {
// consistent with this.
for
(
Float
T
:
{
2700
,
3000
,
4500
,
5600
,
6000
})
{
Float
lambdaMax
=
2.8977721e-3
/
T
*
1e9
;
Float
lambda
[
3
]
=
{
Float
(
.99
9
*
lambdaMax
),
lambdaMax
,
Float
(
1.0
01
*
lambdaMax
)};
Float
lambda
[
3
]
=
{
Float
(
.99
*
lambdaMax
),
lambdaMax
,
Float
(
1.
01
*
lambdaMax
)};
EXPECT_LT
(
Blackbody
(
lambda
[
0
],
T
),
Blackbody
(
lambda
[
1
],
T
));
EXPECT_GT
(
Blackbody
(
lambda
[
1
],
T
),
Blackbody
(
lambda
[
2
],
T
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录