Unity3D

Unity的2D Pixel Perfect包的工作原理

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com Unity的 2D Pixel Perfect 包(现为 Pixel Perfect Camera 组件)是专为像素风格游戏设计的工具,其核心目标是确保2D精灵(Sprites)在屏幕上以整数像素呈现,避免模糊或锯齿,保持复古像素艺术的清晰锐利。以下是它的工作原理和关键实现方式: 1. 核心原理:像素对齐(Pixel Snapping) 问题根源: 当游戏相机或精灵的坐标包含小数部分(如位置为 (10.3, 5.7)),Unity的渲染器会进行子像素插值,导致精灵边缘模糊(抗锯齿效果)。 解决方案: Pixel Perfect Camera 会动态调整相机位置和渲染分辨率,确保所有2D精灵的顶点坐标对齐到屏幕像素网格(即整数坐标),消除小数偏移。 2. 关键工作流程 (1) 设置目标分辨率 Assets Pixels Per Unit (PPU): 在精灵导入设置中定义 Pixels Per Unit(如 16 表示1 Unity单位 = 16像素)。 示例:若角色精灵为 32x32 像素,PPU=16,则精灵在Unity中的大小为 2x2 单位。 Reference Resolution: 在 Pixel Perfect Camera 组件中设置目标分辨率(如 256x144),表示游戏设计的基准像素分辨率。 (2) 动态调整相机 整数倍缩放(Scale to Fit): 相机会根据当前屏幕分辨率,选择整数倍缩放(1x, 2x, 3x…)以适配窗口,避免非整数拉伸。 例如: 目标分辨率 256x144,屏幕为 768x432 → 缩放3倍(256*3=768)。 若屏幕为 900x500,可能缩放3倍并留黑边(Letterboxing)。 像素对齐(Pixel Snapping):

Http详解及如何在Unity上使用

