Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
imjiangjun
pbrt-v4
提交
95a2da4e
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,发现更多精彩内容 >>
提交
95a2da4e
编写于
11月 18, 2020
作者:
M
Matt Pharr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
imgtool: add support for running the OptiX denoiser on RGB-only images
上级
2062e85f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
23 deletion
+25
-23
src/pbrt/cmd/imgtool.cpp
src/pbrt/cmd/imgtool.cpp
+25
-23
未找到文件。
src/pbrt/cmd/imgtool.cpp
浏览文件 @
95a2da4e
...
...
@@ -2174,8 +2174,29 @@ int denoise_optix(int argc, char *argv[]) {
ImageAndMetadata
im
=
Image
::
Read
(
inFilename
);
Image
&
image
=
im
.
image
;
int
nLayers
=
3
;
ImageChannelDesc
desc
[
3
]
=
{
image
.
GetChannelDesc
({
"R"
,
"G"
,
"B"
}),
image
.
GetChannelDesc
({
"Albedo.R"
,
"Albedo.G"
,
"Albedo.B"
}),
image
.
GetChannelDesc
({
"Nsx"
,
"Nsy"
,
"Nsz"
})};
if
(
!
desc
[
0
])
{
fprintf
(
stderr
,
"%s: image doesn't have R, G, B channels."
,
inFilename
.
c_str
());
return
1
;
}
if
(
!
desc
[
1
])
{
fprintf
(
stderr
,
"Warning: %s: image doesn't have Albedo.{R,G,B} channels. "
"Denoising quality may suffer.
\n
"
,
inFilename
.
c_str
());
nLayers
=
1
;
}
if
(
!
desc
[
2
])
{
fprintf
(
stderr
,
"Warning: %s: image doesn't have Nsx, Nsy, Nsz channels. "
"Denoising quality may suffer.
\n
"
,
inFilename
.
c_str
());
nLayers
=
1
;
}
OptixDenoiserOptions
options
=
{};
options
.
inputKind
=
OPTIX_DENOISER_INPUT_RGB_ALBEDO_NORMAL
;
options
.
inputKind
=
(
nLayers
=
3
)
?
OPTIX_DENOISER_INPUT_RGB_ALBEDO_NORMAL
:
OPTIX_DENOISER_INPUT_RGB
;
OptixDenoiser
denoiserHandle
;
OPTIX_CHECK
(
optixDenoiserCreate
(
optixContext
,
&
options
,
&
denoiserHandle
));
...
...
@@ -2200,27 +2221,8 @@ int denoise_optix(int argc, char *argv[]) {
CUDAMemoryResource
cudaMemoryResource
;
Allocator
alloc
(
&
cudaMemoryResource
);
ImageChannelDesc
desc
[
3
]
=
{
image
.
GetChannelDesc
({
"R"
,
"G"
,
"B"
}),
image
.
GetChannelDesc
({
"Albedo.R"
,
"Albedo.G"
,
"Albedo.B"
}),
image
.
GetChannelDesc
({
"Nsx"
,
"Nsy"
,
"Nsz"
})};
if
(
!
desc
[
0
])
{
fprintf
(
stderr
,
"%s: image doesn't have R, G, B channels."
,
inFilename
.
c_str
());
return
1
;
}
if
(
!
desc
[
1
])
{
fprintf
(
stderr
,
"%s: image doesn't have Albedo.{R,G,B} channels."
,
inFilename
.
c_str
());
return
1
;
}
if
(
!
desc
[
2
])
{
fprintf
(
stderr
,
"%s: image doesn't have Nsx, Nsy, Nsz channels."
,
inFilename
.
c_str
());
return
1
;
}
OptixImage2D
*
inputLayers
=
alloc
.
allocate_object
<
OptixImage2D
>
(
3
);
for
(
int
i
=
0
;
i
<
3
;
++
i
)
{
OptixImage2D
*
inputLayers
=
alloc
.
allocate_object
<
OptixImage2D
>
(
nLayers
);
for
(
int
i
=
0
;
i
<
nLayers
;
++
i
)
{
inputLayers
[
i
].
width
=
image
.
Resolution
().
x
;
inputLayers
[
i
].
height
=
image
.
Resolution
().
y
;
inputLayers
[
i
].
rowStrideInBytes
=
image
.
Resolution
().
x
*
3
*
sizeof
(
float
);
...
...
@@ -2265,7 +2267,7 @@ int denoise_optix(int argc, char *argv[]) {
OPTIX_CHECK
(
optixDenoiserInvoke
(
denoiserHandle
,
0
/* stream */
,
&
params
,
CUdeviceptr
(
denoiserState
),
memorySizes
.
stateSizeInBytes
,
inputLayers
,
3
,
0
/* offset x */
,
0
/* offset y */
,
memorySizes
.
stateSizeInBytes
,
inputLayers
,
nLayers
,
0
/* offset x */
,
0
/* offset y */
,
outputImage
,
CUdeviceptr
(
scratchBuffer
),
memorySizes
.
withoutOverlapScratchSizeInBytes
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录