栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

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

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

  • Unity Shader - BRP - Soft Particle - 软粒子
  • Unity 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,结果是一摸一样的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901928.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号