** 请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com。** 1 HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 HTTP是一个基于TCP/IP通信协议。来传递数据(HTML 文件, 图片文件, 查询结果等)。它指定了客户端可能发送给服务器什么样的消息,以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。 HTTP协议永远都是客户端发起请求,服务器回送响应。见下图: 2 HTTP工作流程 一次HTTP操作称为一个事务,其工作过程可分为四步: 客户机与服务器建立TCP连接。只要单击某个超级链接/输入网址/提交表单等。 建立连接后,客户机发送http请求给服务器. 服务器接到请求后,响应信息。 客户端接收服务器所返回的信息,然后客户机与服务器断开TCP连接。 3 HTTP发展及各版本 版本 产生时间 内容 发展现状 HTTP/1.1 1997年 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 2015年前使用最广泛 HTTP/2 2015年 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场 3.1 HTTP1.1 版本 HTTP 1.1 新增了delete options 等几种请求数据的方式,客户端和服务端三次握手后,建立tcp链接,一个tcp链接可以传送多个请求和响应,这样就减少了握手和建立tcp和关闭tcp链接的消耗,传输更快 HTTP 1.1 支持持久链接 请求头有一个connection 参数,参数值是close/keep-alive 意思是本次请求处理完后,服务器是关闭该tcp链接还是继续使用该链接 3.2 HTTP 2.0 版本 HTTP2.0使用了多路复用的技术,做到同一个链接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。 4 HTTP主要特点 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 无状态:无状态是指协议对于事务处理没有记忆能力。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。 支持B/S及C/S模式 5 HTTP协议安全机制 HTTPS (Secure Hypertext Transfer Protocol):安全超文本传输协议。HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS提供的安全通信,应用了对称加密,非对称加密,数据签名等技术。 HTTP缺点:不够安全——明文传输,不做加密,易被中间人攻击(中间人截获甚至篡改信息) HTTPS主要作用: (1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全; (2)对网站服务器进行真实身份认证。 6 HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法。到目前为止,有以下的方法

伪内部空间映射的相关文档

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com CSDN上的参考网页 Unity Shader Interior mapping 内部映射 CSDN上的案例学习——Interior Mapping 室内映射(假室内效果) CSDN上的UE5黑客帝国3d print假室内的一些使用记录 unity 跟随目标_使用Cubemap在Unity中制作虚拟室内效果 知乎上的参考网页 案例学习——Interior Mapping 室内映射(假室内效果) 一种假室内(Fake Interior)效果的实现,这种是带上了室内深度效果的,即每个室内的深度纵深是不一样的。 其他 Joost van Dongen的论文《Interior Mapping A new techique for rendering realistic buildings》 下面的这份代码是《一种假室内(Fake Interior)效果的实现》中提到的代码实现 Shader "Custom/FakeRoom" { Properties { [NoScaleOffset]_WindowTex ("Window Texture", 2D) = "black" {} _RoomTex ("Room Texture", CUBE) = ""{} _RoomDepth ("Room Depth", Range(0.01, 1)) = 1.0 } SubShader { Tags { "RenderType"="Opaque" } Cull Back Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.

Volumetric Clouds Write-up(翻译)

原文地址 The basis of this effect is drawing a vertical stack of quads, each one showing a slice of the cloud. The cloud texture itself is just a world-mapped, top-down animated noise that is piped into opacity. 这种效果的基础是绘制一组垂直堆叠的四边形(简称为:四边形堆栈,vertical stack of quads),每个四边形都显示一片云。 云纹理本身只是一个世界映射的(world-mapped)、自上而下的(top-down)的动画噪声,它通过渲染,管道传输到不透明度中。 To animate the noise, I use the same trick that I use in countless other shaders to create a natural looking motion that appears free of obvious repetition, which is to blend the noise with either a copy of itself with a different UV scale, or a different noise texture, and pan these two noise textures against each other in opposite directions, and then blend them together through multiplication or some other desired blend mode.

Unity纹理压缩格式详解

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com Crunch compression(紧凑压缩) Crunch compression是一种建筑在DXT或ETC压缩之上的压缩格式,提供额外的可变比特率压缩。当Unity加载紧凑压缩的纹理时,它会在CPU上将纹理解压缩为DXT或 ETC,然后将DXT或ETC压缩的纹理数据上传到GPU。 紧凑压缩有助于纹理使用尽可能少的磁盘空间,但对运行时内存使用没有影响。紧凑压缩 纹理可能需要很长时间来压缩,但运行时的解压缩速度相当快。您可以调整紧凑压缩的有损程度,以在文件大小和质量之间取得平衡。 Unity的各种纹理压缩格式信息 参考网页 聊聊 Unity 的 Alpha Is Transparency 有什么用 What does the “alpha is transparency” setting actually do? 光照贴图的中的编码格式

从半透明模型的描边到URP Multipass Rendering

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com 卡通渲染技术中,描边的实现的有多种做法,有基于后处理实现,也有基于非后处理,通过多次绘制模型的方法实现。 通过多次绘制模型的实现,方法无非就是: 绘制模型本体,同时写入深度值。 让模型顶点沿着法线外扩一定的偏移量,即让模型膨胀一些 全用描边的颜色绘制膨胀过的模型,且,在绘制时,使用cull front,即只绘制模型的背向摄像机面。在第1步中因为绘制模型本体时已经写入深度值。在本步骤中只要不改变深度测试函数的方式,那么除了膨胀部分之外,是无法写入像素的,能写入的部分,便形成了边缘。 上述的方式,一般应用于不透明的材质上。如果是半透明的材质的话就有问题,因为在第1步绘制半透明材质时,一般是不写入深度值的。那么第3步在绘制膨胀模型时,模型背部的地方就会被绘制上去。 解决这个问题有很多,可以利用stencil test的方式。也可以在第一步绘制,不绘制任何颜色,只写入深度,然后再绘制模型,最后再绘制描边。后一种方法,如果用Unity内置管线,大约就是这个样子: Shader "Unlit/半透明" { Properties { _Diffuse("Diffuse",Color) = (1,1,1,1) // 漫反射 _MainTex("MainTex",2D) = "white"{} // 2D纹理贴图 _AlphaScale("Alpha Scale",Range(0,1)) = 1 // 控制Alpha参数 } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } //渲染顺序设置Transparent LOD 100 // 用两个pass通道来处理,防止出现渲染错误,第一个pass通道 // 每个pass通道都会渲染一次 Pass { ZWrite On // 注意这里:写入深度 为了确认渲染顺序 ColorMask 0 // 掩码遮罩代表这个pass通道不写入任何颜色值 } Pass // 第二个pass通道 { Tags{"LightMode" = "ForwardBase"} ZWrite Off // 注意这里:关闭ZWrite(深度写入) Blend SrcAlpha OneMinusSrcAlpha // 源颜色因子 正常透明混合 CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.

彻底弄懂Unity3D的光照模式,光照贴图和光探针(持续更新)

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com 1 光源的Light Mode 光源的Light Mode分为Realtime,Baked,Mixed四种。 Realtime类型 本类型的光源,会根据Shadow Distance项指定的值,以及当前摄像机的位置值,去敲定本光源是否给物体投下阴影。在URP中,Shadow Distance值在Universl Render Pipeline Asset中指定。 在旧管线中,如果启用了【Realtime Global Illumination】选项,realtime光源仅贡献实时的直接光照部分。正因为如此,所以由这种光源产生的影子是纯黑的,不会受别的间接光照的影响 在自定义的管线中,实时光源可以对实时的间接光照部分产生贡献。 Baked类型 Unity把Baked类型的光源产生的照明和阴影信息,烘焙到lightmap或者light probe中。 baked类型的光源,只贡献了漫反射部分的光照,不贡献镜面高光部分的光照。 只有标识为static的GameObject才接受baked类型的光源产生的照明和阴影。 Mixed类型 mixed类型,顾名思义,即是整合了realtime和baked两种模式的特点。采用mixed类型的光源,可以在其贡献的直接光照部分,使用realtime的模式实现,间接光照部分,使用baked模式实现。 在场景中,mixed类型的光源的行为,依赖于【Lighting】窗口中的【Lighting Mode】属性设置。不同的设置,会产生不同的视觉保真度,以及产生不同的性能消耗。 在运行时,可以更改mixed类型的光源的属性。但仅对realtime部分的属性生效。 2【Lighting】窗口中的【Lighting Mode】属性 直接光照的实现模式 间接光照的实现模式 阴影的实现模式 适用机型 Baked Indirect real-time baked real-time 中端机型 Shadowmask real-time baked 部分baked,部分real-time 中高端机型 Subtractive baked baked 只对一个平行光渲染real-time阴影 低端机型 Baked Indirect光照模式的一些细节 内置管线,URP,HDRP,都支持本模式 在本模式下,Mixed类型的光源照射到GameObject时,GameObject会收到以下的光影信息如下表: Shadowmask光照模式的一些细节 与baked indirect模式类似,Shadowmask模式也结合了实时直接光照和烘焙间接光照。但两者不同之处在于在于渲染阴影的方式。Shadowmask模式允许Unity在运行时结合baked阴影和real-time阴影,并在远处渲染阴影。它通过使用额外的光照贴图 纹理称为阴影蒙版,并通过将附加信息存储在光探头。 Shadowmask模式提供所有模式下保真度最高的阴影,但性能成本和内存要求最高。 不同渲染管线对Shadowmask模式的支持程度 管线类型 是否支持 内置管线 支持 URP 从10.1版本开始支持 HDRP 支持 Shadowmask模式有两种,一种是Distance Shadowmask,另一种是Shadowmask。在Project Setting界面的Quality选项可以指定,如下图所示: