首页 > 编程知识 正文

怎么用ps抠图,unity2d

时间:2023-05-06 03:51:32 阅读:13162 作者:273

先说实现的效果

改变相机照片画面中指定像素的透明度,实现键控效果

根据正文节奏,在5分钟内实现效果(前提:电脑上有摄像头)

1 .戴上装置的照相机这样戴

using System.Collections; using system.collections.generic; 用户单元引擎; using UnityEngine.UI; public class mt _ camera : mono behaviour { publicgameobjectraw _ image; //此raw_Image RawImage cam_Video; //Toggle tog_togCamera; 网络摄像头纹理纹理; public int w_cam=640; 公共int h _ cam=480; 私有void awake ()//ui root=game object.find (canvas _ ui ).transform; //camroot=game object.find (canvas _ web cam ).transform; } private void OnEnable ()//cam _ video=raw _ image.getcomponentrawimage ); //changecam(false ); } private void Start () cam _ video=raw _ image.getcomponentrawimage ); 更改摄像头(false; //tog _ tog camera=ui root.find (tog _ change cam ).GetComponentToggle ); //transform.getcomponentcanvasscaler (.reference resolution=new vector2(screen.width,Screen.height ) ); //tog _ tog camera.onvaluechanged.addlistener (change cam; //tog_togCamera.isOn=true; //显示相机数据以适应屏幕分辨率//不改变宽度,缩放高度以自适应显示相机数据//cam _ video.rect transform.size delta=new vector2(h _ cam * sstand ) //宽度不变,变焦宽度为相机数据//cam _ video.rect transform.size delta=new vector2(screen.height,w _ cam * screen.widen ) } ienumeratorcallcamera (boolison ) yieldreturnapplication.requestuserauthorization (user authorization.web cam ); if (应用程序. hasuserauthorization (用户授权. web cam ) ) if ) camtexture!=null(camtexture.stop ); web cam设备[ ] camera devices=web cam texture.devices; 字符串设备名称=' '; for(intI=0; i cameraDevices.Length; I )//前置摄像机if (web cam texture.devices [ I ].isfrontfacingison ) device name=web cam texture.devices [ I ].name; turncam(Ison ); 布雷克; //后置摄像头else if (那么)! web cam texture.devices [ I ].isfrontfacingamp

; !isOn) { deviceName = WebCamTexture.devices[i].name; TurnCam(isOn); break; } } camTexture = new WebCamTexture(deviceName, w_cam, h_cam, 12); cam_Video.texture = camTexture; print("**********"+cam_Video.texture.width+ "**********" + cam_Video.texture.height); camTexture.Play(); } } /// <summary> /// 翻转plane,正确显示摄像头数据 /// </summary> /// <param name="isOn">If set to <c>true</c> is turn.</param> public void TurnCam(bool isOn) {#if UNITY_IOS || UNITY_IPHONE if (!isOn) cam_Video.rectTransform.localEulerAngles = new Vector3(180, 0, 90); else cam_Video.rectTransform.localEulerAngles = new Vector3(0, 0, -90);#elif UNITY_ANDROID if (!isOn) cam_Video.rectTransform.localEulerAngles = new Vector3(180, 180, 90); else cam_Video.rectTransform.localEulerAngles = new Vector3(0, 180, 90);#endif }} 2.在场景中创建raw_Image

把这个raw_Image拖放到上一个脚本组件上

3.把使用了下方shader的材质球放进raw_image中的这个位置


下面是一个shader
这个shader就是扣图的核心

Shader "Demo/SpriteShader" { Properties { [PerRendererData]_MainTex ("Sprite Texture", 2D) = "white" {} // 当前的Sprite图(添加[PerRendererData]后在属性面板中不可见) _Color ("Alpha Color Key", Color) = (0,0,0,1) // 用于比较的基色(想过滤掉什么颜色,这个颜色就设置为那种颜色) _Range("Range",Range (0, 1.01))=0.1 // 决定抠图范围的域 [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 // 在属性面板中以按钮形式显示(在此Shader中没用到) } SubShader { //Sprite图一般均为透明贴图,需要做以下处理 Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } Pass { //Sprite图一般均为透明贴图,需要做以下处理 Cull Off Lighting Off ZWrite Off Fog { Mode Off } Blend SrcAlpha OneMinusSrcAlpha //Sprite图一般均为透明贴图,需要做以下处理 CGPROGRAM #pragma vertex vert #pragma fragment frag sampler2D _MainTex; float4 _Color; half _Range; struct Vertex { float4 vertex : POSITION; float2 uv_MainTex : TEXCOORD0; float2 uv2 : TEXCOORD1; }; struct Fragment { float4 vertex : POSITION; float2 uv_MainTex : TEXCOORD0; }; Fragment vert(Vertex v) { Fragment o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv_MainTex = v.uv_MainTex; return o; } float4 frag(Fragment IN) : COLOR { float4 o = float4(1, 1, 1, 1); half4 c = tex2D (_MainTex, IN.uv_MainTex); o.rgb = c.rgb; //使用当前像素颜色与基色相减,然后与域相比较以决定是否将其显示出来 if(abs(c.r-_Color.r)<_Range && abs(c.g-_Color.g)<_Range && abs(c.b-_Color.b)<_Range) { o.a = 0; } else { o.a = 1; } return o; } ENDCG } } }

总结:1.打开设备相机
2.创建raw_Image用于显示设备相机看到的画面
3.把shader用在raw_Image上

运行程序吧

问题:怎么设置将要被剔除的颜色
答:调节材质球上的Alpha Color Key

感谢爱撒娇的万宝路分享的资料
打开相机参考地址:https://blog.csdn.net/qq_16929759/article/details/80355510
抠图参考地址:https://blog.csdn.net/e295166319/article/details/80509979

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。