news 2026/9/2 13:31:23

【unity shader】误打误撞做出来了一个简单全息投影shader。。。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【unity shader】误打误撞做出来了一个简单全息投影shader。。。

(提示:只看代码请跳过这里)
情况是这样的。。。在学习一位大佬的全息shader时出了意外
大佬文章链接,作者:晨蓝fk
就算是将代码全部复制过来,也无法复原大佬原文图里的效果。
查了一下资料,可能是因为没有对ComputeScreenPos()函数返回值的结果做齐次除法运算?(该函数返回的结果是屏幕空间下顶点的齐次坐标,需要除以w分量或用tex2Dproj函数来采样纹理)
尝试的结果要么扫描线不动要么扫描线移动方式很奇怪(如图)


因为扫描线的原理主要依靠采样纹理后的结果做一次片元剔除,再加上没有原博主的纹理图我无法确定原文的纹理采样结果,就会剔除掉不应该剔除的片元。
同时,扫描线的流向和粗细也不好控制,以飞机模型为例,虽然都是y轴上从低到高,但从头看和从飞机顶上向下看扫描线流向是不一样的(因为原文是计算模型顶点在屏幕空间的位置,流向会随着视角的改变而发生改变,尽管代码上都是uv.y值升高)

就这样改了半天,最后发觉直接放弃在屏幕空间计算顶点的思路,改用模型UV来实现的效果。。。居然还可以?

正文开始

OK,将思路改为用模型UV采样动画纹理
上代码!

Shader"Unlit/HolographicShader"{Properties{_MainTex("Texture",2D)="white"{}_LightTex("全息贴图",2D)="white"{}_NoiseTex("噪音贴图",2D)="white"{}[HDR]_Color("主颜色",Color)=(1,1,1,1)[HDR]_RimColor("边缘光",Color)=(1,1,1,1)_Alpha("透明度",Range(0,1))=0_Speed("扫描线速度",Range(0,15))=1_RandomSpeed("闪一闪的速度",float)=1_CutOut("阙值",Range(0,1.1))=0.1}SubShader{Tags{"RenderType"="Transparent""Queue"="Transparent""IgnoreProjector"="true"}//这个Pass只负责深度写入,看过冯乐乐的《入门精要》就明白//如果没有单独的深度写入就会让渲染出来的模型顶点前后顺序出错Pass{ZWriteonColorMask0}Pass{ZWrite off Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM#pragmavertex vert#pragmafragment frag#include"UnityCG.cginc"structa2v{float4vertex:POSITION;float3normal:NORMAL;float2uv:TEXCOORD0;};structv2f{float2uv:TEXCOORD0;float3worldPos:TEXCOORD1;float3worldNormal:TEXCOORD2;float4vertex:SV_POSITION;};sampler2D_MainTex;float4_MainTex_ST;sampler2D_LightTex;float4_LightTex_ST;sampler2D_NoiseTex;float4_NoiseTex_ST;fixed4_Color;fixed4_RimColor;half_Alpha;half_Speed;half_RandomSpeed;half_CutOut;//顶点着色器部分没什么新鲜事v2fvert(a2vv){v2fo;o.vertex=UnityObjectToClipPos(v.
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 13:30:40

Shell中常用的几种运算,收藏自用

文章目录一、算数运算符1、加法 2、减法 -3、乘法 *4、除法 /5、求余 %6、幂运算7、自增运算 8、自减运算 - -二、算数运算命令1、(())运算,效率高2、let 运算3、expr 使用反引号,运算符必须用空格隔开4、 bc 计算器5、 declare -i三、比较运算四、逻辑运…

作者头像 李华
网站建设 2026/9/2 13:27:45

VHDL实现LDPC比特翻转解码器:从算法原理到FPGA硬件设计

简介:本资源是一套基于比特翻转算法的LDPC码硬件解码器VHDL实现方案,面向通信工程、数字电路设计及FPGA开发领域的初学者与进阶实践者,聚焦低复杂度LDPC解码器的可综合逻辑设计与算法映射。压缩包共9个文件,含8个MATLAB脚本&#…

作者头像 李华
网站建设 2026/9/2 13:27:00

170、51单片机水塔水箱水位加水排水检测报警设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+任务书+开发资料+元器件清单等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、Proteus仿真 七、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码…

作者头像 李华
网站建设 2026/9/2 13:26:51

用友BIP日志与监视全解析:五大模块助力运维排障

当我们日常维护用友BIP(YonBIP)这类大型企业数智化平台时,最怕的不是功能不会用,而是系统出了异常却不知道从哪里入手排查。任务跑失败、业务数据被误改、用户登录异常、系统响应变慢,这些问题如果只靠人工翻文件、看数…

作者头像 李华
网站建设 2026/9/2 13:23:25

Dynamix《Sunset Toybox》MEGA13攻略:双押与侧轨读谱系统练法

之前在 Dynamix 里挑战《Sunset Toybox feat.桃雛なの》的 MEGA13 谱面时,反复卡在双押断连、侧轨漏读和副歌段手忙脚乱这几个环节上。网上的讨论大多集中在分数截图和个别的躲避姿势,缺少一套能从零开始上手的完整思路。所以这篇文章决定把这首歌从背景…

作者头像 李华