首页 > 其他分享 >Unity通过shader实现图像转像素画

Unity通过shader实现图像转像素画

时间:2024-06-05 22:26:05浏览次数:13  
标签:MainTex uv vertex shader 像素 Unity v2f PixelSize

新建一个无光照shader(我选择了 Create -> Shader -> Unlit Shader),命名为:PixelateShader,双击打开它,粘贴以下内容

Shader "Custom/PixelateShader"
{
    Properties
    {
        _MainTex("Texture", 2D) = "white" {}
        _PixelSize("Pixel Size", Float) = 0.01
    }
        SubShader
        {
            Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
            LOD 100

            Pass
            {
                ZWrite Off
                Blend SrcAlpha OneMinusSrcAlpha
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #include "UnityCG.cginc"

                struct appdata_t
                {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };

                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    float4 vertex : SV_POSITION;
                };

                sampler2D _MainTex;
                float4 _MainTex_ST;
                float _PixelSize;

                v2f vert(appdata_t v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    return o;
                }

                fixed4 frag(v2f i) : SV_Target
                {
                    float2 uv = i.uv;

                    // 计算像素化的UV坐标
                    uv = floor(uv / _PixelSize) * _PixelSize + _PixelSize * 0.5;

                    fixed4 col = tex2D(_MainTex, uv);
                    return col;
                }
                ENDCG
            }
        }
            FallBack "Transparent/Cutout/VertexLit"
}

然后新建一个材质,在 shader 那里选择 Custom/PixelateShader,然后把这个材质拖动到 Image 组件的 Material 上面,调整材质的 Pixel Size 属性,就能将图片变成像素画

标签:MainTex,uv,vertex,shader,像素,Unity,v2f,PixelSize
From: https://www.cnblogs.com/hellozjf/p/18234018

相关文章

  • Unity中的物体移动
    在Unity中,Rotate和Translate是Transform组件的两个方法,它们用于改变游戏对象的空间位置和方向。Rotate方法Rotate方法用于围绕游戏对象的局部坐标系中的轴或围绕世界坐标系中的轴旋转游戏对象。这个方法有多个重载版本,允许你以不同的方式指定旋转。局部旋转transform.R......
  • 【Unity】Vector3的方法
    属性和方法作用normalized使用Vector3.normalized的一个常见场景是在物理模拟中,比如计算速度向量或在射线投射(Raycasting)中确定射线的方向。LerpVector3.Lerp在Unity中非常常用,尤其是在动画和游戏逻辑中,用于平滑地过渡从一个状态到另一个状态,例如角色移动、颜色渐变......
  • 【Unity美术】spine软件的使用—2D动画的制作
    ......
  • 【实用技巧】Unity中的Image组件
    Unity中的Image组件是UI系统的核心部分,用于显示图像和纹理。以下是一些关于UnityImage组件的实用技巧:使用Sprite作为Image源:将Sprite直接拖拽到Image组件的SourceImage字段中,可以快速设置显示的图像。调整颜色和透明度:通过修改Image组件的Color属性,可以改变显示图像的颜......
  • Unity 代码动态添加EventTrigger
    publicstaticclassUIUltil{publicstaticvoidRigistEventTrigger(thisUIBehaviour_ui,EventTriggerType_eventTriggerType,Action<PointerEventData>_callback){if(_ui==null){Debug.LogError("invalidU......
  • 如何选择Unity的4种批处理方式
    1)如何选择Unity的4种批处理方式2)Unity编辑器卡顿3)如何解决横屏APP在鸿蒙悬浮窗错误的变为竖屏了4)Hindi问题这是第388篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。UWA社区主页:community.uwa4d.comUWAQQ群:7......
  • 分享一个自制 Excel 转 Unity ScriptableObject 工具
    视频演示链接:https://www.bilibili.com/video/BV1Nw4m1q7qt/资源文件:https://github.com/asyaB404/ExcelToScriptableObject上网找了半天都找不到满意的,所以就自己写了一个本人菜鸟一枚,第一次分享自己的成果,有什么问题或者改进的方式请立即联系我工具包含一个名为Excelabl......
  • UniTask入门指南:简化Unity中的异步编程
    UniTask入门指南:简化Unity中的异步编程介绍:UniTask是一个轻量级、高性能的异步编程库,专门针对Unity开发进行了优化。与Unity标准的Task系统相比,UniTask提供了更加简洁和高效的异步编程方式。在Unity项目中使用UniTask可以大大提高开发效率,简化异步操作的编码过程。UniTask......
  • Unity ScrollRect中,拖拽移动Item的顺序
    *UnityScrollRect中,拖拽移动Item的顺序*目标需求制作方法完整代码最终效果备注unitypackage目标需求Unity在制作下拉菜单时,用户可通过拖拽Item,替换当前Item的位置。本教程使用UGUI制作方法创建脚本ScrollRectManager,用于管理整个ScrollRect,我是将脚本Scro......
  • Unity2D游戏制作入门 | 02
    上期链接:Unity2D游戏制作入门|01我们先整理我们的场景素材并调整一些参数,选中我们的Forest1,就是如下图所示了:选择:multiple(多个),16像素,不过滤,不压缩(compression),记得保存设置。开始编辑我们的场景:接下使用Size的模式进行切割:注意锚点我们设置在中心,不然等下放入图片......