![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity3D
文章平均质量分 91
WangShade
www.laowangomg.com
展开
-
Git基础及常用命令
讲述了Git的一些基本工作原理,介绍了Git中常用的一些命令,解释了快速合并、3路合并以及变基的原理。原创 2022-06-18 16:24:18 · 1646 阅读 · 1 评论 -
Git工作流(分支管理规范)
Git工作流程、Git分支管理详细说明。原创 2022-06-11 12:26:56 · 1045 阅读 · 0 评论 -
Unity3D Shader系列之模板测试
1 引言前面3篇文章详细总结了深度纹理相关的知识,可以文中可以看出,在Unity中使用深度纹理及其简单。但是我们为什么仍然在这3篇文章中花了大量的篇幅去说明深度纹理的底层知识呢?因为只有知道了底层的数学和原理,才能举一反三,才能心里有底。在学习建立在该原理上的新技术的时候,才能一点也不吃力。不论是计算机图形学还是CPU端的性能优化,本质的东西都是几十年不变的。只有夯实了基础,才有建高楼的可能。只有知道了本质,我们才知道如何去优化我们的代码,让其运行得更加地高效。才能写出自己真正感到满意、感到欣赏的代码。原创 2022-05-23 08:00:00 · 4157 阅读 · 4 评论 -
Unity3D Shader系列之深度纹理重建世界坐标
详细介绍了在屏幕后处理阶段如何使用深度纹理重建世界坐标。原创 2022-05-15 13:40:50 · 2525 阅读 · 4 评论 -
Unity3D Shader系列之护盾效果
目录1 引言2 代码实现2.1 原理分析2.2 代码分析2.2.1 获取深度纹理2.2.2 使用视口坐标对深度纹理采样2.2.3 获取当前像素的深度值3 完整代码4 参考文章1 引言在《Unity3D Shader系列之深度纹理》这篇文章中,我们详细讨论了深度纹理相关的知识点,这里面留了一个坑,说用深度纹理来实现一些效果。今天咱们就用深度纹理来实现一下护盾的效果。注意,看这篇文章之前一定要将深度纹理的知识弄清楚,这样才能看懂Shader中的代码。效果如下。2 代码实现2.1 原理分析护盾效果的原创 2022-04-23 23:05:28 · 3791 阅读 · 1 评论 -
Unity3D Shader系列之深度纹理
详细解释了深度纹理存储的内容,给出了OpenGL与DirectX平台下的裁剪矩阵,推导了获取线性深度值的公式,详细介绍了深度值精度问题出现的原因以及为什么Reverse Z可以解决此问题,并给出了Unity中实现场景扫描的实现。原创 2022-04-21 21:25:31 · 7075 阅读 · 0 评论 -
Unity3D Shader系列之描边
参考文章Unity Shader-描边效果Outline Shaderoffset的作用Unity Shader 中 Offset 设置的作用Shader Depth Offset [Polygon Offset][OpenGL][SharpGL]用Polygon Offset解决z-fighting和stitching问题原创 2022-04-10 22:15:18 · 15117 阅读 · 3 评论 -
Unity3D Shader系列之全息投影
1 效果展示2 实现原理①使用视口坐标对扫描纹理采样②根据扫描纹理clip掉相应部分③叠加边缘光④顶点偏移3 源码4 参考文章https://sharpcoderblog.com/blog/create-a-hologram-effect-in-unity-3d[UnityShader]使用shader产生全息投影的效果Unity从零开始实现一个全息效果Shader...原创 2022-04-05 00:18:48 · 5295 阅读 · 1 评论 -
Unity3D Shader系列之透视效果XRay
Shader实现透视效果,X光效果。原创 2022-03-26 22:31:36 · 9100 阅读 · 4 评论 -
Unity3D Shader系列之边缘光RimLight
1 引言这一两个月会花一点时间来集中总结下用Shder实现的效果。其实我一直在想为什么自己将渲染流水线、坐标变换这些弄得非常清楚了,但看到某种效果的时候,依然不知从何下手?现在觉得最主要的原因是自己对实现这种效果的算法的知识是欠缺的。因为每种效果用到的算法是都是不一样的,不是说自己把这种效果弄懂后就能迁移到另外一种效果。说白了没有系统性的看过书,系统看过书之后,看到某种效果就能大概知道它底层的原理是什么,原理知道了写Shader相对来说就是简单的事情了。所以来总结下一些常用的效果,以便后面查阅。2 原理原创 2022-03-20 22:48:37 · 6573 阅读 · 2 评论 -
Unity3D Shader系列之渲染流水线
1 引言硬盘上的一个3D模型模型是怎么渲染到我们的屏幕上来的呢?答案是经过渲染流水线。完整的渲染流水线包括3个大阶段,应用阶段→几何阶段→光栅化阶段。每个大阶段又分为几个小阶段。下面我们来看看整个渲染流水线过程。2 应用阶段应用阶段分为3个小步骤:①加载模型数据到显存②设置渲染状态③调用Draw Call2.1 加载模型数据到显存先是CPU将模型数据加载到内存中,模型数据包括模型的网格数据(包括顶点的局部坐标、顶点的法线、顶点颜色以及顶点的纹理坐标等)、法线、材质、贴图等。然后GPU将这原创 2022-03-19 23:47:39 · 4639 阅读 · 0 评论 -
Unity3D C#数学系列之变换矩阵推导
1 仿射变换与齐次坐标《Unity3D C#数学系列之矩阵基础》中我们说到一个4×4的矩阵可以用来对三维空间中的点或向量进行各种变换,包括平移、旋转、缩放(当然还有错切、镜像等,由于我工作中这几种从来没用过,所以这里就不说这两种变换了)以及这几种变化的组合。这些变换有一个统一的名字,叫做仿射变换。三维空间中,只要是仿射变换,就可以用一个4×4的变换矩阵来表示。但是为什么变换矩阵一定是4×4的呢,3×3行不行?答案是不行。如果不考虑点的平移,只考虑向量或点的旋转、缩放,3×3的矩阵就可以了。但如果考虑点的原创 2022-01-03 00:20:31 · 4082 阅读 · 1 评论 -
Unity3D C#数学系列之矩阵基础
1 矩阵的作用矩阵的作用非常大,但是在Unity中,矩阵最重要的一个作用其实就是将一个点从一个位置变换到另外一个位置。举个例子,世界坐标系下有一点A,点A原创 2021-12-26 22:40:15 · 5271 阅读 · 0 评论 -
Unity3D C#数学系列之叉积
向量叉积的定义、几何意义、性质与使用案例。原创 2021-12-11 22:29:08 · 4002 阅读 · 0 评论 -
Unity3D C#数学系列之点积
1 定义2 几何意义如果b⃗\vec{b}b为单位向量,则表示向量a⃗\vec{a}a在向量b⃗\vec{b}b上的投影。3 a⃗\vec{a}a·b⃗\vec{b}b = xa xb+yayb+zazb上面这公式是怎么来的?设根据余弦定理有所以4 应用案例4.1 求两向量的夹角已知向量根据点积的定义,则有4.2 判断两向量是否垂直两向量垂直时,两者夹角为90°,而cos90° = 0,故a⃗\vec{a}a·b⃗\vec{b}b =0。换句话说,只要a⃗\vec{原创 2021-11-28 00:03:21 · 5014 阅读 · 2 评论 -
Unity3D C#数学系列之三角函数
目录1 定义2 常用公式推导2.1 sin²θ + cos² = 12.2 sinθ = cos(90°-θ)、 cosθ = sin(90°-θ)2.3 sin(-θ) = -sinθ、 cos(-θ) = cosθ2.4 sin(90°+θ) = cosθ 、cos(90°+θ)=-sinθ2.5 余弦定理2.6 正弦定理2.7 cos(θ-β) = cosθ*cosβ + sinθ*sinβ3 三角函数图像性质4 Unity中三角函数常用到的地方1 定义三角函数的定义:在一个平面直角坐标系中,原创 2021-11-20 21:48:51 · 5256 阅读 · 3 评论 -
Unity Bug:Incompatible min precision type for operand #1 of opcode #39 (counts are 1-based).
打包时提示报错Shader error in ‘Sprites/Diffuse-HueShift’: Program ‘frag_surf’, error X8000: D3D11 Internal Compiler Error: Invalid Bytecode: Incompatible min precision type for operand #1 of opcode #39 (counts are 1-based). Expected int or uint. (on gles3)在编辑原创 2021-11-19 10:30:22 · 2827 阅读 · 0 评论 -
Unity3D C#之IL2CPP Windows端隐藏任务栏图标并添加至托盘
1 引言在这篇文章中,我们实现了点击最小化和关闭菜单将程序隐藏到任务栏的功能,但是这篇文章需要额外一个winform程序来处理任务栏的功能,有没有方法可以不需要依赖其他程序也能实现这个需求呢?当然有的,使用Windows系统提供的API就行了。我们先来看看完全依靠调用Windows提供的API实现的效果。...原创 2021-11-06 22:33:43 · 5041 阅读 · 9 评论 -
[译]Unity3D Shader教程(八)Planar Mapping
原文链接:Shader Tutorials by Ronja1. Summary概要。有时候我们的网格数据中并没有UV坐标,或者我们想让多个模型的纹理对齐,或者还有其他什么原因,我们需要动态生成UV坐标。那么接下来的教程,我们将以最简单的方法,二维平面映射,来生成我们的UV坐标。本教程是在上一个图片着色器的基础上实现的。但是你也可以在任何表面着色器上使用这种方法。2.Basics首先我们将输入结构体中的uv变量删除掉,因为我们打算通过脚本生成。struct appdata{ f.翻译 2021-10-17 11:10:57 · 282 阅读 · 0 评论 -
[译]Unity3D Shader教程(七)Sprite Shaders
原文链接:Shader Tutorials by Ronja1. Summary概要。在 unity 中,精灵的渲染方式与 3d物体的渲染方式非常相似。 大部分工作由精灵渲染器(Sprite Renderer)组件完成。 我将稍微介绍一下组件正在做什么以及我们如何更改着色器以执行默认精灵渲染器正在执行的一些操作。本教程将建立在我们之前制作的透明着色器的基础上,因此您最好先了解它。2. Scene Setup场景设置。为了使用Sprite Shader,我将场景更改得更简单,使用正交相机.翻译 2021-09-12 21:51:19 · 2776 阅读 · 0 评论 -
[译]Unity3D Shader教程(六)Basic Transparency
原文链接:Shader Tutorials by Ronja除了只是在屏幕上绘制颜色之外,我们还可以保留一些以前在屏幕上的颜色,使物体看起来透明。 我将解释我们如何在没有照明的基本着色器中实现这种效果。要了解如何实现透明度,我建议您了解编写着色器的基础知识,如果没有这方面的知识建议先看之前的教程。本篇的Shader是在《[译]Unity3D Shader教程(四)Basic Shader》中Shader的基础上修改的。为了使透明物体正确渲染,我们必须告诉 unity 此物体是透明的。 我们通过.翻译 2021-08-14 13:02:43 · 329 阅读 · 0 评论 -
[译]Unity3D Shader教程(五)Surface Shader Basics
目录1 Summary2 Conversion to simple Surface Shader3 Standard Lighting Properties4 Implement a few Lighting Properties5 Minor Improvements原文链接:Shader Tutorials by Ronja表面着色器基础。1 Summary概要。除了几乎从头开始编写着色器之外,unity 还允许我们定义一些参数并让 unity 生成执行复杂光计算的代码。 这些着色器称为翻译 2021-08-05 11:00:42 · 507 阅读 · 0 评论 -
[译]Unity3D Shader教程(四)Basic Shader
原文链接:Shader Tutorials by Ronja1 概要在前三个教程中,我解释了让Shader工作的一些基础部分。 在这一部分中,我将向您展示如何填写其余部分。我没有展示的主要内容是实际执行的代码。 那是因为您一开始不需要太多代码来运行着色器,而且所有花哨的代码都在专门的教程中。2 What we have so far到目前为止我们所知道的。下面Shader中的所有部分再前三个教程中的某一个都有解释。 如果您有其他想法,请随时告诉我。Shader "Tutorial/00.翻译 2021-08-05 10:59:49 · 291 阅读 · 0 评论 -
[译]Unity3D Shader教程(三)变量
目录1 Summary2 Object Data3 Interpolators4 Output color5 Uniform data6 Spaces?7 Sources原文链接:Shader Tutorials by Ronja1 Summary概要。在明确了着色器部分是如何组合在一起的,以及在实际着色器代码之外的 shaderlab 的粗略轮廓之后,我们来看看我们的着色器需要哪些变量来运行,以及如何将这些变量添加到我们的代码中。这些变量包括我们为每个材质设置的变量、网格数据变量的一部分以及翻译 2021-06-20 17:36:56 · 481 阅读 · 0 评论 -
[译]Unity3D Shader教程(二)HLSL
目录1 HLSL?2 Builtin Types3 Vector Values4 Matrix Values5 Textures6 Math7 Custom Types8 Variables9 Functions10 Control Flow10.1 if statements10.2 Loops原文地址Shader Tutorials by Ronja。1 HLSL?HLSL(High Level Shading Language,高级着色器语言)是Unity用来编写着色器的语言,其用来自定义翻译 2021-06-13 23:19:22 · 3201 阅读 · 0 评论 -
[译]Unity3D Shader教程(一)ShaderLab结构
很久没更新博客了,这段时间有点忙。本来一直想写总结一下怎么写Shader,但是的确是心有余而力不足(一是能力不够,二是工作真的太忙了,每天回来大脑都是用脑过度的状态)。自己写不出来,但好在有大佬写了很不错的Shader教程,就决定翻译一下。大佬原文Shader Tutorials by Ronja。下面进入正文。1 Shader结构在用Shader实现出我们想要的效果前,我们需要先知道Shader代码的基本结构(就像我们用C#编程需要先知道C#的语法一样)。大多数现代着色器都有一个可变的渲染管线.翻译 2021-06-06 20:59:22 · 1048 阅读 · 0 评论 -
Unity3D C#数学系列之坐标系之间的变换
目录1 引言2 坐标变换2.1 结论2.2 示例1 引言工作中经常要进行各个坐标系之间的相互转换,比如要将Oxyz坐标系中的点变换到O’x’y’z’坐标系下,这就涉及到两个坐标系之间的变换矩阵问题。当然两个坐标系之间的变换矩阵是有公式的,比如Oxyz绕x轴旋转θ角后得到O’x’y’z’,则Oxyz到O’x’y’z’的变换矩阵为(需要注意的是,本文说的旋转都是按照左手法则来定义方向的,如果使用的是右手坐标系,下面结论中的sinθ的符号会是相反的)再比如Oxyz绕y轴旋转θ角后得到O’x’y’z’原创 2021-03-21 20:57:38 · 1343 阅读 · 1 评论 -
Unity3D UGUI系列之自定义圆形按钮
目录1 效果展示2 分析3 项目4 参考文章1 效果展示只在圆形区域内点击有效。2 分析参照UGUI源码中的Image,创建一个子类继承自MaskableGraphic重写OnPopulateMesh方法,创建圆形图片的网格(UGUI控件的本质是网格,这点可参考之前的博客《Unity3D UGUI系列之合批》)实现ICanvasRaycastFilter接口,用来过滤掉圆形区域外的点击3 项目项目链接:https://pan.baidu.com/s/1VBHjsIrlTInb8Qxd原创 2021-03-07 22:11:47 · 2686 阅读 · 0 评论 -
Unity3D C#数学系列之判断两条线段是否相交并求交点
1 引言问题:已知三维空间中四点A、B、C、D,如何判断线段AB与CD是否相交,若相交则求出交点。分析:AB、CD要相交,则AB、CD必须要在同一平面内快速排斥和跨立实验判断是否相交几何法分析求出交点2 求解2.1 AB、CD是否共面要判断AB、CD是否共面,其实就是判断A、B、C、D四个点是否共面。我们知道三点确定一个平面,如果AB垂直于ACD三点所在平面的法线,则说明A、B、C、D四点共面。A、C、D三点所在平面的法线怎么求?很简单,两个向量的叉乘就是这两个向量所在平面的法线。原创 2021-03-03 22:41:11 · 6503 阅读 · 10 评论 -
Unity3D之Windows端隐藏任务栏图标并添加至托盘
1 基本效果基本功能:点击关闭,不直接关闭,缩小到托盘托盘图标上可打开、隐藏和关闭程序效果展示:2 代码实现2.1 思路两个程序,Unity一个程序,winform一个程序winform程序用来生成托盘图标,并且控制Unity程序的最大、最小化及关闭Unity程序需要监听到鼠标点击标题栏右上角最小化和关闭事件winform程序需要单例运行(同一时间只允许一个程序允许)Unity程序启动时,同时启动winform程序2.2 实现2.2.1 Unity程序监听最小化和关闭事原创 2021-02-28 22:10:07 · 3993 阅读 · 1 评论 -
Unity3D UGUI系列之合批
详细介绍了UGUI合批的规则及原理,并给出了Demo分析。同时,附带介绍了Frame Debugger和Profiler UI怎么使用。原创 2021-01-16 22:21:00 · 20125 阅读 · 31 评论 -
Unity3D Shader系列之几何着色器基础
1.什么是几何着色器最近一直在练习写Shader,发现用几何着色器可以写出特别酷炫的效果。于是去学习了一下,这里做个总结以备查阅。几何着色器位于渲染流水线的几何阶段,在顶点着色器与片元着色器之间。备注:图片来源于冯乐乐的《Unity Shader入门精要》p9其在Shader中是可选的,完全可编程的。顶点着色器是以顶点数据(局部坐标、法线方向、纹理坐标等)做为输入,然后输出齐次裁剪空间下的顶点坐标、顶点颜色以及其他阶段需要的信息。每个顶点都会调用一次顶点着色器。顶点着色器不能够创建和销毁任何顶点原创 2020-12-19 15:43:58 · 3019 阅读 · 1 评论 -
Unity3D Shader系列之中常用内置变量与方法
目录1 常用变量1.1 顶点着色器输入结构体体1.2 _LightColor01.3 _WorldSpaceLightPos01.4 UNITY_LIGHTMODEL_AMBIENT1.5 unity_ObjectToWorld1.6 unity_WorldToObject2 常用方法2.1 局部坐标变换到裁剪空间2.2 模型空间法线变换到世界空间2.3 TRANSFORM_TEXTODO 未完待续…1 常用变量1.1 顶点着色器输入结构体体位于UnityCG.cginc。struct appd原创 2020-12-14 23:16:20 · 1046 阅读 · 0 评论 -
Unity3D Shader系列之画虚线方式分析与总结
总结了一下几种画虚线的方式。①使用LineRenderer②代码生成网格画虚线③使用片元着色器画虚线④使用几何着色器画虚线⑤使用UILineRenderer⑥使用Vectrosity插件原创 2020-12-06 22:23:22 · 5595 阅读 · 2 评论 -
Unity3D Shader系列之UI流光效果
流光贴图+遮罩贴图与纯计算两种方式实现流光效果。原创 2020-11-28 22:55:05 · 8074 阅读 · 2 评论 -
Unity3D Shader系列之Compute Shader基础及图像灰度化
前两篇我们分别用OpenCV for Unity和片元着色器实现了图像灰度化的功能,今天我们来看看使用Compute Shader实现图像灰度化的功能。1.什么是Compute Shader2.Compute Shader的优缺点3.参考文章Unity Compute Shader入门初探Unity 3D : ComputeShader 全面詳解Compute Shader次世代优化方案Shader第二十八讲 Compute Shaderspuppet_master...原创 2020-11-22 00:41:39 · 4399 阅读 · 1 评论 -
Unity3D Shader系列之圆环
效果如下。很简单,核心代码就下面这两句。原理就是通过计算当前uv与图片中心的距离是否在内环(_InnerRadius)和外圆(_OuterRadius)之间,若是,则将透明度置为1,若不是,则将透明度置为0。fixed dis = distance(IN.texcoord, fixed2(0.5, 0.5));color.a = step(_InnerRadius, dis) * step(dis, _OuterRadius);代码中没有使用if…else…来判断,而是使用了两个step方法,这原创 2020-11-14 17:24:22 · 1774 阅读 · 0 评论 -
Unity3D Shader系列之UI Image灰度化
在《OpenCV for Unity学习笔记(1)——Mat及灰度化图像》我们看到,使用OpenCV进行图像灰度化很简单,直接调用Imgproc.cvtColor更改图像的颜色空间即可。Imgproc.cvtColor(mat, grayMat, Imgproc.COLOR_BGR2GRAY);但是这个方法背后的原理是什么呢?我们今天就来回答这个问题,并在Unity中用Shader来实现。1.灰度化是什么灰度化就是将一幅彩色图像转换为灰度图像的过程。彩色图像通常使用的是RGB(红绿蓝)颜色模型原创 2020-11-14 12:33:42 · 3095 阅读 · 0 评论 -
OpenCV for Unity学习笔记(1)——Mat及灰度化图像
1 Mat是什么Mat是OpenCV中最重要的类,以后我们与图像相关的操作基本都要用到Mat类。那么Mat是什么呢?它是OpenCV中保存图像数据的基本容器。Mat类可以表示n维的单通道或多通道数组,它可以存储实数/复数的向量和矩阵,单色或彩色图像等。2 创建Mat对象如下可以创建一个rows行,cols列的矩阵,类型为type。Mat mat = new Mat(行数rows, 列数cols, 类型type);类型对于类型type,其格式为CV_[bit](U|S|F)C[channel原创 2020-11-08 22:33:50 · 2599 阅读 · 0 评论 -
Unity3D C#数学系列之创建圆柱体
我们知道3D Max中可以很方便的创建出一个圆柱体,那么在Unity中能否用代码创建出一个圆柱体呢,当然可以的,在Unity里面想怎么玩都行的。我们今天来看看在Unity中用代码创建一个圆柱体。废话少说,先看效果。1 逻辑梳理用代码创建圆柱体逻辑其实很简单,关键点就两个:1.生成圆柱体的网格2.将网格用合适的Shader渲染出来1.1 生成圆柱体网格unity中要渲染一个物体,需要先添加两个组件,一是MeshFilter,二是MeshRenderer。MeshFilter 网格过滤器其唯原创 2020-11-07 22:15:40 · 3591 阅读 · 1 评论