gpt4 book ai didi

ios - 使用shaderModifiers在平面上渲染视频,但颜色太浅

转载 作者:行者123 更新时间:2023-11-28 23:29:28 44 4
gpt4 key购买 nike

我用ARKIT加载一个平面,平面修改SCNShaderModifierEntryPointFragment来显示解码后的视频。但是渲染出来的视频画面太淡了,比使用metalLayer渲染出来的视频要亮。为什么会这样?我也试过修改SCNShaderModifierEntryPointSurface,设置_surface.diffuse。我也尝试使用 rgb 而不是 yuv。但还是一样。

这应该也不是因为光线的原因。我尝试使用 diffuse.content = image,它是正确的。

在metalLayer中渲染 render in metalLayer

在 ar 中渲染 enter image description here

我尝试使用 SCNProgram、shaderModifiers 渲染 MTLTexture。渲染YUV或RGB结果,颜色更浅


texture2d textureY;
texture2d textureUV;
float3x3 coversionMatrix;

float3 yuv;
yuv.x = textureY.sample(textureSampler, _surface.diffuseTexcoord).r;
yuv.yz = textureUV.sample(textureSampler, _surface.diffuseTexcoord).rg;

float3 rgb = coversionMatrix * (yuv - offset);
_output.color = float4(rgb, 1.0);

//set the shaderModifiers

myMaterial.shaderModifiers = @{ SCNShaderModifierEntryPointFragment : shader};

最佳答案

如何生成金属纹理?尝试使用像素格式的“_sRGB”变体,例如 MTLPixelFormatRGBA8Unorm_sRGB 而不是 MTLPixelFormatRGBA8Unorm

或者,尝试将最终颜色(着色器修改器示例中的 rgb 变量)转换为线性颜色空间,如 this answer 中所述:

static float srgbToLinear(float c) {
if (c <= 0.04045)
return c / 12.92;
else
return powr((c + 0.055) / 1.055, 2.4);
}

关于ios - 使用shaderModifiers在平面上渲染视频,但颜色太浅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57284868/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com