结果图
以上效果用shadergraph同样也可以实现,因为这个渲染里面只存在一个pass。
全息投影技术重点在于模型要产生不依赖与模型uv的纹理效果。
计算顶点在屏幕中的位置是个不错的选择。
使用ComputeScreenPos(i.vertex);函数可以获得顶点在屏幕中的坐标,以这个坐标来采样,产生的效果就相当于当前的屏幕盖了一张纹理图。同时,如果想要产生随视角变化的纹理,可以考虑使用模型在世界空间中的坐标的两个值来做uv坐标,这同样是脱离模型uv的。
为了让效果更加生动,采用了_Time来进行uv平移,注意这里的_Time使用,要用原来的值加上_Time的某一维,而不能直接用_Time否则每个顶点的y坐标采样会是一样的。
以下为shader代码:其中我们用了一张贴图来产生纹理,还有张噪波贴图用来模拟随机数,产生全息不稳定 的效果。
Shader "Unlit/ghost"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {
}
_LightTex("动画纹理",2D)="white"{
}
_NoiseTex("噪波",2D)="white"{
}
[HDR]_BorderColor("边缘色",Color)=(1,1,1,1)
_Alpha("透明度",Range(0,