【发布时间】:2015-02-08 01:14:14
【问题描述】:
是否有任何可行的方法在 Scenekit 中将纹理与 SCNProgram 着色器一起使用? 据我所知,没有办法从 SCNProgram 中访问默认的 SCNMaterial 纹理(我知道我可以从着色器修改器中访问它们,但不幸的是,据我所知,我无法做我需要做的事情着色器修饰符)。
管理我自己的纹理并不容易,因为绑定它们的明显位置 - 在 material.handleBindingOfSymbol 块中 - 为使用材质渲染的每一位几何图形调用一次。在我的情况下,这是每帧数万次,如果场景图正确地对渲染状态进行排序,这对于只需要执行一次的事情来说似乎很疯狂。
我曾假设有一种方法可以将纹理附加到 SCNProgram 或 SCNMaterial 以便场景图可以管理渲染状态,但在我的一生中我找不到类似的东西。
我是否遗漏了什么,或者纹理基本上无法用于 SCNprograms?
【问题讨论】:
-
在一组着色器修改器中你不能做什么?
-
嗨,大卫,感谢您的回复。我正在渲染发光的几何图形 - 与正常的“透明”着色不同,它需要像光一样表现并进行叠加混合(根据我之前回答的问题)。我发现强制sceneKit正确合成它的唯一方法是使用自定义着色器,它只进行纹理查找并返回alpha = 0的颜色。修改器似乎假设正常照明并具有照明阶段,我无法确定是否可以绕过它以简单地返回“未点亮”颜色。
-
另外,正如我在 my previous question 中提到的,如果不在 SCNProgram 上设置“opaque=false”属性,我似乎无法让 SceneKit 启用混合 - 没有多少摆弄“透明度” “奇怪的是,财产似乎有什么不同。所以我不确定如何在没有 SCNProgram 的情况下强制混合。
-
我现在已经编辑了我的previous question 的答案,因为我制定了一个确实 允许我针对我的特定情况使用着色器修饰符的技巧。不过,当您使用自己的自定义程序时,我仍然想知道是否有办法让 SceneKit 管理纹理资源。它似乎不应该太复杂,因为它已经在为自己的着色器做这件事,所以明显遗漏任何功能来帮助处理这些东西对我来说有点莫名其妙。