【Unity】实现Quad瓦片(MeshRenderer)渲染图集图片

使用Mesh Renderer渲染图集图片,并保证图片不变形效果(采用GPU Instancing优化合批)

创建一个Quad物体,材质Shader如下,将图集图片通过SpriteAtlas加载出来得到Sprite对象进行后面的传参操作即可进行渲染出图集图片。

Texture2D texture = sprite.texture; m_QuadSpriteRenderer.sharedMaterial = mat; //皮肤共享材质 m_QuadSpriteRenderer.sharedMaterial.SetTexture("_Tex", texture); //非instanced贴图设置 MaterialPropertyBlock mpb = new MaterialPropertyBlock(); //最好静态统一一个对象 m_QuadSpriteRenderer.GetPropertyBlock(mpb); Vector4 rectUV = DataUtility.GetOuterUV(sprite); mpb.SetVector("atlasSpriteRectUV", rectUV); //实例instanced数据设置 m_QuadSpriteRenderer.SetPropertyBlock(mpb); Vector2 size = new Vector2(texture.width, texture.height); float width = rectUV.z - rectUV.x; //width=小图片宽度/大图片宽度 float height = rectUV.w - rectUV.y; //height=小图片高度/大图片高度 float scaleX = size.x * width / 128f; //小图片宽度比例缩小值=大图片宽度*width/128f (128是小图片资源本身的宽度) float scaleY = size.y * height / 128f;//小图片高度比例缩小值=大图片高度*height/128f(128是小图片资源本身的高度) m_QuadSpriteRenderer.transform.localScale = new Vector3(scaleX, scaleY, 1); //为什么是有这个缩小值是因为小图片放到图集里后,小图片的透明部分会裁剪掉,导致小图片实际会缩小, //所以要进行计算出这个缩小值才能还原出正确的图片显示,不然可能小图片会变形。
Shader "Custom/QuadSprite" { Properties { _Tex("Tex", 2D) = "white"{} } SubShader { Tags { "RenderType"="Transparent" "Queue"="Transparent" } Pass { Tags { "LightMode" = "ForwardBase" } Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma multi_compile_instancing #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; UNITY_VERTEX_INPUT_INSTANCE_ID }; UNITY_INSTANCING_BUFFER_START(Props) //Props是BUFFER块名称访问时使用到 //属性块里的属性全部类似写到这里 UNITY_DEFINE_INSTANCED_PROP(float4, atlasSpriteRectUV) UNITY_INSTANCING_BUFFER_END(Props) sampler2D _Tex; float4 _Tex_ST; inline float2 NormalizeAtlasSpriteUV(float2 uv) { float4 data = UNITY_ACCESS_INSTANCED_PROP(Props, atlasSpriteRectUV); float width = data.z - data.x; float height = data.w - data.y; return float2((uv.x - data.x) / width, (uv.y - data.y) / height); } inline float2 ReverseNormalizeAtlasSpriteUV(float2 uv) { float4 data = UNITY_ACCESS_INSTANCED_PROP(Props, atlasSpriteRectUV); float2 r = uv; r.x = data.x + (data.z - data.x) * r.x; r.y = data.y + (data.w - data.y) * r.y; return r; } v2f vert (appdata v) { v2f o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _Tex); return o; } fixed4 frag (v2f i) : SV_Target { UNITY_SETUP_INSTANCE_ID(i); i.uv.xy = ReverseNormalizeAtlasSpriteUV(i.uv.xy); fixed4 col = tex2D(_Tex, i.uv); i.uv.xy = NormalizeAtlasSpriteUV(i.uv.xy); return col; } ENDCG } } }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1125550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【课程设计/毕业设计】基于python-CNN深度学习的水果识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序

MSSQL2022导入Excel的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序 一、导入情况二、问题发现三、问题解决 最近在安装新版SQLServer SSMS 2022后,每次导入Excel都会出现错误提示:未在本地计算机上注册“Microsoft.…

Thinkphp和Laravel框架的茶叶购物网上商城系统 潇湘知茶小程序_dyo5sig5

目录ThinkPHP与Laravel框架的茶叶商城系统对比分析项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理ThinkPHP与Laravel框架的茶叶商城系统对比分析 ThinkPHP框架实现特点 ThinkPHP作为国产轻量级框架,适合快速开发中小型茶叶商城。其内…

【状态估计】基于LQR控制和卡尔曼滤波算法实现二维四旋翼的状态估计(噪声传感器数据)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

【毕业设计】基于深度学习python-CNN的水果识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026免费好用的AIPPT工具榜:智能演示文稿制作新纪元

引言 随着人工智能技术的飞速发展,传统演示文稿的制作流程正经历一场深刻的变革。过去,制作一份专业的PPT往往意味着数小时乃至数天的内容构思、手动排版与视觉设计。如今,AI生成PPT工具的出现,正将这一过程简化为几分钟的智能交…

Thinkphp和Laravel框架的蛋糕甜品烘焙教程微信小程序设计与实现_6uy1k94r

目录摘要项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 Thinkphp和Laravel框架的蛋糕甜品烘焙教程微信小程序设计与实现,结合了PHP后端框架与微信小程序前端技术,为用户提供便捷的烘焙学习平台。该小程序以蛋糕甜品烘…

计算机深度学习毕设实战-卷神经网络基于深度学习的土豆疾病识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【毕业设计】机器学习 基于python-cnn深度学习的罗马数据集训练识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)

博主采用的是SpringBoot3knife4j的框架,如果你采用的是SpringBoot2框架,那么可以看下面这几篇: Knife4j文档请求异常 | Knife4j 记一次集成swagger2(Knife4j)在线文档异常,提示:Knude4j文档请…

从执行到管理:SOP思维,是你必须掌握的职场杠杆

我成为管理者后的最大收获,是发现了一个职场真相:高效团队不是靠超人,而是靠可复制的方法。 曾经带过一名非常优秀的员工小陈,她解决问题总是一针见血,工作效率是别人的两倍。当她提出离职时,我焦虑了整整一周——很多关键任务只有她最清楚。也正是这次危机,让我彻底明…

Kafka 基础概念

Kafka 基础概念 Kafka 是什么? 分布式流处理平台,专为高吞吐量、低延迟的实时数据流设计。核心功能包括发布-订阅消息系统、持久化存储和流式处理。 核心组件 Topic:消息的逻辑分类,类似数据库表。Partition:Topic 的物…

【毕业设计】机器学习基于python深度学习的苹果和西红柿识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

knife4j+springboot3.4异常无法正确展示文档

场景复现: knife4j-openapi3-jakarta-spring-boot-starter版本 com.github.xiaoymin knife4j-openapi3-jakarta-spring-boot-starter 4.5.0 原来使用springboot3.3.5版本,先升级到3.4.0版本 通过http://ip:port/doc.html访问接口文档发现访问/v3/api-d…

深度学习计算机毕设之基于深度学习的土豆疾病识别卷神经网络

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果

安装依赖 pip install --upgrade --quiet langchain-core langchain-community langchain-openai编写代码 from langchain_core.prompts import ChatPromptTemplate from langchain_community.utilities import SQLDatabase from langchain_core.output_parsers import StrOut…

Python高效计算斐波那契数列

实现功能&#xff1a;计算斐波那契数列的第n项以下是用 Python 编写的递归方法实现斐波那契数列&#xff1a;def fibonacci(n):if n < 0:return "输入必须为正整数"elif n 1:return 0elif n 2:return 1else:return fibonacci(n - 1) fibonacci(n - 2)# 示例调用…

AWS OpenSearch Service TLS 策略升级指南

📋 概述 AWS OpenSearch Service 将于 2026 年 4 月 20 日停止支持 TLS 1.0 和 1.1 版本。本文详细介绍如何安全地将 OpenSearch 域的 TLS 策略升级到 TLS 1.2,确保服务的持续可用性和安全性。 🚨 重要通知 截止日期: 2026 年 4 月 20 日 影响: 使用 TLS 1.0/1.1 的域将…

深度学习毕设项目:基于人工智能深度学习的土豆疾病识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

LangChain-08 Query SQL DB 通过GPT自动查询SQL

我们需要下载一个 LangChain 官方提供的本地小数据库。 安装依赖 SQL: https://raw.githubusercontent.com/lerocha/chinook-database/master/ChinookDatabase/DataSources/Chinook_Sqlite.sql Shell: pip install --upgrade --quiet langchain-core langchain-community lang…