Unity3d HLSL着色器:顶点着色器之外的计算

Unity3d HLSL着色器:顶点着色器之外的计算,unity3d,shader,hlsl,Unity3d,Shader,Hlsl,我正在用Unity/Shaderlab在HLSL中编写着色器。我需要能够通过在空间中定义一些点,从外部脚本控制该着色器。我使用关键字uniform来执行此操作: uniform float3 _WandPosition; uniform float3 _WandNormal; 由于位置在统一空间中给定,我需要将其转换为对象空间: Varyings vert(Attributes IN) { Varyings OUT; // ... Some other calculation

我正在用Unity/Shaderlab在HLSL中编写着色器。我需要能够通过在空间中定义一些点,从外部脚本控制该着色器。我使用
关键字
uniform来执行此操作:

uniform float3 _WandPosition;
uniform float3 _WandNormal;
由于位置在统一空间中给定,我需要将其转换为对象空间:

Varyings vert(Attributes IN)
{
    Varyings OUT;

    // ... Some other calculations

    OUT.wandPositionOS = TransformWorldToObject(_WandPosition);
    OUT.wandNormalOS = TransformWorldToObjectDir(_WandNormal);
    return OUT;
}
将结果保存在纹理中(不理想…):

这意味着对每个顶点、每个帧进行此操作。我想对所有顶点做一次,可以吗? 更理想的情况是,是否只有在更新值时才能执行此操作


谢谢

如何设置
\u wand position
\u wand normal
?您是否已经使用相应的。。。tbhI简单使用的着色器没有那么多:
Shader.SetGlobalVector(“\u WandPosition”,position)。不确定,但这可能是一个简单的解决方案。我要做一些测试!谢谢:)是的,我想你会做一个像“外部”这样的计算,@EyapWell我想这取决于对该着色器的所有实例计算一次,还是在每个实例中计算一次,性能更好…@derHugo嗯,经过一些测试,当使用(1,1,1)的比例时,它工作正常。当比例不一致时,我仍然有一些问题。除此之外,我没有看到任何FPS的变化,在PC上使用这个,而不是我所描述的。。。在手机上不使用TEXCOORD可能仍然很有趣,明天我将对此进行测试。
struct Varyings
{
    // ...
    float3 wandPositionOS : TEXCOORD3; // NOT OPTIMIZED
    float3 wandNormalOS : TEXCOORD4; // NOT OPTIMIZED
};