关于深度图的那些事
关于深度图的那些事
在图形学中,深度图(Depth
Map)通常存储的是相机坐标系(视图空间)下的深度值。其可以用来表示场景中物体的远近关系。一般而言,在引擎中深度图都需要我们手动开启,毕竟这是一个消耗性能的操作。且半透明物体一般是不做深度写入的。这也就是说深度图中并不存在半透明物体的信息。
深度图的存储格式
使用RGBA8格式的R通道来存储。
兼容性(优):RGBA8格式可以兼容所有设备。
数值精度(差):RGBA8格式中每个通道可以表示的浮点数精度为1/255,约等于
0.0039。在使用深度图进行深度深度判定时可能会因精度不够而导致出现较大误差。
存取效率(优):直接存取,无额外运算。
PS:如果我没有记错的话,Unity通用渲染管线的深度图就是用这个方式存储的。
用RGBA8格式进行编码
虽然这个方案也是使用RGBA8,但是此方案是将深度信息编码到RGBA8的四个通道中,使用时再用与编码对等的解码方式进行解码。
兼容性(优):RGBA8格式可以兼容所有设备。
数值精度(优):其可以达到32位浮点数 ...
半透明物体与非透明物体接缝柔和处理
半透明物体与非透明物体接缝柔和处理
前言
最近项目中遇到特效和地面的接触的时候,他们的接触面间有着一条很明显的接缝。当镜头拉进的时候这个情况尤为明显。幸好同事找到了一篇文章来解决这个问题。文章中说的是在Cocos
Creator中的实现,这里我就按照文章的思路来做出Unity
Shader的形式。且为了我自己方便查找,我自然是要写一篇文章来记录一下啦。
核心思想
我们先获取到深度图中在视图空间下的深度,和自身在视图空间下的深度。然后我们通过一定的公式来修改其颜色或是其透明通道。
具体实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566Shader "Test/DepthTransit"{ Properties { _Color ("Color", Color ...
获取Unity内置图标
获取Unity内置图标
前言
突然发现自己也是闲的无聊,为了做文章的封面。所以我想拿到Unity的自带的一些图标。但是我找不到这些图片的位置。这时候我找到了一篇文章,这里面有方法可以获取到这些内置的图标。但是我们只能得到Texture类型的数据,且其是不可读。幸好我们可以通过一些操作让其可读并转为Texture2D类型的数据,最终得到一个.png的图片。这个操作我也是从网上找到的文章中看到的。以上所有的文章我都会放在下面的参考文章中。
主要代码实现
12345678910111213141516171819202122var source = EditorGUIUtility.IconContent("Shader Icon").image as Texture2D;RenderTexture renderTex = RenderTexture.GetTemporary( source.width, source.height, 0, RenderTextureFormat.Defaul ...
URP常用的方法和结构及其对应的位置
URP常用的方法和结构及其对应的位置
前言
不知道你们是否和我一样有着这样的经历。明明知道某些东西可以实现个人想要的功能,但是就是记不起函数。或是说对函数名字有些模糊。如果我们使用类似Visual
Studio这样的工具,那么它或许会给我们一些提示。但这些大多数是没有做Unity
Shader的适配。即使有也是需要花钱的。虽然我个人是使用VSCode来写Unity
Shader,但是我也没有找到一个好的插件。
我个人其实大多数时候不会去记这些函数,且我自身写Shader不多(主要是项目没需求,闲暇时间我也不知道怎么去学这方面的知识)。所以我只好写一篇文章来记录一下,我常用的信息。这里我只做了Unity
URP管线下的东西,毕竟内置管线还是有着不错的插件和一些文章总结。
URP版本
Universal RP 14.0.8
URP文件位置
我们打开任意一个Unity项目所在的文件位置。我们可以看到其Assets文件。在Assets文件的同目录下,我们可以找到Library\PackageCache\。在P ...
Unity使用TextMeshPro加载Emoji
Unity使用TextMeshPro加载Emoji
前言
我在网上搜索“TextMeshPro如何加载Emoji”,找到这篇文章Unity中使用TextMeshPro打出Emoji表情。文章中说要使用TextMeshPro的Pre版本。但实际上我们可以不升级版本也能够让TextMeshPro加载Emoji。
环境
Unity2022.3.8f1c1
Windows10
TextMeshPro 3.0.9(3.0.6版本也可以)
实现
正如文章下面的评论所说,我们直接修改TextMeshPro的代码就可以实现一样的功能。但是如果你真的按照他说的方法做后,你会得到下面的警告:
12345The package cache was invalidated and rebuilt because the following immutable asset(s) were unexpectedly altered: Packages/com.unity.textmeshpro/Scripts/Editor/TMP_Spr ...
在编辑器下不打包加载AB包资源
在编辑器下不打包加载AB包资源
前言
最近我的项目是在使用AB包来做资源加载。因为某些原因,策划频繁修改AB包的资源。比如某些贴图或是模型进行改动,或是UI位置上的修改。而且修改后,策划就要看效果。我不得不等一段AB包构建的时间(当然可以运行过程中进行更改,但如果有些东西更改太多,我会记不下。毕竟运行中的修改不能作用于我们的资源的)。所以我想能不能不打包也正常加载AB包资源呢?当然这个方法只能在编辑器中使用,毕竟正常情况下AB包本身就是要构建的。
代码展示
这里我只提供了如何不构建AB包进行加载的方法:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104#if UNITY_EDITORusin ...
2024-5最近的总结
2024-5最近的总结
没有4月总结的原因
4月份,我并没有写一份总结。主要的原因是我忘记了这件事情。次要原因当然就是4月比较忙,无论是生活上还是工作上。其实直到五月末,我依然没有轻松起来。工作的需求一个接一个的来,其他项目的同事倒是轻松。他们每天到点就走,而我已经加班好久了。往好处想,这说明我现在这个项目有赚钱的希望,他们的项目已经凉得差不多了。不过我倒是不觉得现在这个项目有什么希望就是了,毕竟看数据这个项目也快要凉了。我倒是希望这个项目结束以后,我有一段时间能轻松一下去钻研我喜欢的东西。
最近如何
我本以为自己对生活的感触一成不变,大体就是对现在生活的不满和未来生活的迷茫。直到昨天我才发现自己还是有些改变了,我变得更加迷茫和不满。我睡得越来越晚,我现在有一种可怕的思想。我总觉得只有在刷手机的时候,我才是为了自己而活。然后做其他任何事情,我都觉得是浪费时间或是痛苦。
特别是昨天半夜,我心脏突然有些不适。我起来喝了杯水,本想回去睡觉。但是我就是觉得现在睡觉不行。然后我就刷手机到了清晨。我似乎有一种强烈的自我毁灭的感觉,明明心脏已 ...
Unity的URP接受阴影
Unity URP下接受阴影
前言
虽然网络上已经有很多文章来说明如何实现了,但是网络上的文章有时候都不能满足我个人的需求。有时候我要去查找很多篇文章才能找到我想要的。所以我想自己写一篇文章记录一下,以后要是遇到啥直接来看自己的文章就是了。
环境
Windows操作系统 Unity2022.3.8f1c1
常规的阴影实现
如果我们直接新建一个URP的空白项目且不进行任何的修改。那么实现阴影的方法如下所示:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253Shader "Test/OnlyShadow"{ Properties {} SubShader { Tags { "LightMode"="Universal ...
UGUI拖拽效果实现
UGUI拖拽效果实现
环境
Windows10操作系统
Unity2022.3.8f1c1
Unity UI 1.0.0
正文
UGUI本身是没有提供拖拽的组件,但是它仍然提供了接口让我们知道何时为拖拽操作。我们只要通过实现IBeginDragHandler、IDragHandler和IEndDragHandler接口就可以知道何时开始拖拽、何时正在拖拽和何时拖拽结束。下面是简单的拖拽实现,挂载此脚本的UI会跟随鼠标移动。
1234567891011121314151617181920212223242526272829using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;namespace UITest{ [RequireComponent(typeof(Image))] public class TowableArea : MonoBehaviour, IBeginDragHandler, IDragHandler, IE ...
URP获取屏幕图像的解决方案
URP获取屏幕图像的解决方案
前言
当我们做一些后处理效果的时候,比如Bloom或者是Blur。我们都需要当前的屏幕图像来帮助我们实现这样的效果。本篇文章就是说明如何在Unity的URP管线下获取到屏幕图像。
环境
Windows10
Unity 2022.3.8f1c1
Universal RP 14.0.8
URP自带的获取屏幕图像功能
我们打开URP的设置([URP设置查找可以看这篇文章](https://www.starloong.top/2024/03/31/Unity%E6%9F%A5%E6%89%BEURP%E8%AE%BE%E7%BD%AE%E7%9A%84%E6%96%B9%E6%B3%95/)并将Opaque Texture勾选上。这里主摄像机中的设置中的Opaque Texture(在摄像设置中的Rendering下)选择Use setting from Render Pipeline Asset。然后URP就会自动去获取屏幕图像了。下面是一个简单获取图像显示Shader:
12345678910111213141 ...