- 博客(41)
- 资源 (5)
- 问答 (4)
- 收藏
- 关注
原创 【Unity】四元数原理学习笔记(二)
文章目录四元数的旋转Unity中的四元数和旋转欧拉角和四元数关于四元数的数学概念:四元数原理学习笔记四元数的旋转四元数并不只能用来表示旋转,任何旋转量都是为了计算空间坐标服务的,无论是四元数,还是矩阵,欧拉角,你都可以找用他们来表示坐标的形式。四元数表示坐标的形式很自然,就是虚数部分对应三维坐标的三个维度,实部为零。即,表示坐标的四元数必须是一个纯四元数。p=xi+yj+zk\textbf{p} = x\textbf{i} + y\textbf{j} +z\textbf{k}p=xi+yj+z
2021-01-12 16:11:11
588
1
原创 【Unity】浅谈UGUI的锚点和自适应
文章目录UGUI 锚点的使用Pivot点锚点的初级使用锚点的理解anchorMin,anchorMaxsizeDeltaanchoredPosition推导与证明总结讨论最近在做一个UGUI的Demo,我们知道要做自适应,绕不开RectTransform组件中锚点的设置。我先总结一下我的UGUI锚点的使用,最后重点说明一下自己对于锚点的理解。UGUI 锚点的使用我们要先清楚Pivot的概念。Pivot点它用来表示一个RectTransform的中心点。当你试图改变一个物体的宽高的时候,比如直接代码
2020-12-20 15:42:05
3674
2
原创 【实时渲染】菲涅尔反射率
经典的折射和反射定律光通过两个不同介质的界面的时候,会发生反射和折射现象。反射是指光从另一个路径离开界面,折射是指光通过界面进入了另一种介质中。其中满足条件:反射角等于入射角折射角与入射角满足斯涅尔定律sinθ1sinθ2=n2n1\frac{sin\theta_1}{sin\theta_2} = \frac{n2}{n1}sinθ2sinθ1=n1n2其中 n1, n2 是两个介质的折射率菲涅尔公式入射光的电场振动方向可以取与光的传播方向垂直的任意方向。我们可以将电矢量分解为
2020-11-02 23:41:16
9758
2
原创 【实时渲染】BRDF - 双向反射分布函数
在着色模型中,我们通常以下两个表示从位置 x 出射或者入射的光的光亮度。Lo(x,d)或者Li(x,d)L_o(\textbf{x}, \textbf{d}) 或者 L_i(\textbf{x}, \textbf{d})Lo(x,d)或者Li(x,d)x:光的出射或者入射点d:光的方向渲染的最终目的就是计算到达相机上的每一个点的光亮度,即来自方向 v 的射进处于位置 c 的相机的光亮度。Li(c,−v)L_i(\textbf{c}, -\textbf{v})Li(c,−v)这个
2020-11-02 12:30:08
1289
1
原创 【3D建模】Magica Voxel + Blender
文章目录2019年7月份出于某种原因需要做一个小游戏,但是需要的资源网上都找不到,只好自己做。所幸在大学接触过Magica Voxel这款体素建模软件。但是做出来的东西并不能当模型用,还需要做部件拆分,调整,制作动画,为此又在B站自学了一点Blender。前前后后花了两周总算将自己想要的模型做了出来。在硬盘积灰了一年多,差点把它删了,吓得我赶紧拿出来分享,以道友指点,或贻大方之家笑话。百度网盘下载链接:https【冒号】斜斜pan点baidu点com斜s斜1lAf9buVWshqLZBSdGXY97w
2020-10-13 20:41:49
1050
原创 Unity热更新技术学习——编译lua源码并为lua编写C模块
文章目录构建lua源码C编写lua模块的两种形式官方lua是一门纯C实现的嵌入式语言。说是嵌入式语言,是指它可以作为辅助语言被主语言使用,比如Unity游戏中,lua就是作为一门嵌入C#的辅助语言为Unity游戏提供热更新,而帮助lua嵌入C#的框架可以是tolua,xlua或者ulua等。然而“嵌入式”只是因为它可以上述这么用,lua也可以作为主体语言使用,与python类似但轻量级的解释性语言。例如:有时候出于很多种原因,需要使用C语言去编写一个lua可以用的模块。在此之前,需要知道如何构建lua
2020-10-07 16:20:24
1048
原创 Phong光照模型和Unity实现
文章目录概述数学模型环境光部分漫反射系数镜面反射部分Unity Shader实现概述Phong光照模型由Lambert光照模型发展而来。Lambert描述了物体表面对漫反射的反应。Phong光照模型在此基础上增加了环境光和镜面反射两项内容。Phong光照模型和Lambert光照模型一样,依然是个经验模型。这是说,Phong光照模型只是依据粗糙的实验数据得出的一个近似物理世界的物理模型,并没有严格地按照物理定律进行推论和分析。在绝大多数场合,Phong光照模型能够表现出和真实物理世界相近的光照效果。
2020-09-25 17:04:42
719
原创 【实时渲染】实时渲染中的光与颜色
文章目录光是一种电磁波描述光的物理量光谱功率分布光度测量三色视觉理论色光混合与颜色空间用RGB色渲染Gamma空间和线性空间HDR前段时间开始阅读《Real Time Rendering 4th》(英文本,以下作《实时渲染》)的第八章,但是发现这一章无论怎么啃就是啃不明白,无论读到哪总觉得少了点怎么没有讲。后来跟公司一位做图形的同事讨论后被一句话提点:《实时渲染》只是一本Reference。所以后来我查阅了大量的资料,总算是在这一章摸到了一丢丢皮毛。以下是总结的一些知识点,但远不仅如此,因为有太多东西书
2020-09-09 11:50:43
2840
原创 Unity 改变CPU亲和度(Android)
文章目录定义读写CPU亲和度定义CPU亲和度(CPU Affinity)一种表征软件在特定处理器运作倾向的方法。比如目前的骁龙处理器一般是八个核心,由四个大核和四个小核,或者2个大核六个小核组成。在Android平台上,通过以下命令查看对应的CPU最大频率。频率高的就是大核,反之就是小核。adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq通常,一个应用程序默认设置为软CPU亲和度,这表示没有限制必须在哪个核心上跑这
2020-07-12 11:58:41
1683
4
原创 Unity 与 NDK开发
文章目录Unity 与 C++NDK开发动态链接库NDKUnity 与 C++C#是Unity的官方推荐的开发语言。如果某些逻辑需要C++支持以提供高性能特性,或者需要C++去跟底层硬件或者操作系统级别的接口交互,那么就需要用C#去调用C++的接口。这往往依赖动态链接。即用C++开发动态链接库,然后C#调用动态链接库里暴露的接口。而在Android上开发动态链接库(.so文件)的方法,就是NDK开发。NDK开发动态链接库NDKNDK 全称原生开发工具包(Native Development K
2020-06-15 23:59:39
2246
原创 Unity热更新技术学习——AssetsBundle详解
文章目录热更新AssetsBundleResourcesAssetsBundle存储目录目录实例热更新热更新是指,你需要为应用程序修改某种资源,或者增加某种资源的时候,不需要新发布一个新的应用程序到应用商店让用户下载并重新安装,只需要联网,然后下载更新的内容即可。比如游戏出了一款新皮肤,推出一个新活动,或者修复某个紧急的小bug,如果这些小事情每次都要用户重新下载应用程序,就特别烦,尤其是如今中国国民级的手游动辄3到5个G。为此,考虑需要频繁更新的内容就可以分成两个部分:普通的资源文件,如材质,模
2020-06-06 19:59:13
4571
3
原创 Unity热更新技术学习——LuaInterface
文章目录概述使用LuaInterfaceLuaInterface教程类型转化从CLR访问Lua从Lua访问CLR概述LuaInterface是一个CLR库,以 .dll 的形式呈现。要想在Unity中使用Lua,必须解决C#和Lua的交互问题,或者说CLR(即windows平台为人熟知的.Net或者linux上的Mono)和Lua的交互。LuaInterface为了解决这个问题,最重要的就是做了两件事情:LuaInterface 允许Lua脚本实例化CLR对象并使用它,甚至创建新的CLR对象允许
2020-06-06 01:07:51
1271
1
原创 Unity热更新技术学习——Lua,Luajit
文章目录Lua预编译资源使用 Lualuajit其他语言LuaLua是一门轻量级的脚本语言,使用C语言编写,编译器和解释器也是C语言编写。下载资源:源码 http://www.lua.org/ftp/预编译好的Lua库和编译器 http://luabinaries.sourceforge.net/预编译资源下载第二个预编译好的lua资源(windows平台),包含如下文件:文件描述lua.exelua脚本的编译器lua53.dlllua5.3的库lu
2020-06-05 12:06:38
1541
原创 一个更易懂GAutomatorAndroid脚本和开源的GAutomatorView
文章目录概述概述我的工作受惠于腾讯的GAutomator自动化框架,这套框架给自动化带来了很多便利。这套工具功能没有Airtest的多,但是代码结构相对简单,容易定制化开发,而且对于需要快速连点的战斗场景自动化很友好(关于这一点已经在之前的博客里面讲过了,提到了为什么在想尝试转型Airtest最后又弃坑的原因)。Anyway,这里有两个开源代码:qintianchen的GAutomator...
2020-05-05 21:23:33
1678
1
翻译 Unity 性能问题的优化
文章目录1. 优化Unity中的脚本简介用我们的代码诊断问题关于Unity如何构建和运行游戏的简要介绍建立过程我们编写的代码和已编译的代码之间的关系Unity Engine代码与脚本代码之间的运行时通信代码性能不佳的原因改善代码的性能编写高效的代码尽可能将代码移出循环考虑代码是否必须每帧运行仅在情况发生变化时运行代码每[x]帧运行一次代码使用缓存使用正确的数据结构尽量减少垃圾收集的影响使用对象池避...
2020-01-13 22:00:12
2311
原创 Android NDK开发
文章目录Android NDK 开发环境依赖NDK 开发Android NDK 开发NDK 开发其实就是在Android开发中使用C++这种底层开发语言。环境依赖Android Studio在Android Studio里使用SDK Manager安装sdk和ndk(建议r16版本)NDK 开发在Android Studio中新建工程,选择Native C++工程选择这个模板...
2019-12-30 22:37:33
1074
1
原创 各种语言的文件操作
文章目录C#判断目录是否存在目录增删其他目录操作为什么要写这篇文章呢?因为愚钝的我,老是记不住各种语言的文件操作,每当切换到一个新的语言,就要重新百度一次文件操作,而且还各种坑。C#判断目录是否存在// using System;dirpath = "D:/program/CSharp/pictures"if(System.IO.Directory.Exists(dirpath)==f...
2019-12-20 19:40:27
301
原创 Android 获取进程CPU和内存数据
文章目录CPU数据内存数据方法一方法二CPU数据读取/proc/[pid]/stat里的特定数值,然后进行计算就好了。关于/proc/[pid]/stat中具体每个数据的含义,请参考linux-man7 private double getCPUInfo() { double ret = 0.0; try { if (appStatFi...
2019-12-18 13:40:49
745
原创 Unity Android中开发Jar sdk并调用java代码
文章目录工作原理环境依赖最简单的Java调用书写java代码jar文件注入Unity工程使用apk工作原理Unity提供了C#代码调用Java的代码,原理其实就是JNI。开发的jar sdk需要放置在一个特殊的目录中,Unity会识别里面有关java或者android的东西,一并打包进apk里。环境依赖Unity:截止这篇文章写完,用的是Unity2017java:java 1.8,原...
2019-12-17 11:41:41
651
原创 Tensorflow的安装和开始
文章目录安装开始本博客最新更新日期:2019-11-22安装请到这里查看对应的wheel包的地址。拉到最底下:选择自己对应系统,对应python,对应CPU/GPU的版本。我的环境是Windows 10.从上面看到windows的只有python3.6的版本(我试过了,用python3.7会报错)。作为新手,下载CPU only版本会减少一开始犯错误的次数。然后记下刚才的地址,打开终...
2019-11-22 18:39:30
196
原创 python openCV学习——常用算法
文章目录形态学操作Sobel算子,Scharr算子和Laplacian算子Canny 边缘检测findContours图像轮廓原图下面的show_img方法是封装了cv2.imshow()和cv2.waitKey(),方便我自己使用,不用每次输入窗口名称,不用每次都waitKey。形态学操作腐蚀,膨胀,开,闭,就不掩饰了。源码def main(): """ 测试形态学...
2019-11-13 21:03:37
515
原创 一些思考
文章目录继承的缺点继承的缺点最近在看项目里一些前人写的代码,其中大量的继承关系让我非常地头疼。主要问题是,其中子类经常重写父类的方法,但是又不一定重写完全。这就导致在阅读代码的时候难度倍增。其中的一些原因包括,IDE无法每次都帮你精确定位到实际方法定义的位置。比如以下代码:# pythonclass Stage(): def Run(self): self.OnEnter() ...
2019-11-10 16:54:53
180
原创 python 学习
文章目录类成员变量和对象成员变量类成员变量和对象成员变量class A(): name = "caixukun" def __init__(self): self.name = "changtiaorap"if __name__ == "__main__": a = A() print(A.name) print(a.name)输出caixukunchangtia...
2019-11-10 15:31:49
282
原创 python openCV学习——色彩空间之RBG和HSV
文章目录RBGHSV色彩空间色彩空间表示用以存储图像颜色的方式。RBGRBG是真正具备物理意义的色彩空间。现实世界的光都可以用红R,蓝B,绿G三种基本色组合而成(这句话是照搬过来的,不知道这里的“世界的光”是具体指频率范围和强度范围多少的电磁波),即所谓的光学三原色。平常所说的灰度图,即各个RBG值都相同的图。换句话说,三种颜色的值越接近,该像素点的灰度越高,亦即饱和度越低。HSV色彩空...
2019-10-31 11:42:54
640
原创 python openCV学习——快速的图像匹配
文章目录我的学习背景图像相似度计算感知哈希算法局部匹配由于最近工作中需要用到图像快速图像匹配的事情,在此做一下学习记录。主要是两个,一个是图像相似度计算,一个是图像模板匹配。我的学习背景之前的博客介绍过关于GAutomator的应用。但是GA只是提供一些基于游戏控件的基础逻辑。比如给一个控件全路径查找坐标,控件长宽;根据坐标/控件模拟点击;查找控件上的图片和文字,等等。当作一个游戏自动化...
2019-10-30 20:55:51
4030
原创 python openCV学习——基本的图像处理
文章目录图片读取显示图片保存图片图片读取# cv2.imread(filename[, flags])img = cv2.imread('D:/screenshot.png', flags = cv2.IMREAD_UNCHANGED)cv2.IMREAD_UNCHANGED表示保留原图片格式。如果是彩色图片,那么img是一个三维数组。或者说,是一个二维数组,数组中每个元素是一个表示R...
2019-10-21 21:40:03
540
原创 记录在python踩过的坑
文章目录模块导入变量后为None测试脚本原因模块导入变量后为None测试脚本main.py:执行脚本model_1.py:导入模块——————————代码如下:# model_1.pya = 1b = Nonedef setb(_b): global b b = _b# main.pyfrom model_1 import setbfrom model_1 imp...
2019-10-20 10:53:07
264
原创 测试工具GAutomator的研究(三)——GAutomator原理
文章目录GAutomator源码结构GAutomator测试脚本命令的发送方式简单的测试用例安卓端的SDKGAutomator源码结构这里只讨论 Unity + UGUI + Android 的情况。实际上,测试脚本只区分是Android还是IOS平台。至于游戏开发平台和UI种类,一开始嵌入游戏的sdk会告诉我们。那么我们讨论的源码根目录就是GAutomator/GAutomatorAndr...
2019-10-12 11:34:32
3027
1
原创 测试工具GAutomator的研究(二)——GAutomator大致原理
文章目录GAutomator大致原理GAutomator大致原理GAutomator(以下简称GA)首先在PC上用adb connect命令和安卓端建立链接。这个链接是基于TCP的。通过在python测试脚本中可以控制在cmd终端发送adb的其他命令,比如tab点击命令,模拟屏幕点击,等等。为了能够发送自己定义的命令,比如获取游戏组件树结构,获取某个按钮,需要将这些数据通过adb forwar...
2019-10-11 15:23:48
28968
原创 测试工具GAutomator的研究(一)——如何使用GAutomator
文章目录GAutomator简介使用1.下载源码2.将sdk嵌入到Unity工程3.使用adb连接安装了游戏的安卓设备4.运行游戏5.打开测试脚本工程开始测试GAutomator简介GAutomator是腾讯wetest测试平台下的一个针对手游的开源的自动化测试框架。源码在GitHub上有:GAutomator。GAutomator将sdk嵌入到游戏中,然后通过adb连接客户端和服务器端(手游...
2019-10-11 11:30:15
8707
3
翻译 寻路网格Nav Mesh的生成原理
文章目录1 简介这篇文章将会翻译一篇来自布莱金理工学院的论文Towards Real-Time NavMesh Generation Using GPU Accelerated Scene Voxelization的前一小部分。传统的NavMesh生成是在CPU上做的体素化,这篇文章主要讨论的是如何将这部分搬到GPU上做,从而起到加速计算的效果。不过本文只翻译前半部分,前一小部分概述了整个Nav...
2019-09-19 18:07:11
4154
2
原创 Unity Shader学习笔记 (三)—— C for graphics 专题(一)
文章目录概述语言特性数据类型pragma关键字语义语义总结概述前面的一些博客里展示的一些Untiy Shader中,实际的顶点着色器和片元着色器代码被编写到了一个语法块CGPROGRAM和ENDCG中(例如这篇博客)。这个语法块告诉我们,在这里面编写的代码遵从CG的语法。CG = C for graphics。顾名思义,可以理解为针对图形编程的C语言。实际上,Cg是NVIDIA为GPU编程设...
2019-09-18 15:29:37
656
原创 四元数原理学习笔记
文章目录四元数的数学性质四元数的数学性质定义Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\foralln\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过 Euler integralΓ(z)=∫0∞tz−1e−tdt .\Gamma(z) = \int_0^\infty t^{z-1}e^...
2019-09-15 14:16:22
1676
原创 Unity shader学习笔记(二)—— 着色器
文章目录概述Unity的着色器类型顶点着色器片元着色器总结概述在学习笔记(一)中,说明了GPU渲染流水线中有三个可编程的部分,亦即四个着色器。分别是顶点着色器,曲面细分着色器,几何着色器,片元着色器。但是在Unity shader的教程中,我只看到了关于顶点着色器和片元着色器的编程,所以本文只记录关于顶点着色器和片元着色器的学习笔记。另外还有一个着色器需要提及,就是表面着色器(Surface ...
2019-09-13 13:53:55
509
原创 Unity shader学习笔记(一)—— 渲染流程
文章目录渲染流水线OpenGL 和 DirectX渲染流水线为了渲染一个模型,我们需要知道这个模型的每个顶点信息,有可能还需要知道由几个顶点构成的每个片元的颜色,这个颜色可能是直接指定的顶点颜色然后做的插值,也可能是用一张纹理“贴”上去,然后还要经过顶点变换,裁剪,等等操作,最后才渲染到屏幕上。为了加快这些步骤的执行,我们希望能够将这些步骤拆分成具体的几步,参考CPU指令流水线的思想,用流水线...
2019-09-12 21:28:10
1863
原创 Unity中的四元数和旋转
文章目录四元数四元数四元数用来表示一个物体的位置,或者旋转。这两种其实是等价的。我们可以说一个三维向量(x,y,z)(x,y,z)(x,y,z)可以表示一个物体的空间位置,也可以表示位移。因为任何一个三维向量可以表示原物体相对于位置(0,0,0)(0,0,0)(0,0,0)的位移。同样,一个四元数表示的物体位置也可以看作是一个物体相对于初始四元数(0,0,0,0)(0,0,0,0)(0,0,0...
2019-09-11 21:32:30
1498
原创 Unity 的资源管理
文章目录概述Unity的资源管理Resources目录AssetBundles资源管理的几个重要路径dataPath概述最近遇到的一系列问题跟AssetsBundle有很大关系,然后刨根问底,揪出了许多跟Unity资源管理有关的问题。本片技术日志将讲解我于今天关于以下几点内容的思考:Resources 目录什么是AssetBundlesUnity 资源管理的几个重要路径如何使用Ass...
2019-09-09 21:37:05
955
原创 NGUI之UIScrollView
NGUI之UIScrollViewUIScrollView 一般用于创建滚动页签,ScrollView要和UIPanel和UIDragScrollView组件配合。其中需要用到UIPanel的裁切功能的配合,而UIDragScrollView负责监听点击(Press)和拖曳事件,然后交由UIScrollView处理。在源代码中,UIScrollView会向上寻找第一个承载UIScrollView...
2019-09-03 16:04:01
608
中科大数字电路实验代码集合
2016-11-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人