关于在Unity3D当中截屏内容,或者某个相机的内容,保存到图片文件的方法。
一般的做法是将Camera的targetTexture指定一个RenderTexture,然后将这个RenderTexture转成PNG文件。下面是代码,一般搞Unity应该都能看懂。但是会有一个问题,就是输出的PNG文件会变暗。
2022-09-01 针对这个问题,又有新的认识。
可以参考官方Unity文档,讲的很清楚。链接关于sRGB
核心就在于创建RenderTexture时构造函数的参数和TextureFormat类型。
描述
RenderTexture 的色彩空间转换模式。
使用 Gamma 颜色空间时,不会进行任何类型的转换,也不会使用此设置。
当使用线性颜色空间时,默认情况下非 HDR 渲染纹理被认为包含 sRGB 数据(即“常规颜色”),并且片段着色器被认为输出线性颜色值。所以默认情况下,片段着色器颜色值在渲染成纹理时会转换为 sRGB;当在着色器中对纹理进行采样时,sRGB 颜色会转换为线性值。这是sRGB读写模式;并且默认模式与使用线性色彩空间时的模式相匹配。在渲染纹理上设置此模式时,RenderTexture.sRGB 将返回 true。
但是,如果您的渲染纹理将包含非颜色数据(法线、速度、其他自定义值),那么您不希望发生 Linear<->sRGB 转换。这是线性读写模式。在渲染纹理上设置此模式时,RenderTexture.sRGB 将返回 false。
请注意,某些渲染纹理格式始终被认为包含“线性”数据,并且无论读写设置如何,都不会对其执行 sRGB 转换。这适用于所有“HDR”(浮点)格式以及其他格式,如深度或阴影贴图。
另请参阅:线性色彩空间、

本文介绍了在Unity3D中如何正确地截取并保存相机内容为图片,同时解决了因sRGB设置不当导致输出图片变暗的常见问题。关键在于动态创建RenderTexture时设置正确的sRGB属性,确保颜色空间转换正确,从而避免图片在编码为PNG时出现色彩失真。

2万+

被折叠的 条评论
为什么被折叠?



