unity 半透明效果shader
Shader "Unlit/半透明"
{Properties{_Diffuse("Diffuse",Color) = (1,1,1,1) // 漫反射_MainTex("MainTex",2D) = "white"{} // 2D纹理贴图_AlphaScale("Alpha Scale",Range(0,1)) = 1 // 控制Alpha参数}SubShader{Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } // 渲染顺序设置TransparentLOD 100Pass // 用两个pass通道来处理,防止出现渲染错误,第一个pass通道 每个pass通道都会渲染一次{ZWrite On // 写入深度 为了确认渲染顺序ColorMask 0 // 掩码遮罩 代表这个pass通道不写入任何颜色值}Pass // 第二个pass通道{Tags{"LightMode" = "ForwardBase"}ZWrite Off // 关闭ZWrite(深度写入)Blend SrcAlpha OneMinusSrcAlpha // 源颜色因子 正常透明混合CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct v2f {float4 vertex :SV_POSITION; // 输出顶点信息fixed3 worldNormal : TEXCOORD0;float3 worldPos:TEXCOORD1;float2 uv:TEXCOORD2;};fixed4 _Diffuse;float _AlphaScale;sampler2D _MainTex;float4 _MainTex_ST; // 是MainTex的Tiling和Offset两个属性 不需要在外面定义v2f vert(appdata_base v) // 顶点着色器{v2f o; // 用这个结构体o.vertex = UnityObjectToClipPos(v.vertex); // 顶点信息从模型转到裁剪空间再放到输出结构体fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); // 法线从模型变换到世界坐标o.worldNormal = worldNormal;o.worldPos = mul(unity_ObjectToWorld, v.vertex); // 顶点信息从模型转到世界坐标系//o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; // 为了让MainTex的Tiling和Offset两个属性能影响到uvo.uv = TRANSFORM_TEX(v.texcoord, _MainTex); // unity纹理函数,和上面效果一样return o;}fixed4 frag(v2f i) : SV_Target // 片元着色器 片元高光反射{fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; // 环境光fixed4 texColor = tex2D(_MainTex, i.uv); // 采样这个图// 漫反射//fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);fixed3 worldLightDir = UnityWorldSpaceLightDir(i.worldPos);fixed3 diffuse = texColor.rgb * _LightColor0.rgb * _Diffuse.rgb * max(0, dot(worldLightDir,i.worldNormal) * 0.5 + 0.5); // 漫反射公式 图的纹理采样乘进来,纹理属于漫反射fixed3 color = ambient + diffuse;return fixed4(color, texColor.a * _AlphaScale); // texColor的a值就是颜色通道的值 乘上_AlphaScale来控制}ENDCG}}FallBack "Transparent/VertexLit"
}
unity 半透明效果shader相关推荐
- unity shader 入门 全透明与半透明效果实现
片元函数的fixed4类型的返回值的第4位即为阿尔法值,0代表完全不显示(透明),1代表完全显示.中间的数值代表半透明.但只修改这个值是不能直接修改透明度的,因为还要对队列等进行修改. 本文介绍透明度 ...
- unity 半透明混合问题_Unity Shader教程 八、半透明物体的初步探索
我必须要宣布一个不幸的消息:我们得抛弃跟随我们许久的Sakura.shader,而创建一个新的shader了.它已经完成了自己的使命. 重新写一个shader吧,可以是一个在附加篇写的那种,这次我不会 ...
- Unity镜子效果的实现(无需镜子Shader)
Unity镜子效果制作教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- Unity从零开始实现一个全息效果Shader
Unity从零开始实现一个全息效果Shader 前言 开始捣鼓 一.准备阶段 二.先从透明效果开始 三.顶点故障效果 四.扫描线效果 五.菲尼尔反射效果 六.颗粒效果 七.颜色故障效果 CustomE ...
- Unity ASE制作彩色流光马赛克 像素风 舞池DJ台效果Shader
Unity ASE制作彩色流光马赛克 舞池DJ台效果 Shader@TOC 项目需求想写一个舞池DJ台的效果,尝试写了发现制作出好玩的效果. 首先想要得到这种棋盘格的效果,想到了马赛克像素平铺,平铺数 ...
- Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要)
Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要 写在前面 实验场景 实验1:红(不透明)+蓝(不透明)+默认渲染顺序(先渲染蓝Cube) 实验2:红(不透明+优先渲染)+蓝( ...
- Unity 透明效果
文章目录 透明度测试(Alpha Test) 透明度混合(Alpha Blending) 深度写入的半透明效果 Unity预定义渲染队列 混合 Unity 中实现透明效果一般有两种方法 透明度测试(A ...
- 透明效果 -- Shader入门精要学习(7)
透明效果 对于不透明的物体,不考虑其渲染顺序也能得到正确的结果,这是由于强大的深度缓冲的存在 几个概念: 深度缓冲(z-buffer):用于解决可见性问题,它可以决定哪个物体的哪些部分会被渲染在前面, ...
- Unity学习之Shader
Shader 是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序.其中Vertex Shader(顶点着色器)主要负责顶点的几何关系等的运算,Pixel Shader(像素着色器)主要负责片元颜色 ...
最新文章
- 2018年中国高被引学者榜单发布,清华入榜学者数位列高校第一
- 大学考试计算机基础应用试题及答案,大学计算机基础考试试题及答案
- SQL、LINQ、Lambda 三种用法
- 【面向对象】实现继承的正确实践和不当实践
- Linux常用命令—文件处理命令—链接命令
- Spark团队开源新项目MLflow发布0.2版本,内置TensorFlow集成
- iteritems python3_python3 items() 与 python2 中iteritems()的区别
- 设计模式---工厂方法模式(c++实现)
- SQL:从入门到“精通”
- 百度富文本ueditor实现导入word并将内容显示到编辑器中
- Unity 无法识别视频
- 什么是生命?演讲原稿
- 原版win7 install.wim在哪?
- 实验11-1-7 藏头诗 (15分)
- 将被雪藏的AI算法,抛开快手和火山,YouTube的儿童APP值得学习吗?
- MySQL数据库——SQL函数
- Docker 启动Redis
- 【bzoj4605】崂山白花蛇草水 权值线段树套KD-tree
- 3.2 项目(多肉)
- 压力传感器的四个初始误差
热门文章
- 【大爱】C++STL 常用 函数 用法(转载自duoduo3_69)
- 案例研究:使用 ETW 和 Netmon 解决未知 USB 设备的问题
- Linux on IBM Cloud - Port Knocking
- html书写表单laber,day02_HTML表格列表表单
- Vue3+Vite项目配置Eslint+Prettier+Husky+Lint-Staged+Commitlint
- No installations recognized以及nvm use失败问题
- C#方法讲解——飞行棋画地图
- 基因功能分析——哈佛大学
- Java集成Hutool实现导出Excel功能
- 今日头条视频地址提取 谷歌插件