假设一家公司在他们的应用中实现了一个新的着色器,并且他们希望使其难以被窃取。然而,OpenGL着色器以明文形式发送到GPU,Vulkan接受一个容易的decompileable bytecode。是否有任何图形API具有非零级别的着色器模糊处理?
uklbhaso1#
是否有任何图形API具有非零级别的着色器模糊处理?不,这也没有任何意义。着色器远没有成熟的应用程序复杂。为了保持交互性,着色器的复杂度有很大的限制。任何一种模糊层,在本质上,都只是一个奇怪的指令集,可以很容易地使用优化的编译器/传输器来解模糊。一般的规则是:如果它可以被执行并产生一个可读的结果 *,那么它就可以被去模糊化。熟练的图形黑客也能够查看最终渲染和/或中间结果(使用renderdoc等工具很容易获得),并从中找出着色器所做的要点。见鬼,90%的图形编码都由这种视觉输出调试组成,当你试图弄清楚为什么和如何你的着色器不是你想要的,以及你在屏幕上看到的混乱是如何首先发生的。因此,任何有经验的图形黑客都已经建立了许多所需的技能,只需“看”它就可以对着色器进行反向工程。
qaxu7uf22#
在我看来,最好的解决方案是将代码从GPU移到CPU。不幸的是,这意味着失去性能。如果你把所有重要的逻辑都放在GPU上,那么人们实际上就可以把它用在自己的产品中。除了尝试将重要代码保留在CPU上之外,你什么也做不了,即使这意味着游戏速度较慢。
2条答案
按热度按时间uklbhaso1#
是否有任何图形API具有非零级别的着色器模糊处理?
不,这也没有任何意义。着色器远没有成熟的应用程序复杂。为了保持交互性,着色器的复杂度有很大的限制。任何一种模糊层,在本质上,都只是一个奇怪的指令集,可以很容易地使用优化的编译器/传输器来解模糊。
一般的规则是:如果它可以被执行并产生一个可读的结果 *,那么它就可以被去模糊化。
熟练的图形黑客也能够查看最终渲染和/或中间结果(使用renderdoc等工具很容易获得),并从中找出着色器所做的要点。见鬼,90%的图形编码都由这种视觉输出调试组成,当你试图弄清楚为什么和如何你的着色器不是你想要的,以及你在屏幕上看到的混乱是如何首先发生的。因此,任何有经验的图形黑客都已经建立了许多所需的技能,只需“看”它就可以对着色器进行反向工程。
qaxu7uf22#
在我看来,最好的解决方案是将代码从GPU移到CPU。不幸的是,这意味着失去性能。
如果你把所有重要的逻辑都放在GPU上,那么人们实际上就可以把它用在自己的产品中。
除了尝试将重要代码保留在CPU上之外,你什么也做不了,即使这意味着游戏速度较慢。