小编dea*_*het的帖子

Metal:如何在没有颜色/伽马转换的情况下将图像附加到着色器?

是否可以在没有任何颜色/伽马校正的情况下将图像发送到金属着色器(来自场景套件)?

我有一个数据纹理,其中每个通道对应于我希望能够测试的特定值。这是一张世界地图,绿色通道映射到国家索引。如果国家处于“活动状态”,则该国家/地区将呈现红色,否则呈现灰色。

这是我正在使用的代码示例:

sphereNode = SCNNode(geometry: sphereGeometry)
scene.rootNode.addChildNode(sphereNode)

let program = SCNProgram()
program.vertexFunctionName = "sliceVertex"       
program.fragmentFunctionName = "sliceFragment"
sphereNode.geometry?.firstMaterial?.program = program

let imageProperty = SCNMaterialProperty(contents: UIImage(named: "art.scnassets/Textures/earth-data-map-2k.png")!)
mageProperty.mipFilter = SCNFilterMode.none 
sphereNode.geometry?.firstMaterial?.setValue(imageProperty, forKey: "dataTexture")
Run Code Online (Sandbox Code Playgroud)

片段着色器:

fragment float4 sliceFragment(
    Vertex in [[stage_in]],
    texture2d<float, access::sample> dataTexture [[texture(0)]]
){
    constexpr sampler quadSampler(coord::normalized, filter::linear, address::repeat);
    float4 color = dataTexture.sample(quadSampler, in.texCoords);
    int index = int(color.g * 255.0);
    float active = index == 81 ? 1.0 : 0.0;
    float3 col = mix(float3(color.g,color.g,color.g), float3(1.0,0.0,0.0), active);
    return float4(col.r, col.g, …
Run Code Online (Sandbox Code Playgroud)

shader gamma color-space scenekit metal

2
推荐指数
1
解决办法
862
查看次数

标签 统计

color-space ×1

gamma ×1

metal ×1

scenekit ×1

shader ×1