在3ds max中以16位分辨率获取z缓冲区

在3ds max中以16位分辨率获取z缓冲区,3d,3dsmax,maxscript,zbuffer,3d,3dsmax,Maxscript,Zbuffer,我从如下图像中读取z缓冲区: --get z buffer in HD resolution rbmpHD = render outputsize:[1920,1080] channels:#(#zdepth) vfb:off camera: z_cam z_dHD = getchannelasmask rbmp #zdepth outputfile:z_name z_dHD.fileName = z_nameHD save z_dHD close z_dHD 我曾经 pn

我从如下图像中读取z缓冲区:

--get z buffer    in HD resolution     
rbmpHD = render outputsize:[1920,1080] channels:#(#zdepth) vfb:off camera: z_cam
z_dHD = getchannelasmask rbmp #zdepth outputfile:z_name 
z_dHD.fileName = z_nameHD
save z_dHD
close z_dHD 
我曾经

pngio.setType #gray16
但是,要将IMAE写入16位,它们不使用向下8位,这意味着深度图像的分辨率限制为256步。因此,从开始读取的z缓冲区从0到255。 是否可以从一开始就以16位分辨率读取z缓冲区图像

编辑:

<代码>必须产生一个可以被读入C++程序的任何输出图像。为此,我需要一个16位的分辨率

功能

getChannel rbmpHD [x,y] #zDepth
但是,返回z深度值-这意味着必须在摄影机的整个可见空间上循环-如何将此可见曲面获取到摄影机?即使有可能,这也会大大降低在线帮助的速度: getChannelAsMask-生成并返回一个单独的8位灰度位图


是否可以渲染为EXR格式并从此处开始工作?

这可以使用渲染元素而不是z缓冲区通道来解决:

-- Create and apply Z Depth render element
z = Z_Depth()
m = MaxOps.GetCurRenderElementMgr()
m.RemoveAllRenderElements()
m.AddRenderElement z

tempFilename = @"D:\deleteme.png" -- will not be written to disk
zFilename = @"D:\Temp\Test_ZDepth.png"
zWidth = 1024
zHeight = 1024
rendElems = #()

rbmpHD = render outputwidth:zWidth outputheight:zHeight \
    renderElements:true renderelementbitmaps:&rendElems \
    outputfile:tempFilename vfb:false

pngio.setType #gray16
rendElems[1].filename = zFilename
save rendElems[1]

谢谢你的回复。您可能已经看到,我的代码中已经有一个8位的灰色映射。然而,我不知道如何进一步——其次我希望它是16位的——而不是8位的分辨率。我不确定我是否理解。首先,您请求一个8位位图(通过使用一个只返回8位的函数),然后您需要16位位图?不,我希望它从一开始就是16位分辨率。但是,我在3ds max中找不到任何支持此类功能的实现GetChannel bm[x,y]#zDepth返回单个像素的z深度。如果坚持不渲染到EXR,那么使用getChannel()对所有像素进行循环可能会有所帮助?它为位于x/Y位置的所有(半透明)曲面返回一个32位值数组。如果后面有几个像素,则会出现问题,并给出一个值数组。此外,如何再次连接输出以获得可以保存的图像?如何使用GBuffer设置将输出设置为16位/通道?感谢您的评论,我对GBuffer并不十分熟悉,您能否详细说明如何在3ds max中使用maxscript实现此行为?自从我启动3D max以来,已经有很长时间了,但我确实记得maxscript有超级缺陷,通常只支持功能的一个子集,您可能会更幸运地使用SDK,但相信您可以在渲染输出窗口的某个地方找到GBuffer设置。SDK是什么意思?谢谢您的回复,-是否仍可以将此脚本中的彩色图像渲染到?我想知道,既然“RemoveAllRenderRelations”被称为染料,只需将
render outputwidth:zWidth…
更改为
rbmpHD=render outputwidth:zWidth…
并且
rbmpHD
成为保存颜色输出的变量。无论渲染元素状态如何,始终渲染主颜色通道。默认情况下,应用的渲染元素为零。