Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别

这篇具有很好参考价值的文章主要介绍了Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


起因

因另一个TA同学问了一个问题
我抱着怀疑的心态,测试了一下
发现 varying 中的 sv_position 和 texcoord 的值再 fragment shader 阶段还真的不一样
而且 sv_position 还不是简单的 clipPos/clipPos.w 的操作

因此我自己做了一个试验:

Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别,unity,unity-shader,unity,sv_position,texcoord

结果还是不一样的

Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别,unity,unity-shader,unity,sv_position,texcoord


搜索发现

无意发现 [Unity]屏幕空间(视口)坐标(viewport coordinate)的几种计算方法对比分析 这篇文章中的:

Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别,unity,unity-shader,unity,sv_position,texcoord

也就说, clipPos to fragment shader 后的值是:x: [0~width], y: [0~height]
因此,fragment shader 中 clipPos.xy / _ScreenParams.xy = ScreenPos_Normalized ,也就是 x: [0~1], y: [0~1]


查看MSDN的 dx10 文档

查看了 dx10 的 语义 文档,发现有如下说明


Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别,unity,unity-shader,unity,sv_position,texcoord


Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别,unity,unity-shader,unity,sv_position,texcoord


OK,果然返回的是像素坐标,也就是说: SV_Position 在 fragment shader 使用时,就是 x : [0~width], y : [0~height]


最终 texcoord 和 sv_position 转为 0~1 的 normalized 坐标对比效果

shader 如下:

Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别,unity,unity-shader,unity,sv_position,texcoord

可以看到转换成了,一模一样
Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别,unity,unity-shader,unity,sv_position,texcoord文章来源地址https://www.toymoban.com/news/detail-677900.html


References

  • [Unity]屏幕空间(视口)坐标(viewport coordinate)的几种计算方法对比分析
  • 语义

到了这里,关于Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Unity Shader】Shader Graph

    【Unity Shader】Shader Graph

    shader graph 入门: (对基础内容进行详细介绍) Shader Graph入门-CSDN博客 unity-shader(入门)_unity3d shader-CSDN博客 各种效果的节点配置: 【unity造轮子】Unity ShaderGraph使用教程与各种特效案例(2023/12/1更新)_unity特效-CSDN博客 大佬文章里所用的PBR Master更新后已经没有了,所以参考

    2024年02月01日
    浏览(14)
  • Unity Shader variants (shader 变体)

    Unity Shader variants (shader 变体)

    官方地址 https://docs.unity3d.com/cn/2022.2/Manual/SL-MultipleProgramVariants.html 教程可以看这里 https://www.jianshu.com/p/48ad75f0b4b9 https://www.jianshu.com/p/3e6b84317097 变种用我自己的理解就是 能用程序控制的shader 举个例子 这里声明了 a b c d 四个变量(其实是开关 下面会说) 记住 #pragma multi_compil

    2024年02月12日
    浏览(30)
  • Unity | Shader基础知识(第一集:unity中最简单的shader)

    Unity | Shader基础知识(第一集:unity中最简单的shader)

    目录 一、unity的shader 二、创建一个shader(在创建时,选前三种都可以) 三、内容解读 1.shader一直都在 2.我们写shader在写什么 四、没有被干预的shader(最简单的shader) 相关阅读 编写着色器概述 - Unity 手册 一、unity的shader unity写的shader并不是真正意义上的shader。 官方解释:

    2024年02月04日
    浏览(11)
  • 【Unity Shader】Unity阴影

    【Unity Shader】Unity阴影

    记录下在unity中如果想实现阴影,有哪些路子可以选择,目前看有两种 1.经典的shadowmap 2.planar projection 如果开启renderer组件的cast shadows为on,开启平行光的light组件的shadow type,那么就会在物体shader中寻找LightMode=ShadowCaster的Pass进行渲染 场景有两个物体,平面和球体,使用unity内

    2024年02月09日
    浏览(10)
  • Unity | Shader基础知识(什么是shader)

    Unity | Shader基础知识(什么是shader)

    Shader的中文名叫着色器。 着色器的作用: 这个世界是3D的,包括在Unity的场景中,我们建的球球,方块块之类的,都是3D的,但是,屏幕是2D的,把3D的东西,通过颜色的汇总,显示在2D的屏幕上。 想知道颜色是怎么合到一起的,我们就找个图片,把它拆开看。 因为世界上所有

    2024年02月15日
    浏览(21)
  • Unity Shader - UI/Default shader 优化示例

    Unity Shader - UI/Default shader 优化示例

    Unity : 2020.3.37f1 Pipeline : BRP 做性能优化都是慢慢都扣出来的 当然,优先处理 top 热点的 但是一些就算不是 top,但是像素面积有多,overdraw 也多不可小觑 当然,如果你能找到性能热点,那还是优先分析一下哪些 shader 占的 cycles 最高,和 A, L/S, T, 最高 还有 register 的数量尽可能

    2024年02月07日
    浏览(14)
  • Unity中Shader裁剪空间推导(在Shader中实现)

    Unity中Shader裁剪空间推导(在Shader中实现)

    我们在上一篇文章中,进行了正交相机视图空间下转化到裁剪空间下的矩阵推导。 Unity中Shader裁剪空间推导(正交相机到裁剪空间的转化矩阵) 我们在这篇文章中,在Unity的Shader中实现一下。 OpenGL下: [ 2 w 0 0 0 0 2 h 0 0 0 0 2 n − f n + f n − f 0 0 0 1 ] begin{bmatrix} frac{2}{w} 0 0 0

    2024年02月03日
    浏览(8)
  • Unity中Shader观察空间推导(在Shader中实现)

    Unity中Shader观察空间推导(在Shader中实现)

    在上篇文章中,我们是实现了Shader中的观察空间推导。 Unity中Shader观察空间推导 我们在这篇文章中,根据上篇文章的推导,在Shader中实现观察空间矩阵的推导。 P view = [W view ] * P world P view = [V world ] -1 * P world P view = [V world ] T * P world 在属性面板定义测试使用到的 摄像机坐标

    2024年01月24日
    浏览(9)
  • 【Unity Shader】Unity前向渲染

    ForwardBase Pass(优先渲染),渲染一个逐像素平行光和所有的顶点/球面调和光,阴影只和平行光有关系,那阴影应该是这个Pass中实现的 ForwardAdd Pass(需要和Base配合使用,否则不生效),渲染剩余全部逐像素灯光 Unity会根据场景中各个光源的设置以及这些光源对物体的影响程

    2024年02月08日
    浏览(16)
  • Unity Shader:常用的C#与shader交互的方法

    Unity Shader:常用的C#与shader交互的方法

      俗话说久病成医,虽然不是专业技术美术,但代码写久了自然会积累一些常用的shader交互方法。零零散散的,总结如下:   有时候我们需要改变ui的一些属性,从而实现想要的效果。通常UGUI上有如下属性,而我们想要改变,就需要获取到Material这个属性:   这里拿Image来举

    2024年02月14日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包