admin管理员组文章数量:1611919
一般我们直接撸 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,结果是一摸一样的
版权声明:本文标题:Unity Shader Graph - 软粒子 Fade 值,Screen Position.w 分量是啥 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728603818a1165195.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论