pragma target 3.0
某个Shader中添加了如下指令:
pragma target 3.0
那么当此Shader在不支持此特性时会自动Fallback到pragma target 2.0吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
某个Shader中添加了如下指令:
那么当此Shader在不支持此特性时会自动Fallback到pragma target 2.0吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
从题主的截图中可以看到,在没有使用Replace Shader的时候,Plane渲染了两次,一次是自身Shader,一次是Projector Shader。在使用了Replace Shader之后,FrameDebugger里面看到Plane只渲染了一次,应该是Projector没有生效。因为只有Opaque的那个SubShader起作用了,所以FrameDebugger里面看到的是“ Blend One Zero , ZWrite On”,这个是正常的,只是跑到半透明渲染队列里面去了,这个不太正常。我尝试把题主的Replace Shader里面的两个SubShader调换了一下顺序,结果又跑到不透明渲染队列里面去了。。。
在google里面搜索了一下,发现Unity论坛里面有2个帖子跟题主的问题比较相关,https://forum.unity.com/threads/replacement-shaders-and-projectors.291275/,这个帖子里有提到说Unity5.6.4使用了Replace Shader就不支持Projector。
https://forum.unity.com/threads/projectors-and-replacement-shaders.463452/,这个帖子说是因为之前有个Bug,Replace Shader会使受到Projector影响的物体即使Tag不匹配也进行渲染,所以Unity修bug把Projector改成使用了Replace Shader就不起作用了。。。
https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html
When writing either Surface Shaders or regular Shader Programs, the HLSL source can be compiled into different “shader models”. To allow the use of more modern GPI functionality, you must use higher shader compilation targets.
Note: Using higher shader compilation targets may prevent the shader from working on older GPUs or platforms.
题主可以自己理解下,我的理解和体会是,如果不支持的指令或者特性,不会fallback,会直接粉红……
随手贴上之前一个问题的回答:
关于 工程里的 Graphics API 的选择问题
shader target其实本身就是一个由Unity抽象出来的概念(或者说是参照DX的Shader Model抽象出来的概念),实则对应的是Graphics API。它同样不仅代表了api的变化,也代表了硬件能力的提升。
说句不好听的,你要使用shader target 3.0的vertex texture sampling,还指望Unity帮你在shader target 2.0的机器上自动转换成pixel texture sampling?
当然,最好的办法就是自己指定了fallback。
目前的思路 只能 参考一个简化迷雾的方式,
因为这边地图还算平, 所以可以用这个方式。
和地面一样高度放个mesh面片, 然后shader渲染层级 调成这样:
Tags{ "Queue" = "Transparent+150" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
这么想来 这个方式稍微改改,还能做简单的多云天气效果。 (混合方式可能还有改改,美术说建筑有些颜色失真)
额
~~~这~~~~~感谢!看来只能去找找看别的投影方案了
有没有可能是设置问题,开启Linear的时候,下面会报一行warning。