Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
imjiangjun
pbrt-v4
提交
8c0e220b
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,发现更多精彩内容 >>
提交
8c0e220b
编写于
1月 05, 2021
作者:
M
Matt Pharr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Film: clamp RGB values to avoid infinite values in fp16 EXR files
上级
f7019fbe
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
23 addition
and
1 deletion
+23
-1
src/pbrt/cpu/integrators.cpp
src/pbrt/cpu/integrators.cpp
+1
-1
src/pbrt/film.cpp
src/pbrt/film.cpp
+22
-0
未找到文件。
src/pbrt/cpu/integrators.cpp
浏览文件 @
8c0e220b
...
...
@@ -241,6 +241,7 @@ void ImageTileIntegrator::Render() {
waveEnd
=
std
::
min
(
spp
,
waveEnd
+
nextWaveSize
);
if
(
!
referenceImage
)
nextWaveSize
=
std
::
min
(
2
*
nextWaveSize
,
64
);
if
(
waveStart
==
spp
)
progress
.
Done
();
// Optionally write current image to disk
if
(
waveStart
==
spp
||
Options
->
writePartialImages
||
referenceImage
)
{
...
...
@@ -267,7 +268,6 @@ void ImageTileIntegrator::Render() {
if
(
mseOutFile
)
fclose
(
mseOutFile
);
progress
.
Done
();
DisconnectFromDisplayServer
();
LOG_VERBOSE
(
"Rendering finished"
);
}
...
...
src/pbrt/film.cpp
浏览文件 @
8c0e220b
...
...
@@ -550,13 +550,24 @@ Image RGBFilm::GetImage(ImageMetadata *metadata, Float splatScale) {
PixelFormat
format
=
writeFP16
?
PixelFormat
::
Half
:
PixelFormat
::
Float
;
Image
image
(
format
,
Point2i
(
pixelBounds
.
Diagonal
()),
{
"R"
,
"G"
,
"B"
});
std
::
atomic
<
int
>
nClamped
{
0
};
ParallelFor2D
(
pixelBounds
,
[
&
](
Point2i
p
)
{
RGB
rgb
=
GetPixelRGB
(
p
,
splatScale
);
if
(
writeFP16
&&
std
::
max
({
rgb
.
r
,
rgb
.
g
,
rgb
.
b
})
>
65504
)
{
if
(
rgb
.
r
>
65504
)
rgb
.
r
=
65504
;
if
(
rgb
.
g
>
65504
)
rgb
.
g
=
65504
;
if
(
rgb
.
b
>
65504
)
rgb
.
b
=
65504
;
++
nClamped
;
}
Point2i
pOffset
(
p
.
x
-
pixelBounds
.
pMin
.
x
,
p
.
y
-
pixelBounds
.
pMin
.
y
);
image
.
SetChannels
(
pOffset
,
{
rgb
[
0
],
rgb
[
1
],
rgb
[
2
]});
});
if
(
nClamped
.
load
()
>
0
)
Warning
(
"%d pixel values clamped to maximum fp16 value."
,
nClamped
.
load
());
metadata
->
pixelBounds
=
pixelBounds
;
metadata
->
fullResolution
=
fullResolution
;
metadata
->
colorSpace
=
colorSpace
;
...
...
@@ -712,6 +723,7 @@ Image GBufferFilm::GetImage(ImageMetadata *metadata, Float splatScale) {
ImageChannelDesc
relVarianceDesc
=
image
.
GetChannelDesc
(
{
"RelativeVariance.R"
,
"RelativeVariance.G"
,
"RelativeVariance.B"
});
std
::
atomic
<
int
>
nClamped
{
0
};
ParallelFor2D
(
pixelBounds
,
[
&
](
Point2i
p
)
{
Pixel
&
pixel
=
pixels
[
p
];
RGB
rgb
(
pixel
.
rgbSum
[
0
],
pixel
.
rgbSum
[
1
],
pixel
.
rgbSum
[
2
]);
...
...
@@ -735,6 +747,13 @@ Image GBufferFilm::GetImage(ImageMetadata *metadata, Float splatScale) {
rgb
=
outputRGBFromSensorRGB
*
rgb
;
if
(
writeFP16
&&
std
::
max
({
rgb
.
r
,
rgb
.
g
,
rgb
.
b
})
>
65504
)
{
if
(
rgb
.
r
>
65504
)
rgb
.
r
=
65504
;
if
(
rgb
.
g
>
65504
)
rgb
.
g
=
65504
;
if
(
rgb
.
b
>
65504
)
rgb
.
b
=
65504
;
++
nClamped
;
}
Point2i
pOffset
(
p
.
x
-
pixelBounds
.
pMin
.
x
,
p
.
y
-
pixelBounds
.
pMin
.
y
);
image
.
SetChannels
(
pOffset
,
rgbDesc
,
{
rgb
[
0
],
rgb
[
1
],
rgb
[
2
]});
image
.
SetChannels
(
pOffset
,
albedoRgbDesc
,
...
...
@@ -758,6 +777,9 @@ Image GBufferFilm::GetImage(ImageMetadata *metadata, Float splatScale) {
pixel
.
varianceEstimator
[
2
].
RelativeVariance
()});
});
if
(
nClamped
.
load
()
>
0
)
Warning
(
"%d pixel values clamped to maximum fp16 value."
,
nClamped
.
load
());
metadata
->
pixelBounds
=
pixelBounds
;
metadata
->
fullResolution
=
fullResolution
;
metadata
->
colorSpace
=
colorSpace
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录