- 博客(42)
- 资源 (2)
- 收藏
- 关注
原创 OpenGL学习(四)阴影映射
阴影是光线被阻挡的结果;当一个光源的光线由于其他物体的阻挡不能够达到一个物体的表面的时候,那么这个物体就在阴影中了。阴影能够使场景看起来真实得多,并且可以让观察者获得物体之间的空间位置关系。场景和物体的深度感因此能够得到极大提升,下图展示了有阴影和没有阴影的情况下的不同:一般游戏中我们经常用阴影贴图的做法。阴影映射(Shadow Mapping)背后的思路非常简单:我们以光的位置为视角进行渲染,我们能看到的东西都将被点亮,看不见的一定是在阴影之中了。假设有一个地板,在光源和它之间有一个大盒子。由于光源
2021-04-14 11:32:34 420
原创 OpenGL学习(三)帧缓冲
之前的学习中,或者说有shader基础的同学们都知道在渲染管线内有很多屏幕缓冲,比如颜色缓冲,上节提到的深度缓冲和模板缓冲,这些缓冲结合起来就是帧缓冲(FrameBuffer),它被储存在内存当中,而OpenGL允许我们定义自己的帧缓冲。创建帧缓冲,和创建其他对象缓冲一样,会使用glGenFramebuffers函数 unsigned int framebuffer; glGenFramebuffers(1,&framebuffer); glBindFramebuffer(GL
2021-04-08 17:05:52 485
原创 OpenGL学习(二)深度测试与模板测试
首先,再次上一下这个图深度测试在所有对应颜色值确定以后,最终的对象将会被传到最后一个阶段,我们叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的对应的深度(和模板(Stencil))值(后面会讲),用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。(混合我们之后再说)OpenGL存储它的所有深度信息于一个Z缓冲(Z-buffer)中,也被称为深度缓冲(Depth Buffer)。GLFW会自动为你生成这样一个缓冲(就像它也有一个颜色缓冲来存储输出图像的颜色)
2021-03-03 16:57:29 650 2
原创 OpenGL学习(一)VAO,VBO,EBO
下面,你会看到一个图形渲染管线的每个阶段的抽象展示。要注意蓝色部分代表的是我们可以注入自定义的着色器的部分。渲染管线的东西我就不详细说了,首先我们在openGL绘制图形前,必须先输入一些顶点数据(在OpenGL中我们必须输入NDC坐标,才能可见),然后我们会把它作为输入发送给图形渲染管线的第一个阶段:顶点着色器。它会在GPU创建内存用与储存这些数据,还要要配置OpenGL如何解释这些内存,并且指定其如何发送给显卡,然后顶点着色器就可以处理我们指定的数据了。那么我们如何管理这个内存呢,这里引出这
2021-03-02 12:26:34 489
原创 几何着色器描绘模型线框
基本原理就是判断当前像素位置处于三角面里的位置 这个距离小于某个系数就画颜色,然后可以和另一个颜色插值下面是核心代码// Geometry Shader [maxvertexcount(3)] void UCLAGL_geom(triangle UCLAGL_v2g p[3], inout TriangleStream<UCLAGL_g2f> triStream) { //视口坐标 float2 p0 = _ScreenParams.xy * p[
2020-10-22 15:53:31 428
原创 Unity Shader 描边加颜色插值实现流光扫描效果
有个项目需要一个人体扫描的效果,我的方法是内部做颜色渐变 外部做一个描边判断 大概效果就是上图这样不停在扫描下面是全部代码// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/XLight" { Properties {
2020-09-05 15:25:39 881 1
原创 通过深度纹理重建像素的世界坐标,生成全局雾效
posteffectBase的代码我没有上传 其实就是封装了几个方法 有兴趣自己实现吧重要地方都有注释有什么问题欢迎评论区提问using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Rendering;public class FogWithDepthTexture : PostEffectsBase{ public Shader fogShader;
2020-09-05 15:12:27 380
原创 通过深度纹理计算运动模糊
学shader也有一段时间了 好久没有发博了后面会把中间学习的一些成果 包括效果和源码整理一下发出来 不是很喜欢解释很多 我会写很多注释 有什么问题欢迎评论区讨论具体思路计算深度值 然后得出每个顶点的ndc坐标通过视角,投影的逆矩阵计算出每个顶点的世界坐标计算上一帧和当前帧的顶点位置通过视角投影矩阵得出ndc坐标下的位置差位置差相当于速度对它的相邻像素采样,去平均后得到一个模糊的效果C#代码直接挂摄像机上 所以只有摄像机运动时才会有用 如果是物体运动就会出错using System.Coll
2020-08-30 18:35:10 366
原创 外发光Shader里 渲染轮廓的Pass里要用视角方向的相反方向
最近看很多网上外发光shader都是用两个pass的方法做的 但是我发现渲染轮廓的pass用来点乘的视角向量其实是和真正的视角向量是相反的 下面是Unity定义的UnityWorldSpaceViewDir函数中的实现但是外放光中的ViewDir是这样定义的当然上面可以直接用-normalize(UnityWorldSpaceViewDir(i.worldPos))前面加负号就行 表示反方向 但是为什么呢 原因很简单 是因为外发光pass里写的Cull Front 这里表示剔除外表面 所以看到外发光
2020-07-23 12:02:15 326
原创 Phong光照模型下的逐顶点和逐像素与Blinn-Phong光照模型的对比
Phong光照模型下的逐顶点逐像素对比Phong和Blinn-Phong光照模型高光对比可以看出逐像素明显要比逐顶点顺滑很多(顶点之间的高光计算是通过线性插值计算的,而实际上高光反射部分的计算是非线性的)Blinn模型比Phong的高光区域要更大亮一点 在实际中一般都用Blinn-Phong光照Blinn光照模型计算高光反射公式//求向量h (视角方向和光照方向相加归一化)fixed3 HalfDir = normalize(viewDir+worldLight);//_LightColor
2020-07-12 23:01:03 395
原创 基础shader 画圆
首先画圆需要中心点,半径,我们要做的就是判断像素点和中心点距离是否等于半径 直接上代码frag函数的核心代码//i.vertex是裁剪空间下的顶点坐标.xy就就是屏幕坐标//_MousePos中xy是原点,z是半径if (length(i.vertex.xy- _MousePos.xy) < _MousePos.z) { return col* _PointColor; } else {
2020-07-03 17:50:47 1442
原创 shader入门知识
Shader的语言分类:1.GLSL OpenGL语言2.HLSL DirectX语言3.CG 夸平台语言4.ShaderLab Unity中对上述语言的通用封装关于Shader中的属性代码:Shader"Mocha/01 myshader"{//这里制定Shader的名字,不要求与文件名保持一致 Properties{ //属性 _Color("Color",Color)=(1,1,1,1) //颜色float4 _Vector("Vector
2020-07-01 15:23:47 290
原创 UnityShader去除像素点的两个方法(溶解)
discard和clip函数float4 frag(v2f i) : COLOR { //_Time.y%_DissolveSpeed始终小于_DissolveSpeed 保证可以循环溶解(值始终在0到1) float DissolveFactor = saturate(_Time.y%_DissolveSpeed/_DissolveSpeed); float noiseValue =
2020-06-30 16:07:56 1167
原创 nginx反向代理遇到的坑(深夜发博)
最近做一个项目需要用到政府内网的数据 但是由于我实在太懒 不想出差 于是就想到用nginx做一个反向代理 把服务器IP映射出来 总共有两个IP 准备用二级目录映射第二个IP时 发现了问题 总是提示什么东西丢失 后来发现问题 是因为我的这个接口是post请求 需要用到header传参 我的参数里有‘_’下划线符号 而nginx默认是会忽略掉有这个符号的参数 所以很简单只要加上下面这句命令 接触限制就好了(记得和server标签同级)...
2020-06-13 00:31:00 473
原创 unity2019.3.8关于视频导入的坑
之前做项目 导入视频后用videoplayer播放发现视频总是会重复播放最后的几帧 经过研究发现不是videoplayer的锅 视频刚导入就会发现这个问题最后我猜测是因为unity版本的问题 导入视频的时候会导致中间坏帧 然后unity在视频最后用重复播放的方式把帧补回 解决方式就是换成了别的版本的unity 最后一切正常...
2020-06-10 00:24:25 968
原创 循环给按钮添加点击事件(delegate)
给一个按钮列表添加点击事件 需要带参数 发现一个问题for (int i = 0; i < leftBtns.Length; i++) { //正确用法 string item = leftBtns[i].name; leftBtns[i].onClick.AddListener(delegate { ShowDescSprites(item, "left"); }); //错误用法
2020-06-04 11:14:45 1073
原创 Unity和安卓消息互调
最近有一个app项目 用到一个sdk 只有安卓的没有unity的所以就用unity导出一个安卓工程 然后放到androidstudio来继续开发Android 调 Unity这个很简单 参数分别是unity的 对象名,方法名,传参(参数数据类型和数量必须一样)UnityPlayer.UnitySendMessage("对象名","方法名",Params);Unity 调 Android...
2020-04-17 19:47:05 200
原创 Unity Shader之简单的溶解效果(clip函数的使用)
最近在学Unityshader 发现这个clip函数真是好用clip函数会将参数小于0的像素点直接丢弃掉 比如说我们要做溶解效果 除了mainTexture可以在里面放入一张用于溶解的图 判断这张图的alpha小于某个数的像素点 可以设置一个从0到1的变量用来控制 下面是关键代码主要是fragment函数里 col是主贴图 secondTex是用于溶解判断的图片_CutOutTex是一个0到...
2020-03-29 19:22:03 15599 1
原创 和为S的正整数序列(伪完成)
刷力扣题刷到的如果数字过大会出问题 谁帮我优化一下啊 救救孩子吧public class Solution { public int[][] FindContinuousSequence(int target) { List<int> sum = new List<int>(); List<List<int&g...
2020-03-06 19:07:12 170
原创 Python递归函数解决汉诺塔问题
最近初学python 写一个递归函数(汉诺塔问题)下面是代码和运行成果def move(n, a, b, c): if n == 1: print(a, '-->', c) else: move(n-1,a,c,b)#先将最大盘之上的所有盘子从a柱移到b柱 print(a,'-->',c)#然后a柱只剩一个盘...
2020-02-28 05:35:10 1629
原创 Azure Kinect DK+unity 踩坑(一)
做azure kinect的项目 因为是最新的设备 网上有关这个的资料很少 最恶心的是官方没有unity的sdk 官方出的是c/c++ 幸运的是在网上找到两个封装好的UnitySdk包Azure Kinect Examples for Unity.unitypackage这个可以直接unity商城里搜到 付费下载 里边有三十多种示例场景 但是不知道为什么 我只要打开捕捉人体的场景就会直接崩溃 ...
2020-02-28 00:21:45 7981 65
转载 新版SteamVR Unity Plugin的InteractionSystem
最近写VR项目的时候用到了SteamVR Unity Plugin - v2.0.1插件,感觉比之前用到的SteamVR plugin for Unity - v1.2.2版本改进了很多,就算不用VRTK插件,也能实现很多交互操作了。在此记录一下新版本插件的中的主要内容。(主要是根据InteractionSystem文档和自己的理解)这个InteractionSystem包括一系列脚本,预制件和...
2020-01-06 14:17:33 985
原创 unity 连接数据库 打包问题
总共出现了两个问题问题1 打包出错把api level改成 .net 2.0问题2 打包后连接不上数据库在你的unity编辑器的这个文件里Unity Editor\2017.4.27f1\Editor\Data\Mono\lib\mono\2.0(我用的2017.4 你们看各自的版本)找到下图的三个dll库 放在项目的Plugins文件夹里...
2019-12-02 16:18:22 1508 5
转载 unity3d:激活码系统(根据PC机器码,给对应激活码完成软件注册)
1.机器码为明文,采用DES加密2.判断输入激活码与机器码的密文一致,激活成功using UnityEngine;using UnityEngine.UI;using UnityEngine.SceneManagement;using System.IO;namespace KeyScene{ public class KeyMgr : MonoBehaviour ...
2019-11-13 15:34:22 2615 2
原创 VuforiaAR 物体的坐标随摄像机晃动而变化
最近做了一个ar小游戏 塔防类的 刚开始就出现了问题 生成敌人的时候 明明再编辑器里 敌人是顺着导航网格前进的 但是在手机上随着手机的晃动 小兵的位移出现了偏差 而且我的imageTarget没有放在ARCamera里 最后找到了解决方法 更改一下AR相机的WorldCenter就好了 之前默认是Device改成imageTarget就好...
2019-11-13 13:48:20 1193
转载 导航报错SetDestination() can only be called on an active agent that has been placed on a NavMesh
原因:初始化导航组件NavMeshAgent 的时候,agent 离navmesh太远。isOnNavMesh属性为false;解决办法:在初始化预制体的时候,传入诞生点位置和旋转信息。GameObject.Instantiate(m_shooter, m_currBirthPoint.transform.position,m_currBirthPoint.transform.rotatio...
2019-11-11 16:08:01 831
原创 Unity 人物行走的另一种写法
最近跟着UnityLearn做一个小游戏,发现官方另一种人物走法比我以往写的要更加顺滑using System.Collections;using System.Collections.Generic;using UnityEngine;public class Player : MonoBehaviour{ Vector3 p_Movement; Quaternio...
2019-10-22 14:48:25 588
原创 事件管理(基于接口的事件管理)
注释写的比较全,就不多做解释了定义LIstener接口,写一个事件public enum Event_Type { Game_End,//游戏结束 Player_Dead,//血量清零 HP_Change//血量值变化}/// <summary>/// 监听器接口对象/// </summary>public interface ILis...
2019-10-22 13:24:21 203
原创 Unity操控Arduino板接舵机旋转
跟上篇文章差不多 也是串口通讯 只是这次在arduino端加了一个舵机,pc端向arduino传输一个角度pc端代码(打开端口以及new一个接收数据的线程)ps:接收数据可以不要 因为我们这里不用接收返回数据//设置串口,波特率 sp = new SerialPort("COM4", 9600); sp.Encoding = Encoding.ASCII; ...
2019-10-22 09:31:14 1298 1
原创 Unity和Arduino串口通讯
C#部分的发送与接收方法这里是发送数据的代码,有一个中文编码的问题还没解决,不管用什么编码都不都进行中文传输public void SendSerialPortData() //发送数据 { if (sp.IsOpen) { print("Send"); Encoding ascii = new A...
2019-10-18 16:32:54 1695
原创 unity中的Destroy和DestroyImmediate
今天要写一个问题考核的小东西,本来很快就写完了,但是有一点卡壳了,在刷新答案的时候要把当前答案框里的答案全部销毁,然后创建新的答案(答案都是按钮,且数量不定),我通过debug发现每次销毁后,框内虽然没有上道题的答案了,但是输出答案的父节点的childcount都显示大于0,后来查阅了资料才发现,Destroy这个方法,不会立即删除对象,而是会在下一帧才上出,在同一帧的时候他会先把对象存储在内存...
2019-09-12 12:50:30 1968 1
原创 初学Linux心得(四)
链接命令(文件)ln 【选项参数】 【源文件】 【目标文件(链接)】链接命令顾名思义,就是为一个文件生成一个链接,而链接又分为软连接和硬链接,加上“-s”选项就是软连接,不加就是硬链接软连接软链接就相当于windows系统的快捷方式,只是引入一个指向源文件的链接,因此大小通常只有几个字节,如果你把源文件删了,那软连接也就没什么用了下图我先对qzh文件生成了一个qzh.soft的软连接,然...
2019-09-10 11:07:32 154
原创 初学Linux心得(三)
命令一般的命令格式为命令 【-选项】【参数】选项可以省略,他是用来“强化”一些命令的(我的理解)参数就是来指定操作对象的举个栗子:命令:ls这个是用来查看目标目录下的文件的但是Linux中有一点跟windows一样,都是有隐藏文件的,这时候ls命令就查看不到隐藏文件,怎么办呢?用选项!!!比如“-a”,“-a”选项就是all的意思,用来查看全部文件,不管你隐藏与否,都会被查找,显...
2019-08-28 18:49:54 190
原创 初学Linux心得(二)
目录介绍/bin/存放系统命令的目录(普通账号和管理员都可以访问)/boot/系统启动目录/dev/设备文件保存位置/etc/配置文件(强烈建议备份)/home/普通用户,默认登陆位置,比如一个普通账号为abc,那他的起始位置就是/home/qzh/而管理员的起始位置为/root//lost+found/每个分区目录中都会出现(用来备份和恢复目录)/usr/系统的软件...
2019-08-28 18:36:57 263
原创 初学Linux心得(一)
Linux的安装就不讲了,网上示例很多,这里推荐在虚拟机里安装,这里说一下linux能够运行的4要素1,分区首先是“/”,“/”是根分区“swap”分区,swap分区属于交换分区,属于虚拟内存,建议最大不要超过2g“/boot”分区,启动分区,这里最好不要存放任何东西,否则会影响你linux启动“/home”分区,用户文件存放,一般是普通用户登陆后所在初始位置2,格式化很多同学都把格...
2019-08-28 18:04:14 184
原创 unity UGUI toggle监听
一直以为下面代码是监听toggle点击的。。。其实不是,他是用来监听 ison 的改变的,真的好坑。。Toggle.onValueChanged.AddListener((bool value) => resultToggleChange(Toggle, value));void resultToggleChange(Toggle toggle, bool value){}...
2019-08-23 10:36:02 1221
原创 做webgl遇到的两个坑
Webgl遇到的两个大坑XML文件远程读取我的xml文件存放在远程服务器端,我想直接远程下载访问,但这遇到了问题首先,xml读取有两种方法 XmlDocument xml = new XmlDocument(); xml.LoadXml(string);XmlDocument xml = new XmlDocument();xml.Load(path);loadxml是读取一个...
2019-08-21 18:31:09 2326
原创 www下载ab包
www下载远程ab包最近一直在忙WebGL的项目,简直蛋疼,尤其是内存方面,什么都得节省,不敢让模型做太高精度的贴图,ui也是,但是这个项目模型量有点多,导致加载时间简直长到不能忍受,于是还是把资源打成ab包,上传服务器,在网站打开后再进行下载使用打ab包unity打ab包很简单 把想要打包的资源,在assetlabel框里定好assetbundle名字就行,然后把以下代码放进Editor文...
2019-08-21 15:57:03 1902
原创 unity webgl 部署在GitHub上访问
生成webgl包就不说了,直接正题在GitHub上新建一个仓库,标题随意然后建一个本地仓库,把GitHub上新建仓库clone下来,clone成功的话就会出现一个readme文件把webgl项目放在本地的文件夹里 ,然后commit最重要的步骤来了 提交以后进入GitHub仓库的设置页面,把github pages的source原本的none 改成master branch然后...
2019-08-05 16:35:21 1186 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人