Unity Shader Graph - 软粒子 Fade 值,Screen Position.w 分量是啥

141 篇文章 34 订阅
50 篇文章 2 订阅

一般我们直接撸 shader 代码的话,直接拿:深度缓存/纹理的值 减去 片段的值来做过度 即可,这部分代码,以前在做水体、软粒子的shader 也有使用到:

核心的计算 fade 值在这

float fade = saturate(_InvFade * (LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))) - i.projPos.z));

然后今天有位美术同学问我关于 shader graph 上实现 软粒子 效果

然后他在网上找了一个 shader graph 软粒子的连连看:ShaderGraph第13节_软粒子

但是其中的一些用法他不太明白 shader graph 怎么回事
经过一番细心教导,就好了

其中 Screen Position.w 我就不知道是个啥
在这里插入图片描述

然后发现这个 Screen Position 的 .w 分量来和 深度的 ViewSpace Z 来差值

从坐标系来分析,Screen Position 的 .w 该值就是 ViewSpace 片段的 Z 值

再配合 该节点的官方文档描述:
在这里插入图片描述

OK,从描述上看,Raw 模式下的 Screen Position.w 是一个 ClipSpace Position.w 未经过透视除法

未经过透视除法 的 ClipSpace Position.w 就是 -ViewSpaceZ,根据我之前总结的 OpenGL 下的坐标变换:OpenGL Transformation 几何变换的顺序概要(MVP,NDC,Window坐标变换过程),可得知:该值就是 -ViewSpaceZ (注意是个负值,为了方便表示 数值的增长方向是:近小远大的值(注意我说的不是透视近大远小))

在这里插入图片描述

那么根据这个想法,我们可以将 shader graph 中的 Screen Position. w 替换成:-Fragment View Space Position.z ,看看结果如何:
在这里插入图片描述
在这里插入图片描述

OK,结果是一摸一样的

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值