Unity中,利用shader将NGUI图集大小缩小四倍

2024-06-13 15:08

本文主要是介绍Unity中,利用shader将NGUI图集大小缩小四倍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


如何将ARGB图像(带alpha)分成两张RGB图像(不带alpha,第二张为灰度图),我将导出的alpha图的TextureFormat .RGB24改为 TextureFormat .Alpha8,一个通道的Alpha8竟然比3个通道的RGB大,变大两倍。

using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEditor;class TextureSplit : EditorWindow
{[ MenuItem ("Assets/Texture Slpit" )]static void DoSplit(){Object [] SelectedTexs = Selection.GetFiltered( typeof (Texture2D ), SelectionMode.Assets);foreach (Texture2D Tex in SelectedTexs){string TexPath = AssetDatabase .GetAssetPath(Tex);TextureImporter TexImporter = AssetImporter .GetAtPath(TexPath) as TextureImporter ;TexImporter.isReadable = true ;AssetDatabase .ImportAsset(TexPath);Texture2D ColorTex = new Texture2D(Tex.width, Tex.height, TextureFormat .RGB24, false );ColorTex.SetPixels(Tex.GetPixels());string FilePath = AssetDatabase .GetAssetPath(Tex);int Pos = FilePath.LastIndexOf( '.');FilePath = FilePath.Substring( 0 , Pos);FilePath = FilePath + "_color.png" ;byte [] bytes = ColorTex.EncodeToPNG();System.IO. File .WriteAllBytes(FilePath, bytes);{AssetDatabase .ImportAsset(FilePath);TextureImporter TargetTexImporter = AssetImporter .GetAtPath(FilePath) as TextureImporter ;TargetTexImporter.textureType = TexImporter.textureType;TargetTexImporter.filterMode = TexImporter.filterMode;TargetTexImporter.maxTextureSize = TexImporter.maxTextureSize;TargetTexImporter.textureFormat = TextureImporterFormat .AutomaticCompressed;AssetDatabase .ImportAsset(FilePath);}CLogger .Log("Save " + FilePath + " Succeed" );Texture2D ALphaTex = new Texture2D(Tex.width, Tex.height, TextureFormat .RGB24, false );Color [] Pixels=Tex.GetPixels();for (int i = 0; i < Pixels.Length;i++ ){Pixels[i].r = Pixels[i].a;Pixels[i].g = Pixels[i].a;Pixels[i].b = Pixels[i].a;}ALphaTex.SetPixels(Pixels);FilePath = AssetDatabase .GetAssetPath(Tex);Pos = FilePath.LastIndexOf( '.' );FilePath = FilePath.Substring( 0 , Pos);FilePath = FilePath + "_alpha.png" ;bytes = ALphaTex.EncodeToPNG();System.IO. File .WriteAllBytes(FilePath, bytes);{AssetDatabase .ImportAsset(FilePath);TextureImporter TargetTexImporter = AssetImporter .GetAtPath(FilePath) as TextureImporter ;TargetTexImporter.textureType = TexImporter.textureType;TargetTexImporter.filterMode = TexImporter.filterMode;TargetTexImporter.maxTextureSize = TexImporter.maxTextureSize;TargetTexImporter.textureFormat = TextureImporterFormat .AutomaticCompressed;AssetDatabase .ImportAsset(FilePath);}CLogger .Log("Save " + FilePath + " Succeed" );}}
}



</pre><div></div><div><hr /></div><div></div><div><span style="color:rgb(255,0,0)"><span style="font-size:24px">Shader代码,如何将两张RGB图像合并成</span></span><span style="color:rgb(255,0,0)"><span style="font-size:24px">ARGB图像(带alpha)</span></span></div><div><span style="color:rgb(255,0,0)"><span style="font-size:24px"></span></span><pre name="code" class="plain">Shader "Unlit/Transparent Colored SplitTex"
{Properties{_MainTex ("Base (RGB)", 2D) = "black" {}_AlphaTex("Alpha (A)", 2D) = "black" {}}SubShader{LOD 100Tags{"Queue" = "Transparent""IgnoreProjector" = "True""RenderType" = "Transparent"}Cull OffLighting OffZWrite OffFog { Mode Off }Offset -1, -1Blend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata_t{float4 vertex : POSITION;float2 texcoord : TEXCOORD0;fixed4 color : COLOR;};struct v2f{float4 vertex : SV_POSITION;half2 texcoord : TEXCOORD0;fixed4 color : COLOR;fixed gray : TEXCOORD1;};sampler2D _MainTex;sampler2D _AlphaTex;float4 _MainTex_ST;v2f vert (appdata_t v){v2f o;o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);o.texcoord = v.texcoord;o.color = v.color;o.gray = dot(v.color, fixed4(1,1,1,0));return o;}fixed4 frag (v2f i) : COLOR{fixed4 col,alpha;col = tex2D(_MainTex, i.texcoord);alpha = tex2D(_AlphaTex, i.texcoord);col.a = alpha.r;if(i.gray == 0){float grey = dot(col.rgb, float3(0.299, 0.587, 0.114));col.rgb = float3(grey, grey, grey);}else{col = col * i.color;}                   return col;                   }ENDCG}}SubShader{LOD 100Tags{"Queue" = "Transparent""IgnoreProjector" = "True""RenderType" = "Transparent"}Pass{Cull OffLighting OffZWrite OffFog { Mode Off }Offset -1, -1ColorMask RGBAlphaTest Greater .01Blend SrcAlpha OneMinusSrcAlphaColorMaterial AmbientAndDiffuseSetTexture [_MainTex]{Combine Texture * Primary}}}
}






这篇关于Unity中,利用shader将NGUI图集大小缩小四倍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057646

相关文章

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个

【CSS in Depth 2 精译_024】4.2 弹性子元素的大小

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

Linux下获取硬盘空间的大小

1. df 命令查看所有硬盘设备的信息 2. 查看指定路径的磁盘空间大小 代码获取空间大小案例:

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

Windows11电脑上自带的画图软件修改照片大小(不裁剪尺寸的情况下)

针对一张图片,有时候上传的图片有大小限制,那么在这种情况下如何修改其大小呢,在不裁剪尺寸的情况下 步骤如下: 1.选定一张图片,右击->打开方式->画图,如下: 第二步:打开图片后,我们可以看到图片的大小为82.1kb,点击上面工具栏的“重设大小和倾斜”进行调整,如下: 第三步:修改水平和垂直的数字,此处我修改为分别都修改为50,然后保存,可以看到大小变成63.5kb,如下:

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

Unity Adressables 使用说明(六)加载(Load) Addressable Assets

【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给资源的地址的字符串。Label:包含分配给一个或多个资源的标签的字符串。AssetReference Obj