[unity 基础教程]给着色器shader添加透明属性
来源:互联网 发布:qq号码定位软件 编辑:程序博客网 时间:2024/06/16 20:06
我有个shader文件。内容如下
- Shader "HSB_HSV_Colorpicker" {
- Properties {
- _MainTex ("Texture", 2D) = "white" {}
- _HueShift("HueShift", Float) = 0
- }
- SubShader {
- Tags { "RenderType" = "Opaque" }
- CGPROGRAM
- #pragma surface surf Lambert
- #pragma target 3.0
- float3 rgb_to_hsv_no_clip(float3 RGB)
- {
- float3 HSV;
- float minChannel, maxChannel;
- if (RGB.x > RGB.y) {
- maxChannel = RGB.x;
- minChannel = RGB.y;
- }
- else {
- maxChannel = RGB.y;
- minChannel = RGB.x;
- }
- if (RGB.z > maxChannel) maxChannel = RGB.z;
- if (RGB.z < minChannel) minChannel = RGB.z;
- HSV.xy = 0;
- HSV.z = maxChannel;
- float delta = maxChannel - minChannel; //Delta RGB value
- if (delta != 0) { // If gray, leave H & S at zero
- HSV.y = delta / HSV.z;
- float3 delRGB;
- delRGB = (HSV.zzz - RGB + 3*delta) / (6.0*delta);
- if ( RGB.x == HSV.z ) HSV.x = delRGB.z - delRGB.y;
- else if ( RGB.y == HSV.z ) HSV.x = ( 1.0/3.0) + delRGB.x - delRGB.z;
- else if ( RGB.z == HSV.z ) HSV.x = ( 2.0/3.0) + delRGB.y - delRGB.x;
- }
- return (HSV);
- }
- float3 hsv_to_rgb(float3 HSV)
- {
- float3 RGB = HSV.z;
- float var_h = HSV.x * 6;
- float var_i = floor(var_h); // Or ... var_i = floor( var_h )
- float var_1 = HSV.z * (1.0 - HSV.y);
- float var_2 = HSV.z * (1.0 - HSV.y * (var_h-var_i));
- float var_3 = HSV.z * (1.0 - HSV.y * (1-(var_h-var_i)));
- if (var_i == 0) { RGB = float3(HSV.z, var_3, var_1); }
- else if (var_i == 1) { RGB = float3(var_2, HSV.z, var_1); }
- else if (var_i == 2) { RGB = float3(var_1, HSV.z, var_3); }
- else if (var_i == 3) { RGB = float3(var_1, var_2, HSV.z); }
- else if (var_i == 4) { RGB = float3(var_3, var_1, HSV.z); }
- else { RGB = float3(HSV.z, var_1, var_2); }
- return (RGB);
- }
- struct Input {
- float2 uv_MainTex;
- };
- sampler2D _MainTex;
- float _HueShift;
- void surf (Input IN, inout SurfaceOutput o) {
- o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
- float3 hsv = rgb_to_hsv_no_clip(o.Albedo.xyz);
- hsv.x+=_HueShift;
- if ( hsv.x > 1.0 ) { hsv.x -= 1.0; }
- o.Albedo = half3(hsv_to_rgb(hsv));
- }
- ENDCG
- }
- Fallback "Diffuse"
}
我修改
- _MainTex ("Texture", 2D) = "white" {}
- Tags { "RenderType" = "Opaque" }
为
- _MainTex ("Color (RGB) Alpha (A)", 2D) = "white"
- Tags { "Queue"="Transparent" "RenderType"="Transparent" }
.
添加"alpha":
- #pragma surface surf Lambert alpha
.
在o.Albedo后添加如下...
- o.Alpha = tex2D (_MainTex, IN.uv_MainTex).a;
.
大功告成。- [unity 基础教程]给着色器shader添加透明属性
- Unity Shader 表面着色器(Surface Shader)
- 【Unity Shader】一个简单的着色器
- Unity Shader(ShaderLab)着色器简介
- 【Shader】Unity Unlit Shader(无光照着色器)
- unity透明shader
- unity shader 可编程管线(二) 顶点和片段着色器(Vertex Shader and Fragmet Shader)
- Unity Shader 表面着色器边缘光(Rim Lighting)一
- Unity Shader 表面着色器边缘光(Rim Lighting)二
- unity shader 可编程管线(一) 表面着色器SurfaceShader
- unity 固定管线shader转换到顶点片段着色器
- 【Unity Shader】一个简单的顶点/片元着色器
- Unity标准着色器(Standard Shader)参数讲解(一)
- Unity标准着色器(Standard Shader)参数讲解(二)
- Unity标准着色器(Standard Shader)参数讲解(三)
- 【Shader】Unity着色器训练营(1):入门篇
- 【Unity Shaders】学习笔记之为表面着色器添加属性(四)
- Unity着色器常用关键字及属性
- Relationship between java file name and the declared class name in it
- MFC编译链接正确 但运行不出界面
- override和overload的区别
- Find a multiple
- LeetCode-Climbing Stairs
- [unity 基础教程]给着色器shader添加透明属性
- spoj 379
- C基础:函数
- 手机iphone项-测试崩溃问题总结
- C++中的位拷贝和值拷贝
- FATFS文件系统的中文长文件名配置的几个注意事项
- 模板设计模式
- MxGraph导出流程图为图片文件
- jquery学习笔记1表格颜色交叉展示