TA-Shader-文件 Unity Shader Graph 中深度纹理(Depth Texture)和屏幕空间坐标(Screen Position)
发布于
2022-4-11
2209
1
TA资源类型
TA资源类型: 算法思路 
shader资源类型: 其它 
适用引擎: unity 
资源介绍: 转自 王二 https://zhuanlan.zhihu.com/p/493733502

您需要 登录 才可以下载或查看,没有账号?注册

x
深度纹理深度纹理是渲染过程中产生的,具体来说,场景中物体从模型空间经过 MVP 矩阵变换到 NDC,z 坐标的值就存储了其深度信息,将这个值缓存,经过一些数值变换就可以作为深度纹理使用。从 Shader Graph 的一些节点可以很好的了解深度纹理
  • Scene Depth Node
    根据官方文档:Scene Depth Node,有三种采样模式:Linear01,Raw,Eye。从最基本的 Raw 模式开始说。 v2-a347369ad6acc70c7db48b3e5d93a018_720w.jpg

    《Unity Shader 入门精要》13.1


    Raw 模式的深度值由上图 NDC 中的 z 坐标变换得到,将其值域 [-1, 1] ,映射到 [0, 1] 得到,具体计算为: image.png
    由于从视空间到 NDC 经过透视投影,所以 Raw 模式下的深度值是非线性的,有时需要线性空间下的深度值,则需要 View Space 下的 Z 坐标,也就是 Eye 模式。至于 Linear01 模式,就是通过 View Space 下的 Z 坐标,将其值域从
    (对应近平面和远平面值),映射到
    (准确的说是 ),具体计算为:
    下面再梳理一下三种模式的关系:首先,从视空间到裁剪空间,左乘投影矩阵(推导见:王二:[GAMES101] 投影变换和模型变换 作业1),
    可以得到
    (加上了负号是因为 Unity 中 视空间的 z 轴与其他空间相反,使用右手系)再经过透视除法从 Clip Space 变到 NDC
    结合 (1)(2)可以得到之间的关系
    (同样加上了负号)

    (TODO)用 Shader Graph 验证发现有问题,目前还不知道什么原因,的关系是对的,但 不对 用 Shader Graph 验证失败
    屏幕空间坐标Screen Position Node 在 shader graph 里有四种模式
  • Raw
    未经过透视除法的,左下角是(0,0)右上角是(1,1)的屏幕空间<blockquote>IN.ScreenPosition = (clip.xy * 0.5f + 0.5 * clip.w, clip.z, clip.w);  // clip 为裁剪空间坐标
    Raw

    为什么会有 0.5 * clip.w 这个单看起来很奇怪的项,与 ComputeScreenPos 函数一样,为了提高效率,在顶点着色器中使用这个函数,就必须将除以 w 分量的步骤放到片元着色器,因为裁剪空间不是一个线性空间,而从顶点着色器到片元着色器的插值是线性插值。
  • Default
    经过透视除法的,左下角是(0,0)右上角是(1,1)的屏幕空间 float4(IN.ScreenPosition.xy / IN.ScreenPosition.w, 0, 0);Default


  • Center
    经过透视除法的,左下角是(-1,-1)右上角是(1,1)的屏幕空间 float4(IN.ScreenPosition.xy / IN.ScreenPosition.w * 2 - 1, 0, 0); Center


  • Tiled
    经过透视除法的,分成上下均等的四块组成,每块左下角是(0,0)右上角是(1,1)的屏幕空间 frac(float4((IN.ScreenPosition.x / IN.ScreenPosition.w * 2 - 1) * _ScreenParams.x / _ScreenParams.y, IN.ScreenPosition.y / IN.ScreenPosition.w * 2 - 1, 0, 0)); Tiled最终的屏幕空间坐标由 NDC 缩放得到,NDC 的 xyz 分量值属于
    ,将其缩放到 ,z 和 w 分量与裁剪空间保持一致(根据 ComputeScreenPos 函数),下面是计算公式


  • 收模型,杂志,教程,插图,插件,软件,拿来卖。

    使用道具 举报 登录

    回复 <
    esll7  发表于 2022-4-13 14:12:04  
    2#
    谢谢分享
    回复 收起回复
    使用道具

    快来发表你宝贵的意见吧!

    DiGiToTo 实名

    通过了实名认证的内容创造者

    大自然的搬运工

    主题
    1347
    精华
    588
    超神
    7
    扩散
    0
    微金
    2090
    智慧
    166
    余额
    454
    在线时间
    7790 小时

    翡翠剑 【绝】红龙战甲 学徒法袍 赤铁剑 英雄盾 铁剑 钢盾 元素之盾 钢剑 长剑 水晶剑 死亡刃 阿鼻剑 鬼道剑 修罗剑 天子剑 天道剑 元素铜币 元素银币 元素金币 元素秘币 元素圣币 短杖 圣杖-【安东尼达斯】 【绝】珍珠戒指 女皇之泪 长枪 双杀 巨浪 龙枪 深渊 战神 魔神战甲 元素之铠 黄金圣衣 相对时空 征战护手 【绝】结界玄晶 神界之石 六界传音 【绝】大天使权杖 微光灵石 圣盾-【瓦雷利亚】 【绝】盘古斧 魔镜 裁决 神速靴 火元素 暴风之眼 元素之钻 秘法之钻 血精之钻 波塞冬之叉 圣光之钻 小苹果 大菠萝 再造药水 黄色药水 蓝色药水 赤色药水 微库VIP 翠晶之钻 紫晶之钻 扩散者 钢铁矿镐 秘银矿镐 黄金矿镐 彗星钛晶矿 阿尔法晶矿 泰坦高能矿 守望者【EX】 守望者【赤炼】 守望者【天使】 【绝】守望者【死神】 希望人没事 吃鸡头盔 吉普车 吃鸡甲 守望者【猎空】 生命之缘 自然之怒 原初葫芦 冰晶剑 玫瑰金项链 烈-红龙战甲 【绝】真-红龙战甲 【绝】千人纪念徽章 橙色药水 青色药水 一星珠 二星珠 七星珠 赛博空间 天体物理 宏观物质 无色原始矿 绿母翠晶矿 超星赤辉矿 怀特紫星矿 飞雷靴 现实宝石 灵魂宝石 心灵宝石 时间宝石 力量宝石 粒粒皆辛苦 【绝】赤影战盔 【绝】赤影战斧 莆田鞋 魔法扫帚 朝阳之光 光明勋章 魔法帽 【绝】烈龙战甲 【绝】魔焰斧 【绝】碧焰指环 烈火长枪 烈火匕首 粉御之钻 青戒之钻 黄金沙鹰 金阳之水 紫雷之水 青息之水 粽子 天蓝靴 光虹靴 紫霞之秋 源力法杖 【魔剑】龙葵之魂 绿色药水 紫色药水 光之杖 水晶杖 血晶杖 守望者【D.Va兔子】

    快速回复 返回顶部 返回列表