Unity3d HLSL着色器:顶点着色器之外的计算
我正在用Unity/Shaderlab在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
关键字
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
};