当前位置: 首页 > news >正文

Unity将4个纹理图拼接成1个纹理

需要的效果

最终实现的效果大概如下:
在这里插入图片描述

4个贴图上去

这里随便放一个切分的图。
在这里插入图片描述

Shader代码如下

直接上代码:

// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

// Unlit shader. Simplest possible textured shader.
// - no lighting
// - no lightmap support
// - no per-material color

Shader "Unlit/TextureMy" {
Properties {
    _MainTex ("Base (RGB)", 2D) = "white" {}
    _MainTex0 ("Base0 (RGB)", 2D) = "white" {}
    _MainTex1 ("Base1 (RGB)", 2D) = "white" {}
    _MainTex2 ("Base2 (RGB)", 2D) = "white" {}
    _MainTex3 ("Base3 (RGB)", 2D) = "white" {}
}

SubShader {
    Tags { "RenderType"="Opaque" }
    LOD 100

    Pass {
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma target 2.0
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            struct appdata_t {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

            struct v2f {
                float4 vertex : SV_POSITION;
                float2 texcoord : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                UNITY_VERTEX_OUTPUT_STEREO
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            sampler2D _MainTex0;
            sampler2D _MainTex1;
            sampler2D _MainTex2;
            sampler2D _MainTex3;

            v2f vert (appdata_t v)
            {
                v2f o;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col;
                float2 uv = i.texcoord;
                float2 uvFix = uv;
                
                if (uv.x < 0.5)
                {
                    if(uv.y < 0.5)
                    {
                        uvFix.x = uv.x * 2;
                        uvFix.y = uv.y * 2;
                        col = tex2D (_MainTex2 , uvFix );
                    }
                    else
                    {
                        uvFix.x = uv.x * 2;
                        uvFix.y = uv.y * 2 - 1;
                        col = tex2D (_MainTex0 , uvFix );                    
                    }
                }
                else
                {
                    if(uv.y < 0.5)
                    {
                        uvFix.x = uv.x * 2 - 1;
                        uvFix.y = uv.y * 2 ;
                        col = tex2D (_MainTex3 , uvFix );
                    }
                    else
                    {
                        uvFix.x = uv.x * 2 - 1;
                        uvFix.y = uv.y * 2 - 1;
                        col = tex2D (_MainTex1 , uvFix );                    
                    }
                }
                //fixed4 col = tex2D(_MainTex, i.texcoord);
                UNITY_APPLY_FOG(i.fogCoord, col);
                UNITY_OPAQUE_ALPHA(col.a);
                return col;
            }
        ENDCG
    }
}

}

uv左下角是0,0,所以第一个if判定再左下角,使用_MainTex2 纹理,那么如果铺满屏幕问题,需要*2.
其他部分的类似。

按照这个思路可以扩充8*8等其他。

特别注意

这里要注意,需要把图的WrapMode改为Clamp,repeat会有接缝。
在这里插入图片描述

相关文章:

  • 类型字段定义影响WebApi传值及SqlSugar调用Select创建新对象
  • Vue3修改Element-plus语言与项目国际化
  • Kotlin:协程基础
  • 打造去中心化透明储蓄罐:Solidity智能合约的又一实践
  • FL Studio All Plugins Edition2024中文完整版Win/Mac
  • 【PyTorch模型转换和部署】
  • 【数据结构】周末作业
  • web组态(BY组态)接入流程
  • 4 局域网基础(2)
  • 11.以太网交换机工作原理
  • centos服务配置springboot服务开机启动
  • 第一章 Win10系统VM安装Ubuntu1704虚拟机
  • VUE 入门及应用 ( Axios )
  • 【vue】vue 是怎么把 template 模版编译成 render 函数的,什么是AST抽象语法树
  • 1.QT简介(介绍、安装,项目创建等)
  • 【MySQL】_内连接
  • 【论文阅读】深度学习在过冷沸腾气泡动力学分割中的应用
  • python dictionary 字典中的内置函数介绍及其示例
  • leetcode刷题(剑指offer) 47.全排列Ⅱ
  • Python入门到精通(九)——Python数据可视化
  • 视频丨伊朗阿巴斯港一处油罐发生高强度爆炸:造成大面积破坏,伤亡不明
  • 泰山景区管委会:未经审核同意不得擅自举办竞速类登山活动
  • 2025全国知识产权宣传周:用AI生成的图片要小心什么?
  • 我国风电光伏装机历史性超过火电
  • 为什么猛起身会头晕?你的身体在发出这个警报
  • 外交部:中方在黄海暂定海域建造渔业养殖设施,同中韩海域划界无关