【Shader】利用mask图片中的不同颜色通道改变模型显示
2018-01-31 10:37
543 查看
Shader "Unlit/MaskNormalTex" { Properties { _MainTex ("Texture", 2D) = "white" {} _MainNormalTex("NormalTex",2D) = "bump"{} _Mask("Mask",2D) = "white"{} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { Tags{ "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" struct a2v { float4 vertex : POSITION; float2 uv : TEXCOORD0; float3 normal:NORMAL; float4 tangent:TANGENT; }; struct v2f { float4 uv : TEXCOORD0; float4 vertex : SV_POSITION; float3 lightDir : TEXCOORD1; float3 viewDir : TEXCOORD2; }; sampler2D _MainTex; float4 _MainTex_ST; sampler2D _MainNormalTex; float4 _MainNormalTex_ST; // 添加遮罩图片 sampler2D _Mask; v2f vert (a2v v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); // 缩放+偏移 o.uv.xy = TRANSFORM_TEX(v.uv,_MainTex); o.uv.zw = TRANSFORM_TEX(v.uv,_MainNormalTex); // 构造切线空间,此处需要计算副切线才能使用float2x3矩阵构造 // 新的切线空间名字是:rotation TANGENT_SPACE_ROTATION; o.lightDir = mul(rotation,ObjSpaceLightDir(v.vertex )); o.viewDir = mul(rotation,ObjSpaceViewDir(v.vertex)); return o; } fixed4 frag (v2f i) : SV_Target { fixed3 tangentLightDir = normalize(i.lightDir); fixed3 tangentViewDir = normalize(i.viewDir); fixed4 packedNormal = tex2D(_MainNormalTex,i.uv.zw); fixed3 tangentNormal = UnpackNormal(packedNormal); // tangentNormal.z = sqrt(1-saturate(dot(tangentNormal.xy,tangentNormal.xy))); float3 albedo = tex2D(_MainTex,i.uv.xy).rgb; fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT; fixed3 diffuse = _LightColor0.rgb * albedo* max(0,dot(tangentNormal,tangentLightDir)); // 可利用mask图片不同通道中的不同属性来改版模型的显示,此处只使用了r通道 fixed maskValue = tex2D(_Mask,i.uv.xy).r; fixed3 halfDir = normalize(tangentLightDir+tangentViewDir); fixed3 specular = _LightColor0.rgb * pow(max(0,dot(tangentNormal,halfDir)),20) * maskValue; return fixed4( diffuse+ambient+specular,1.0); } ENDCG } } }
相关文章推荐
- Cocos2D-X shader(四) 利用shader改变图片色相(Hue)
- iOS利用NSAttributeString实现不同颜色大小显示的方法
- 利用layer前端组件1.8版本和3.0版本去做显示图片效果的不同
- Cocos2D-X shader(四) 利用shader改变图片色相(Hue)
- 设置UIButton中的文字和图片,设置UILabel的文在显示不同颜色
- python3-opencv库(3)--图片颜色空间转换,利用HSV进行物体跟踪,图像通道分离与合并
- VC对话框加载图片、改变背景颜色、画图、显示隐藏控件
- 应用键横竖屏切换;label中显示图片;不同类型设备适配的代码;UIWebView字体大小、字体颜色、背景色的设置;
- 利用颜色直方图计算8张图片的相似度,并按相似度的高低依次显示出图片
- 鼠标悬停在表格任意一个<td>上改变整行背景颜色并在第一个td显示象征性的某图片
- 利用TextArea 定义不同的显示颜色或者显示格式
- Fragment shader---实现半透明着色(物体遮住与非遮住部分都显示,并显示不同的颜色)
- 改变Label不同的字显示不同的颜色
- 利用js实现按星期显示不同图片
- 选择后显示不同的颜色和图片的方法
- IE、火狐浏览器鼠标滑动事件改变背景图片和改变不同显示信息
- 读取图片的三个颜色通道并显示
- iOS 点击cell改变背景颜色或者图片&&cell中其他部分取消高亮显示
- textview中显示不同颜色的字体与显示图片
- 如何利用TTThumbsViewController实现显示不同数量的图片?