自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 【Unity Shader】UI特效在RawImage上使用运行良好,但是在Image上则不是预期效果的问题

Unity中用Shader实现的UI特效在UGUI中的RawImage中运行良好,但是在Image中运行就奇奇怪怪的原因以及解决办法.

2022-05-13 19:39:59 1051

原创 【Unity Shader】实现UGUI下图片的倒影效果

效果如下原理:倒影区域也用图片本体,做个镜像翻转(RectTransform中的scale的Y设为-1),然后shader对图片进行处理,达到一个透明度Y方向上渐变的效果。实现:因为是UGUI上使用,推荐直接在内置的UI-Default.shader中进行修改(官网可以下载)。要达到Y方向上的透明度渐变,可以使用UV坐标中的v作为变化因子,通过一个衰减曲线达到效果,我这里采用的指数函数(Pow),关键代码其实就下面这一句,如下:color.a...

2022-05-08 16:59:31 1806

原创 【Unity】代码访问或操作网格Mesh带来的卡顿等性能问题(根源就是大量GC)

代码遍历或者修改模型网格Mesh带来的性能问题,卡顿原因。

2022-01-20 20:08:07 3498 1

原创 【Unity】代码获取Timeline中ControlPlayableAsset面板上的ParentObject以及动态修改

通过代码动态设置ControlPlayableAsset面板上的ParentObject

2021-12-23 21:04:56 2107

原创 【Unity Editor编辑器】 通过代码打开文件夹Show In Explorer操作与打开脚本定位到指定行

在编辑器开发的时候,保存按钮的旁边加一个打开文件目录(Show in Explorer)的按钮还是非常实用的,可以很方便的提交修改后保存的数据.比如这样的:点击打开文件夹,则直接锁定到数据保存的文件:在当前目录下进行SVN操作就方便多了.在Windows下打开文件夹需要用到文件资源管理器explorer.exe调用API:System.Diagnostics.Process.Start("explorer.exe", path);直接传入Asset下的路径即可,比如 Assets/Test/

2021-07-30 23:06:21 1390

原创 【Unity】ScriptableObject的使用以及通过代码的加载与保存方式

官方地址:https://docs.unity3d.com/2018.4/Documentation/Manual/class-ScriptableObject.html

2021-06-18 00:00:31 14036 5

原创 【Unity Shader】2D模型 3D模型混用的穿模问题(Spine在3D场景中出现前后穿模问题的解决办法)

问题描述:在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型)可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示:如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:

2021-04-18 01:14:39 3382 4

原创 【Unity】环境光探究,在shader中如何计算 : Ambient Color, Sky Color, Equator Color, Ground Color

环境光接触过光照模型的小伙伴肯定对环境光不陌生,比如phong光照模型,渲染结果就是下面几项的线性叠加:环境光+漫反射+高光而一般情况我们在Shader中计算环境光也是简单的不能再简单了,直接可以从Unity的宏定义中拿到环境光颜色值: UNITY_LIGHTMODEL_AMBIENT.xyz他的定义是这样的#define UNITY_LIGHTMODEL_AMBIENT (glstate_lightmodel_ambient * 2)接下来就是设置环境光并进行测试.设置通过Window-

2021-02-02 00:26:47 4079

原创 【Unity】光照贴图动态加载

一般情况下对场景进行烘焙后,其实不用关心光照贴图的加载问题,Unity会自动帮我们处理好的,比如这个测试场景,烘焙结束后,关掉烘焙灯光,运行,直接运行得到的效果就是预期这样,没有写任何代码,光照贴图就会自动加载好并使用。如图:如果这个场景中的Cube与Plane需要进行动态生成,而不能提前保存在Scene中,那么就需要一起动态加载光照贴图了。或者在某些情况下出现光照贴图丢失的情况,那也需要进行动态加载操作,比如这样第一步 找到光照贴图默认情况下,烘焙结束后会自动在场景所在目录中创建一个同名目录,然

2021-01-18 22:37:52 4314 5

原创 【Unity Shader】使用模型坐标与动态批处理的注意事项

