Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
imjiangjun
pbrt-v4
提交
a00d43ba
P
pbrt-v4
项目概览
imjiangjun
/
pbrt-v4
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
a00d43ba
编写于
1月 11, 2021
作者:
M
Matt Pharr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add optional tint to dielectric material/BxDF
上级
9d2ec6ee
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
28 addition
and
19 deletion
+28
-19
src/pbrt/bxdfs.cpp
src/pbrt/bxdfs.cpp
+8
-7
src/pbrt/bxdfs.h
src/pbrt/bxdfs.h
+5
-3
src/pbrt/materials.cpp
src/pbrt/materials.cpp
+6
-3
src/pbrt/materials.h
src/pbrt/materials.h
+9
-6
未找到文件。
src/pbrt/bxdfs.cpp
浏览文件 @
a00d43ba
...
...
@@ -88,8 +88,8 @@ SampledSpectrum DielectricInterfaceBxDF::f(Vector3f wo, Vector3f wi,
return
SampledSpectrum
(
0.
);
wh
=
Normalize
(
wh
);
Float
F
=
FrDielectric
(
Dot
(
wi
,
FaceForward
(
wh
,
Vector3f
(
0
,
0
,
1
))),
eta
);
return
SampledSpectrum
(
mfDistrib
.
D
(
wh
)
*
mfDistrib
.
G
(
wo
,
wi
)
*
F
/
(
4
*
cosTheta_i
*
cosTheta_o
));
return
tint
*
SampledSpectrum
(
mfDistrib
.
D
(
wh
)
*
mfDistrib
.
G
(
wo
,
wi
)
*
F
/
(
4
*
cosTheta_i
*
cosTheta_o
));
}
else
{
// Compute transmission at non-delta dielectric interface
...
...
@@ -112,7 +112,8 @@ SampledSpectrum DielectricInterfaceBxDF::f(Vector3f wo, Vector3f wi,
Float
F
=
FrDielectric
(
Dot
(
wo
,
wh
),
eta
);
Float
sqrtDenom
=
Dot
(
wo
,
wh
)
+
etap
*
Dot
(
wi
,
wh
);
Float
factor
=
(
mode
==
TransportMode
::
Radiance
)
?
Sqr
(
1
/
etap
)
:
1
;
return
SampledSpectrum
((
1
-
F
)
*
factor
*
return
tint
*
SampledSpectrum
((
1
-
F
)
*
factor
*
std
::
abs
(
mfDistrib
.
D
(
wh
)
*
mfDistrib
.
G
(
wo
,
wi
)
*
AbsDot
(
wi
,
wh
)
*
AbsDot
(
wo
,
wh
)
/
(
cosTheta_i
*
cosTheta_o
*
Sqr
(
sqrtDenom
))));
...
...
@@ -137,7 +138,7 @@ pstd::optional<BSDFSample> DielectricInterfaceBxDF::Sample_f(
if
(
uc
<
pr
/
(
pr
+
pt
))
{
// Sample perfect specular reflection at interface
Vector3f
wi
(
-
wo
.
x
,
-
wo
.
y
,
wo
.
z
);
SampledSpectrum
fr
(
R
/
AbsCosTheta
(
wi
));
SampledSpectrum
fr
(
tint
*
R
/
AbsCosTheta
(
wi
));
return
BSDFSample
(
fr
,
wi
,
pr
/
(
pr
+
pt
),
BxDFFlags
::
SpecularReflection
);
}
else
{
...
...
@@ -153,7 +154,7 @@ pstd::optional<BSDFSample> DielectricInterfaceBxDF::Sample_f(
if
(
tir
)
return
{};
SampledSpectrum
ft
(
T
/
AbsCosTheta
(
wi
));
SampledSpectrum
ft
(
tint
*
T
/
AbsCosTheta
(
wi
));
// Account for non-symmetry with transmission to different medium
if
(
mode
==
TransportMode
::
Radiance
)
ft
/=
Sqr
(
etap
);
...
...
@@ -285,8 +286,8 @@ Float DielectricInterfaceBxDF::PDF(Vector3f wo, Vector3f wi, TransportMode mode,
}
std
::
string
DielectricInterfaceBxDF
::
ToString
()
const
{
return
StringPrintf
(
"[ DielectricInterfaceBxDF eta: %f mfDistrib: %s ]"
,
eta
,
mfDistrib
.
ToString
());
return
StringPrintf
(
"[ DielectricInterfaceBxDF eta: %f mfDistrib: %s
tint: %s
]"
,
eta
,
mfDistrib
.
ToString
()
,
tint
);
}
std
::
string
ThinDielectricBxDF
::
ToString
()
const
{
...
...
src/pbrt/bxdfs.h
浏览文件 @
a00d43ba
...
...
@@ -197,8 +197,9 @@ class DielectricInterfaceBxDF {
// DielectricInterfaceBxDF Public Methods
DielectricInterfaceBxDF
()
=
default
;
PBRT_CPU_GPU
DielectricInterfaceBxDF
(
Float
eta
,
const
TrowbridgeReitzDistribution
&
mfDistrib
)
:
eta
(
eta
==
1
?
1.001
:
eta
),
mfDistrib
(
mfDistrib
)
{}
DielectricInterfaceBxDF
(
Float
eta
,
SampledSpectrum
tint
,
const
TrowbridgeReitzDistribution
&
mfDistrib
)
:
eta
(
eta
==
1
?
1.001
:
eta
),
tint
(
tint
),
mfDistrib
(
mfDistrib
)
{}
PBRT_CPU_GPU
BxDFFlags
Flags
()
const
{
...
...
@@ -229,6 +230,7 @@ class DielectricInterfaceBxDF {
private:
// DielectricInterfaceBxDF Private Members
Float
eta
;
SampledSpectrum
tint
;
TrowbridgeReitzDistribution
mfDistrib
;
};
...
...
@@ -266,7 +268,7 @@ class ThinDielectricBxDF {
return
{};
if
(
uc
<
pr
/
(
pr
+
pt
))
{
// Sample perfect specular reflection at interface
// Sample perfect specular reflection at
thin dielectric
interface
Vector3f
wi
(
-
wo
.
x
,
-
wo
.
y
,
wo
.
z
);
SampledSpectrum
fr
(
R
/
AbsCosTheta
(
wi
));
return
BSDFSample
(
fr
,
wi
,
pr
/
(
pr
+
pt
),
BxDFFlags
::
SpecularReflection
);
...
...
src/pbrt/materials.cpp
浏览文件 @
a00d43ba
...
...
@@ -30,8 +30,8 @@ namespace pbrt {
std
::
string
DielectricMaterial
::
ToString
()
const
{
return
StringPrintf
(
"[ DielectricMaterial displacement: %s uRoughness: %s "
"vRoughness: %s etaF: %s "
"etaS: %s remapRoughness: %s ]"
,
displacement
,
uRoughness
,
vRoughness
,
etaF
,
etaS
,
"etaS: %s
tint: %s
remapRoughness: %s ]"
,
displacement
,
uRoughness
,
vRoughness
,
etaF
,
etaS
,
tint
,
remapRoughness
);
}
...
...
@@ -60,8 +60,11 @@ DielectricMaterial *DielectricMaterial::Create(
parameters
.
GetFloatTextureOrNull
(
"displacement"
,
alloc
);
bool
remapRoughness
=
parameters
.
GetOneBool
(
"remaproughness"
,
true
);
SpectrumTextureHandle
tint
=
parameters
.
GetSpectrumTextureOrNull
(
"tint"
,
SpectrumType
::
Albedo
,
alloc
);
return
alloc
.
new_object
<
DielectricMaterial
>
(
uRoughness
,
vRoughness
,
etaF
,
etaS
,
displacement
,
normalMap
,
remapRoughness
);
displacement
,
normalMap
,
tint
,
remapRoughness
);
}
// ThinDielectricMaterial Method Definitions
...
...
src/pbrt/materials.h
浏览文件 @
a00d43ba
...
...
@@ -142,13 +142,14 @@ class DielectricMaterial {
DielectricMaterial
(
FloatTextureHandle
uRoughness
,
FloatTextureHandle
vRoughness
,
FloatTextureHandle
etaF
,
SpectrumTextureHandle
etaS
,
FloatTextureHandle
displacement
,
Image
*
normalMap
,
bool
remapRoughness
)
SpectrumTextureHandle
tint
,
bool
remapRoughness
)
:
displacement
(
displacement
),
normalMap
(
normalMap
),
uRoughness
(
uRoughness
),
vRoughness
(
vRoughness
),
etaF
(
etaF
),
etaS
(
etaS
),
tint
(
tint
),
remapRoughness
(
remapRoughness
)
{
CHECK
((
bool
)
etaF
^
(
bool
)
etaS
);
}
...
...
@@ -157,7 +158,7 @@ class DielectricMaterial {
template
<
typename
TextureEvaluator
>
PBRT_CPU_GPU
bool
CanEvaluateTextures
(
TextureEvaluator
texEval
)
const
{
return
texEval
.
CanEvaluate
({
etaF
,
uRoughness
,
vRoughness
},
{
etaS
});
return
texEval
.
CanEvaluate
({
etaF
,
uRoughness
,
vRoughness
},
{
etaS
,
tint
});
}
PBRT_CPU_GPU
...
...
@@ -200,7 +201,8 @@ class DielectricMaterial {
TrowbridgeReitzDistribution
distrib
(
urough
,
vrough
);
// Return BSDF for dielectric material
*
bxdf
=
DielectricInterfaceBxDF
(
eta
,
distrib
);
SampledSpectrum
t
=
tint
?
texEval
(
tint
,
ctx
,
lambda
)
:
SampledSpectrum
(
1.
f
);
*
bxdf
=
DielectricInterfaceBxDF
(
eta
,
t
,
distrib
);
return
BSDF
(
ctx
.
wo
,
ctx
.
n
,
ctx
.
ns
,
ctx
.
dpdus
,
bxdf
);
}
...
...
@@ -210,6 +212,7 @@ class DielectricMaterial {
Image
*
normalMap
;
FloatTextureHandle
uRoughness
,
vRoughness
,
etaF
;
SpectrumTextureHandle
etaS
;
SpectrumTextureHandle
tint
;
bool
remapRoughness
;
};
...
...
@@ -629,7 +632,7 @@ class CoatedDiffuseMaterial {
Float
gg
=
Clamp
(
texEval
(
g
,
ctx
),
-
1
,
1
);
*
bxdf
=
CoatedDiffuseBxDF
(
DielectricInterfaceBxDF
(
e
,
distrib
),
CoatedDiffuseBxDF
(
DielectricInterfaceBxDF
(
e
,
SampledSpectrum
(
1.
f
),
distrib
),
IdealDiffuseBxDF
(
r
),
thick
,
a
,
gg
,
config
);
return
BSDF
(
ctx
.
wo
,
ctx
.
n
,
ctx
.
ns
,
ctx
.
dpdus
,
bxdf
);
}
...
...
@@ -731,7 +734,7 @@ class CoatedConductorMaterial {
Float
gg
=
Clamp
(
texEval
(
g
,
ctx
),
-
1
,
1
);
*
bxdf
=
CoatedConductorBxDF
(
DielectricInterfaceBxDF
(
ieta
,
interfaceDistrib
),
DielectricInterfaceBxDF
(
ieta
,
SampledSpectrum
(
1.
f
),
interfaceDistrib
),
ConductorBxDF
(
conductorDistrib
,
ce
,
ck
),
thick
,
a
,
gg
,
config
);
return
BSDF
(
ctx
.
wo
,
ctx
.
n
,
ctx
.
ns
,
ctx
.
dpdus
,
bxdf
);
}
...
...
@@ -817,7 +820,7 @@ class SubsurfaceMaterial {
TrowbridgeReitzDistribution
distrib
(
urough
,
vrough
);
// Initialize _bsdf_ for smooth or rough dielectric
*
bxdf
=
DielectricInterfaceBxDF
(
eta
,
distrib
);
*
bxdf
=
DielectricInterfaceBxDF
(
eta
,
SampledSpectrum
(
1.
f
),
distrib
);
return
BSDF
(
ctx
.
wo
,
ctx
.
n
,
ctx
.
ns
,
ctx
.
dpdus
,
bxdf
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录