如何解决HLSL 着色器:顶点着色器之外的计算
我正在使用 Unity/Shaderlab 在 HLSL 中编写着色器。我需要能够通过在空间中定义一些点来从外部脚本控制这个着色器。我这样做是使用 keyword
制服 :
uniform float3 _WandPosition;
uniform float3 _WandNormal;
由于位置是在 Unity 空间中给出的,我需要将其转换为对象空间:
Varyings vert(Attributes IN)
{
Varyings OUT;
// ... Some other calculations
OUT.wandPositionOS = TransformWorldToObject(_WandPosition);
OUT.wandNormalOS = TransformWorldToObjectDir(_WandNormal);
return OUT;
}
将结果保存在纹理中(这并不理想...):
struct Varyings
{
// ...
float3 wandPositionOS : TEXCOORD3; // NOT OPTIMIZED
float3 wandNormalOS : TEXCOORD4; // NOT OPTIMIZED
};
这意味着这个操作是针对每个顶点、每个帧进行的。我想为所有顶点做一次,这可能吗? 更理想的是,是否可以仅在值更新时才这样做?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。