shader中使用模型坐标参与计算,就得注意批处理的影响,比如在场景中某个材质的物体出现一个的时候,表现正常,但是一旦再出现第二个,两个物体的表现就变成玄学了(不是自己预期的那样),一旦由隐藏掉另外一个,剩下的另一个由正常了。当然这肯定不是玄学,得分析分析其中的原因。做一个简单的测试,使一个正方体上半部分显示绿色,下半部分显示红色:shader中在fragment中通过模型坐标Y的大小来决定颜色是红是绿:fixed4 frag (v2f i) : SV_Target{ if(i.model

2020-12-26 22:02:04 452

原创 【UGUI】 全屏背景图片等比例拉伸自适应

首先感叹一下,UGUI的自适应做的还是非常不错的,RectTransform中提供了非常多种的自适应方式.对做界面来说还是很友好的.如果界面上需要有个全屏的背景图(UI界面一般都是有的吧,弹框啥的除外),那么需要简单的这样设置就可以满足屏幕的自适应了(so easy):不过这样的自适应方式是直接拉伸铺满整个屏幕的方式,并没有保障等比例拉伸,就是说背景图就会出现变形,以下面这张图为例(注意黄色的圆):自带的自适应效果是这样的:而等比例拉伸自适应的效果是这样的:实现第一步既然是自己写代码

2020-12-11 20:52:09 4652 1

原创 【UGUI】获取Unity中Canvas下的任意UI控件的屏幕坐标(可适用于不同的Canvas Render Mode)

Unity屏幕坐标的规则是左下角为原点,然后X向右递增,Y向上递增,区间都是[0,1]。有些时候在做UI上的一些效果的时候,需要知道UI控件所处的屏幕坐标位置,就需要有些做些处理,而不像世界坐标那么容易获得。还有个问题是Canvas有三种RenderMode,内部的计算规则又不一样。。。所以在这里记录一下具体的获取UI屏幕坐标的方式。ScreenSpace-Overlay可直接获取到position的XY坐标并通过除以屏幕的宽高,映射到屏幕坐标的[0,1]区间:float x = ui.tran

2020-11-22 17:46:43 3633

原创 【Unity Shader】马赛克效果Mosaic

效果如下:原理:以常见的普通正方形小方块表现的马赛克为例,首先将图片进行格子划分为N*N个小方块.然后每个小方块的颜色则取该方块中心点位置的颜色值.代码上的目标就是某个小块内的uv值都修改为本小块的中心点的uv值.关键代码:i.uv.x = round(i.uv.x / _Factor) * _Factor;i.uv.y = round(i.uv.y / _Factor) * _Factor;round(x) 四舍五入, 为了让周围的像素取中心点的颜色值. _Factor范围大小的参数,表

2020-11-09 20:24:08 1878 1

原创 【Unity Shader】聚光灯体积光效果的简单实现

效果如下:Unity中的聚光灯SpotLight,可以用作手电筒,射灯等类似的效果,比如这样的但是如果想把光束的效果做出来,就超出了SpotLight的能力范围了,本篇就为了记录一下一种简单的实现光束效果的办法。(不会用到体积光复杂的计算,当然局限性也很大,适合于要求不是很高的场景)原理:准备好一个锥体模型,半透明着色,并处理好边缘的虚化。1.椎体网格,就是光束的样子,用来模拟光束的体积感2.开始编写shader,简单的输出颜色即可,不需要纹理也不需要计算UV,因为是模拟光,就普通的半

2020-09-26 22:26:01 8376 9

原创 【图形学】计算网格中两点连成的直线所经过的格子

注意,本文的算法是建立在格子坐标都是整数的前提下.目的因为做的游戏中有个攻击阻挡的需求(战棋类),就需要判断两个单位的连线上经过的格子中是否有障碍物的.那么就需要知道这个连线(线段)到底经过了哪些格子.本文则是针对此类问题的一个解决方案.效果算法到底对没对,看看这张动态图演示就一目了然了,红色是起点,鼠标所在处是终点,黑色的格子则代表图中经过的格子.(Unity中的Demo效果)几张静态图原理任何线段都可以通过平移方式,将起点平移到原点处,而陡峭的线段可以通过延y=x翻转(x,y进行交

2020-07-26 00:38:14 7011 6

原创 【Unit Editor编辑器】自定义窗口EditorWindow,创建模板脚本工具

总览:关键点:1.创建自定义窗口2.正则表达式校验输入的脚本名是否符合脚本命名规则3.获取Project窗口中选中文件夹路径4.简单的文件操作原始方法:原始的创建脚本操作是这样的,Unity中在Project面板中,右键/Create/C# Script,如图:创建好的脚本其实不是空白,而是已经有了简单的Start和Update方法,每次都是一样的(除了名字是自己修改后的),由此可见新建的脚本中的内容就是从一个模子里刻出来的,而这个模子就在Unity的安装目录下…Unity\Editor\

2020-07-25 23:48:30 1758

原创 【Unity Shader】Icon图片圆角处理

之前写过一篇,方形头像和圆形头像的过度效果,Unity随记(三) 方形头像与圆形头像的切换过度效果.当时采用的就是从中心点(0.5,0.5)为圆心,通过控制半径的长度和方形头像进行剪切的操作,文章:但是如果需要对icon进行圆角处理,则需要换个方式了,不然会显得比较生硬,对比图如下:这里采用的是四个角都用一个小圆来进行对边角的裁剪处理(真正的圆角处理不知道是不是这样,不过现在这样的效果看起来已经满足需求了).如下图所示:参考右上角的小圆,仅仅找到蓝色部分,将蓝色部分的Alpha设为0使其透明不显示

2020-07-15 21:55:45 2676

原创 【Unity Editor编辑器】 代码获取project面板选中资源路径(自定义右键菜单)

在Unity编辑器中,如果想要快捷的获取到Project面板中选中文件的路径,比如我们需要用Resources.Load的方式加载一个prefab,就需要知道这个prefab的路径,或者在自定义窗口中需要显示出所选择文件的路径,那么接下来的方法就能排上用场了。代码:public static void LogPath(){ //支持多选 string[] guids = Selection.assetGUIDs;//获取当前选中的asset的GUID f

2020-07-14 21:17:29 5062 1

原创 Unity随记(八) shader实现立方体Cube显示边框,描边

效果如下:或者只显示线框,如下:注意此效果仅仅针对部分模型生效,比如unity内置的立方体Cube,因为采用的实现方式比较依赖顶点UV值。实现思路:通过UV值判断,处在立方体边的边缘附近(接近0和接近1的部分)的部分可见,而其他部分透明度设为0,作为不可见部分,而具体要怎么判断是否在边附近。要从内置的cube顶点参数来找线索了,如果仅仅是为了显示一个立方体模型的话,用八个顶点就够了,也就是说立方体的每个角就一个顶点,一个面两个三角形就总共十二个三角形就搞定,的确,如果自己手动尝试构造一个立方

2020-07-11 00:54:18 5286

原创 Unity随记(七) shader实现石像石化效果

先上效果图:静态对比图:简单实现思路,从两点出发,一个是去掉绚丽的颜色(变灰处理咯),一个是贴上大理石纹理(看起来更像石头点)。第一步(变灰处理)float grey = dot(col.rgb, float3(0.299, 0.587, 0.114));col.rgb = lerp(col.rgb, float3(grey, grey, grey), _StatueDegree);...

2020-05-06 00:16:07 2275 3

原创 Unity随记(六) 利用Camera.SetReplacementShader实现简单的场景击杀效果

先上效果图2D版本:3D版本:小蓝在小红濒死状态下补上了致命一击,人物变成黑色剪影效果,场景配合变成黄白交替闪烁,再配合一个慢动作就是上面的这个简单的场景击杀效果(因为是战斗场景和人物同时做出一个整体的配合表现击杀的效果,暂时就取个这个名字吧~)实现思路在击杀时刻,调用SetReplacementShader方法,将人物的shader临时替换成黑色剪影效果的渲染方式,场景的shade...

2020-04-18 11:43:11 1102

原创 Unity随记(五) 利用shader实现简单的受击闪白与濒死效果

先上效果图小蓝吧小红逼到了墙角乱砍一番,受击效果与濒死效果就是如图所示,简单的实现则是通过颜色叠加的方式,在最终的颜色值上叠加上白色与红色,然后代码控制简单的交替变化。所以在shader方面仅仅只用进行一个颜色的加法操作即可:fixed4 frag(v2f i) : SV_Target{ fixed4 col = tex2D(_MainTex, i.uv) * _Tint; //受击...

2020-04-17 23:51:49 5028 1

原创 Unity随记(四) shader_feature 与 multi_compile的填坑过程

#pragma shader_feature 和 #pragma multi_compile相似,起作用就是在一个shader脚本中支持多个版本的分支选择,和C#里面使用的宏定义差不多,使得shader代码的编辑更加高效(不用因为一点处理分支不一样而编写多个shader,只用使用这个方式,同一个shader中就可以支持多个分支,unity会自动编译出多个对应分支处理的shader,这就是变种数的体...

2020-04-04 20:15:01 3441

原创 Unity随记(三) 方形头像与圆形头像的切换过度效果

先上效果图这应该不太陌生的吧,这就是雨松大牛Unity3D研究院里面的头像效果,最开始逛他的文章就发现这个效果有点意思,于是自己动手在Unity里面实现一个类似的效果。其实关键就两步操作,1.实现图片的圆形裁剪,2.控制图片的旋转圆形裁剪要做圆形裁剪,首先想到的就是用Shader来处理了,通过图片的UV值可以明确的知道,裁剪后的圆的圆心处的UV值其实是(0.5,0.5),而左下角的值是(...

2020-03-29 20:29:07 1718 3

原创 代码中一些有趣的二进制操作

二进制不是0就是1,有点枯燥乏味,对我们来说可能是没有十进制友好,但是对计算机却是很友好,计算机对二进制的处理可谓是手到擒来。其实代码中对二进制的使用也有很多有趣的操作,本篇就是对一些二进制操作的实例记录。(为了方便,下面的例子都是默认输入都是正整数,也没有多余的判断,可能不够严谨,目的只是为了体现二进制的一些操作而已)1.奇数偶数的校验偶数就是能被2整除的那些整数,所以就应该这么写...

2020-03-21 12:57:39 914

原创 Unity随记(二) GPU Instancing的使用

GUP Instancing技术,在模型的批处理上相当有用,比如地形上大量的草,树等,当然对于这部分可以直接静态合批处理成一整个网格,但是顶点数目又会有65000个的限制。这时候GPU Instancing就有一定的优势(关键还支持材质球上属性的差异性,比如官网的例子中就提供了颜色值的差异性)。官网地址:https://docs.unity3d.com/Manual/GPUInstancing...

2020-03-15 15:30:37 2516 1

原创 Unity随记(一) LookAt和LookRotation的使用

Unity中的transform.LookAt()与Quaternion.LookRotation()从名字上看都是有注视目标的意思,这里简单记录下这两个方法的使用,先上动态图(图中四个单位,其中只有大的红色Boss是通过键盘控制位移和旋转,其他三个小单位则是通过对这两个方法的使用达到图中的效果的):transform.LookAt()注意图中的小蓝,以及那根蓝色的线,可以发现小蓝的朝...

2020-03-01 19:19:20 13869 6

原创 NGUI字体添加Gradient颜色渐变效果

因为项目原因,采用的是比较老的NGUI(2.7),文本控件UILabel没有类似于UGUI的Gradient渐变效果的选项,所以需要自己动手添加.先瞧瞧成品后的效果:再来看看UGUI的Gradient效果,很方便,直接挂脚本就生效.代码如下:public class Gradient : BaseMeshEffect{ public Color32 topCol...

2019-09-04 19:08:42 1402

原创 UnityShader纹理特效(一) 图片添加阴影

两天前有个朋友想要弄个给图片加阴影的效果找我帮忙,刚开始比较纳闷图片加阴影,怎么个加法,当他发了张图瞬间就懂了,效果是这样的:原理就是简单的一个UV小幅度的偏移采样得到影子然后和原始UV采样的结果叠加在一起(影子在后面原图在前面)就OK了.(纹理的wrapMode需要设置为Clamp)完整的Shader:Shader "Custom/ImageShadow"{ Prope...

2018-12-09 13:55:57 2770

原创 Real-Time Rendering 4th Edition 读书笔记(五) 6.Texturing

6.Texturing 6.1 The Texturing Pipeline注意以上步骤并不是所有的都必须实现.投影函数(projector function)将模型上的一点(-2.3,7.1,88.2)投影到二维空间的点(u,v),其中uv都是[0,1],映射函数(corresponder function)将投影值分量分别乘以图片的宽高,得到(81.92,74.24),舍弃...

2018-10-07 22:42:41 1639

原创 Real-Time Rendering 4th Edition 读书笔记(四) 5.Shading Basics

5.Shading Basics  5.1Shading Models其实就是多次差值计算的使用,就是CG语言中的lerp函数. dot对两个单位向量使用的结果是获得两个向量的夹角的cos值.其中的n,l,都是单位向量, dot(n,l)求得cos值,因为l的大小为1,所以在n上面的投影值为就是cos值, 而 l + r 所得到的向量方向与n方向一样,大...

2018-09-10 21:11:50 1594

原创 Real-Time Rendering 4th Edition 读书笔记(三) Transform

4.Transform 这一章节主要讲的是变换相关的数学知识,重温一下,记录一些关键点,(Quaternions 四元数,非常强大,还需要在花时间好好梳理梳理,这一篇里面就暂时不记录四元数相关的了). 仿射变换 affine transformAll translation, rotation, scaling, reflection, and shearing matrice...

2018-09-01 15:14:54 2817

原创 Real-Time Rendering 3rd 读书笔记(二) The Graphics Processing Unit

3.The Graphics Processing Unit GPU实现的渲染管线的流程: 绿色可编程,黄色只可配置,蓝色是不可操作的. 可编程阶段:Shaders are programmed using C-like shading languages such as HLSL, Cg, and GLSL. These are compiled to a machine...

2018-08-24 19:21:47 334

原创 Real-Time Rendering 3rd 读书笔记(一) 图形渲染管线

2.The Graphics Rendering Pipeline 由三个阶段组成:应用程序阶段,几何阶段,光栅化阶段 应用程序阶段: 几何阶段: 光栅化阶段: 在光栅化中Merging下的几个buffer概念:Z-buffer(depth ubffer)color buffer(alpha-test在深度测试之前)stencil...

2018-08-21 20:04:52 1041 3

原创 Unity Shader 纹理采样UV动画 帧动画

在Shader纹理采样的运用中,灵活的对UV进行操作可以达到很多种很棒的效果,今天就来介绍一种简单的动画效果帧动画。效果图:用到的示例图:关键点就是对纹理采样中的缩放(Tiling)与偏移(Offset)的理解,如图:正常情况下的采样效果:帧动画要求每次只显示一小张图,然后练习跳转显示后续的图,所以每次UV的范围就不能在默认的0-1的范围。如给定的这张图,宽为2,高为3,u的范围(Tiling的X...

2018-03-08 23:03:51 2255

原创 Unity UGUI 不规则按钮 响应区域重叠的解决办法

如果遇到这样的布局,为了使四个按钮都能够准确无误的响应到自己的点击方法,该怎么办呢?在UGUI中,图形(Graphic组件)接收事件响应的区域其实就是组件的大小,比如这个蓝色的图片接收响应的区域就是图中矩形框大小:如果出现这样的布局,响应区域就会出现重叠,并且是上层对下层的遮挡,按照这遮样的布局就是红色对蓝色的挡,点击公共区域,点击事件被红色的拦截到,蓝色按钮是不会响应到点击事件的,即使感觉是点击...

2018-03-04 21:00:07 5769 1

原创 Shader学习 基于vert/frag顶点片段级的纹理采样 光照贴图实现

通过对纹理采样的Shader学习,明白了几点:1.  _MainTex_ST  :这个是纹理名 + _ST的float4变量,其实就是Unity为我们提供好的直接获取到的UV的缩放与偏移值,刚好四个值,凑成一个float4:2.顶点UV值的获取:在unitycg.cginc中的appdata_full中的texcoord.xy, 如果需要支持光照贴图,光照贴图的uv存在texcoord1.xy中:...

2018-02-28 21:10:22 3603

转载 Unity3D 光照贴图

概念Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感;缺点是不能用来实时地处理动态光照。当游戏场景包含了大量的多边形时,实时光源和阴影对游戏的性能的影响会很大。这时使用Lightmapping技术,将光线效果预渲染成贴图使用到多边形上模拟光影效果。烘焙参数Object选项卡“All”组中的参数 Lig...

2018-02-28 20:33:06 1303

原创 对io流学习的简单总结

IO流,即数据流,由序的一串字节序列。在java.io包下。输入输出的就是字节,这些字节就是程序中的数据。输入流就是将数据从外部传输到程序中的去(如吧硬盘中某个文件中的数据读入到程序中),而输出流就是把数据从程序中传输到外部(如吧数据写进一个硬盘中的一个文档中。)1.File 指的是文件和目录路径名的抽象表示形式。File的字段pathSeparator

2014-12-24 16:51:46 447

转载 java类的加载初始化

1.类在JVM中的工作原理1):类加载load:从字节码二进制文件——.class文件将类加载到内存,从而达到类的从硬盘上到内存上的一个迁移,所有的程序必须加载到内存才能工作。将内存中的class放到运行时数据区的方法区内,之后在堆区建立一个java.lang.Class对象,用来封装方法区的数据结构。这个时候就体现出了万事万物皆对象了,干什么事情都得有个对象。2):连接:连接又分为以下小

2014-12-06 16:53:56 565

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除