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


起因

因另一个TA同学问了一个问题

我抱着怀疑的心态,测试了一下

发现 varying 中的 sv_position 和 texcoord 的值再 fragment shader 阶段还真的不一样

而且 sv_position 还不是简单的 clipPos/clipPos.w 的操作

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

结果还是不一样的


搜索发现

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

也就说, 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 的 语义 文档,发现有如下说明




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


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

shader 如下:

可以看到转换成了,一模一样


References

相关推荐
心之所向,自强不息3 小时前
【Unity Shader编程】之让画面动起来
unity·游戏引擎
不伤欣1 天前
游戏设计模式 - 子类沙箱
游戏·unity·设计模式
快乐觉主吖1 天前
Unity的日志管理类
android·unity·游戏引擎
WarPigs2 天前
Unity性能优化笔记
笔记·unity·游戏引擎
T.D.C2 天前
【业务框架】3C-相机-Cinemachine
unity
Clank的游戏栈2 天前
Unity基于GraphView的可视化关卡编辑器开发指南
unity·编辑器·游戏引擎
海尔辛3 天前
Unity UI 性能优化--Sprite 篇
ui·unity·性能优化
XR-AI-JK3 天前
Unity VR/MR开发-VR设备与适用场景分析
unity·vr·mr
ChiLi_Lin3 天前
Unity异常上报飞书工具
unity·游戏引擎·飞书
地狱为王4 天前
基于VLC的Unity视频播放器(四)
unity·游戏引擎·音视频