自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MEIGAZAMU

主要是记一记没有烂笔头的

  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 Shader学习笔记:BRDF简单概述

这篇文章写于一年多以前的一次课程作业,这次作为一个“存货”给放出来,仅仅只是针对代码和一些要点进行简单叙述,如果想听完整的版本,请搜索毛星云大神的博客或者书籍。关于基本的物理渲染公式,网络上的博客和典籍已经多如牛毛了,这里只是自己在之前整理的结果上传。引言如何对使用计算机图形基础构建出的面进行着色是计算机图形学的基本课题之一,为此,裴祥风提出了Phong氏光照模型,即对于一个表面,其漫反射光照值等于被。这个模型可以很好的描述非金属绝缘体的着色效果,但是对于具有金属性的导体则不能表达。

2023-03-13 00:25:48 2799 1

原创 学习笔记:物理渲染-间接光照

这篇文章写于开题前,离上一篇文章已经过去了快一年了,我感觉这一年收获不大,这篇文章的大部分内容也早就写在了去年的十二月份,这里只是对这篇文章内容的延伸。在上一篇文章中,我们推导出了Cook—Torrence公式,并实现了基本的直接光照,但是对于实时渲染的场景而言,这远远不够,因为场景中的光源情况并不是单一存在的, 有很多地方反射光源过来,本文章对于PRT仅仅介绍与原理,然后蜻蜓点水的将公式列出。而关于实时渲染中的球谐函数近似,IBL的方法都会列出公式以及代码。

2022-09-30 19:41:29 1184

原创 Shader学习笔记:投影矩阵及其应用

好久好久没有更新博客了,去年考完研以后直接摆了好几个月,刚刚开始学习又遇到了一些很受挫的事情,之后写了一大堆草稿也该好好总结一下之前做过的东西了,重新写博客当然就从一些理论上的东西开始写才行,这篇博客主要讲述投影矩阵的推导以及投影矩阵的一些简单需求。首先我们假设一个矩阵ProjectionMatrix,它的值都是未知数: 而我们假设相机空间的某一个点的坐标可以表示为:从相机空间到投影空间的工序 对于相机空间的一个点而言,它要转移到投影空间去仅有...

2021-12-01 16:42:41 3451 2

原创 Shader 学习笔记:描边

好久没写博客了,最近在整毕业论文,码的字也比较多,但是博客想起来好久没碰过了。在整毕设的时候,尝试着解决了一些自己很久没有完成的心病,也做了一些效果来玩一玩,这次把这个东西记一下,以后有需求可以随时拿起来用。今天的博客记一下关于后处理的描边方法,说起描边还是比较简答的,在杂记那一篇中,记录了根据模型本身来构建描边的方法, 虽然特别特别水,而且对于模型法线来说要求贼高。在我的毕设中,使用了Mag...

2020-04-16 22:36:31 1121

原创 Unity 学习笔记:旋转

这篇文章归纳一下Unity中的坐标变换以及四元数的相关用法,这是Unity中的基础也是重点,最近查了网上很多的博客和看了一些书籍,觉得是时候有必要把看过的这些东西归纳起来了。引子:对于一个向量来说,我们可以使用一个复数来表达一个它,我们可以认为一个复数将一个向量分量与其他的向量分量驱隔开来,例如一个二维向量(x,y)=x+yi;三维向量(x,y,z)=x+yi+zj;对于复数的乘法,符...

2019-12-29 20:38:33 1633

原创 C# 学习笔记:反射

这篇文章重新写反射,在很久之前的那一篇博客中曾经非常粗劣的描述了一下反射的基础用法(感觉跟没讲一样),这一篇博客我们重新归纳一下反射,就像彩虹六号中重置赫里福基地一样。反射这个功能来自于代码中的加载需求,因为我们代码中一个程序往往会有很多配套的程序集,这些程序集往往不是自己熟悉甚至自己见过的,它们可能来自于公司的另一个部门或者其他公司,也有可能在我们程序本体发布以后才发布的这些程序集,所以我们...

2019-12-22 15:33:59 777

原创 Shader 学习笔记:杂记

这篇博客算是个杂记,写一写关于一些自己老是忘记但有很重要的关于Shader的知识。自己总是感觉基础不牢固,写过的很多东西不求甚解,并且有时候一些语法很难和一些知识点联系起来,一些知识表面上一马平川,实际上都是孤魂野鬼,这样囫囵吞枣迟早要遭重。所以这篇文章我记一下平常很基础重要但是看了之后缺乏归纳的知识点。杂记1:渲染流水线关于渲染流水线,我画了这张图我们在上篇描述深度的博客中就已经...

2019-12-15 21:36:26 465

原创 Shader 学习笔记:水面

第四篇,终于写到一些稍微那么一丢丢好看的效果了,虽然和网络上和生活中各种奆奆比差了十万八千里,但是我还是得写(因为文盲也想有春天),这一点文章我写一写水面的效果,水面应该是最基础的Shader应用了,应该算是前面几篇博客的综合应用吧,写一写这两天整的水面,记一下心得。水面的要素:我们生活中看见的水面,我们可以简单分为两个(两张图都是我百度的),基础的水面(左),复杂的水面(右) ...

2019-12-09 18:22:23 3941 5

原创 Shader 学习笔记:模糊

第三篇,话说第三篇隔了很久,因为之前被一些小问题折磨了半天,所以写的比较晚,但是不管咋地好歹解决了,所以接着写这一篇博客。嗯,感觉这篇文章做一些代码保存和小标记的意味更大一些,所以会着重写一下自己在代码中遇见的坑和感悟。调色后处理调色的代码中,比较基础的调色代码无非就是调整屏幕RenderTexture的三个属性:1.亮度:通过调整当前采样得到的颜色的值即可,我们可以对输出颜色左乘一个...

2019-12-05 17:03:03 859

原创 Shader 学习笔记:纹理

马不停蹄写第二篇,我觉得第二篇总体应该会比第一篇简单一丢丢,因为第一篇讲了太多的光照的规则了,这些规则上的小坑比较恼人,但是大坑比如光照纹理的采样计算衰减什么的Unity都通过宏定义自动完成了,但是纹理这一篇我感觉重点是几个大坑,比如说切线空间与矩阵空间的转换,还有镜面折射的一些规则和语法。基础纹理基础纹理算是比较简单,我们只需要注意以下几点:1.从顶点着色器VertexData中定义...

2019-11-25 17:11:49 862

原创 Shader 学习笔记:光照

Shader以及背后的图形学我一直很感兴趣(比C#要感兴趣),而且《Shader 入门精要》也是我最喜欢的书之一。这篇文章开始写一写Shader,当然并不是作为一个教学的博客,而是当做学习的沉淀(所以不会写Shader语法基础),先从最基础的开始,光照。我们在这篇文章中讲标准光照模型,一般来说标准光照模型中,射入摄像机的光线有以下四个部分:自发光Emissive:描述当给定一个方向时,一个...

2019-11-22 16:58:16 587

原创 C# 设计模式:行为型

这篇博客我们写行为型模式,应该算是最后一篇设计模式的博客了吧,相较于上一篇结构型有的模式写的比较水(组合模式、适配器模式),这篇博客大部分例子都是自己原创的(然后这篇博客的用时就超标了),算是自己的一个“救赎”吧,不过迭代器模式我没写,因为我觉得之前用了三篇博客来写迭代器以及迭代器实现的集合以及很足够了。嗯,总是是请各位看官多多批评指正。模板方法模式:定义一个操作中的算法骨架(抽象...

2019-11-09 21:32:48 548

原创 C# 学习笔记:集合

集合是一个很基础的东西,这篇博客会把集合及其背后的实现好好梳理一下:对于所有的集合来说,都需要实现IEnumerable和IEnumerator接口,这两个接口在我们之前的迭代器那一篇博客里已经讲过了,在我们自己实现的手动迭代器里,其内部正是通过数组来进行迭代的管理的,我们今天的博客也从数组讲起:数组数组是将多个数据项当做一个集合来处理的机制。在C#中,所有的数组都派生自Syst...

2019-11-05 21:35:40 421

原创 C# 学习笔记:多线程

多线程是学习编程语言绕不开的东西,我们常常可以看到,代码是一条龙走下来的,电脑从上到下依次执行,这种编译器读取代码的一种行为,我们可以认为电脑给我们开了个“流水线”来专门处理我们的代码。这个“流水线”的专业名称就叫线程。那么由此引申,电脑开了好几个“流水线”我们可以把它称为:多线程。进程与线程我们打开任务管理器就可以看到电脑当前正在运行的所有的进程。这些进程也就是我们平常使用的程序在运...

2019-10-30 21:18:13 314

原创 C# 设计模式:结构型

这一节写结构型模式,正如上篇所见,上文中的“创建型”设计模式都是针对不同情况下一个类对象如何创建(new)更为合适。那么,这一篇所写的“结构型”就是针对于代码的结构的设计模式。照例上图:那么今天写的模式有:装饰模式、外观模式、适配器模式、组合模式、桥接模式、享元模式、代理模式。装饰模式:动态地给一个对象添加额外的装饰《大话设计模式》中,装饰模式的原话是:动态的给一个对象添加额外...

2019-10-24 20:49:57 408

原创 C# 设计模式:创建型

开个坑,接下来写完设计模式,其实这个东西一直很重要,但是自己却不重视,直到在很多地方吃了亏才想起来,我之前看起来设计模式有点“无所谓”,好像代码知道具体的技术和知识点就可以包打天下了。一个语言推出的各种各样的语法,特性都是根据代码的需求来的,而设计模式则是需求的规范化和标准化,所以对于一门语言来说,设计模式就是基石,不用设计模式的角度来看我们的代码,那对它一切的理解就是空中楼阁。设计模式有六大...

2019-10-16 21:42:57 1174

原创 C# 学习笔记:序列化

序列化在C#中运用的非常多,由于我是学Unity的,Unity中的序列化特性也比较常用,所以这篇文章我们讲讲序列化的用法。在编码时,我们的代码中的对象们都是保存在内存中的。如果我们关闭一个软件,那么里面的内容就随着进程的消失而消失了。我们之前保存一个类,可以使用反射来调用DLL库来生成一个这个类的对象。但是如果说是代码中的对象的保存,就是需要用序列化相关的API来对代码中的对象进行保存...

2019-09-23 20:47:41 1324

原创 C# 学习笔记:垃圾回收

关于C#的垃圾回收,C#与其他更底层的C/C++相比,引入了GC,即垃圾收集器。我们要在堆中创建一个类型,常常要使用new关键字来创建一个在托管堆上的实例,那么我们一个实例既然生出来了,总得要把它们收拾起来,在C++中,需要程序员手动管理内存,通过指针去动态管理。而在dotNet下C#和JVM下java则引入了垃圾收集器,我们平常写的代码生成的实例都是由它来帮我们“擦屁股”的。dotNet...

2019-09-15 15:55:21 776

原创 数据结构:排序(2)附总结

这篇博客把剩下的三个排序写完,写快速排序、堆排序和归并排序,并且总结一下:我们先放入一个测试数组: int[] array = new int[11] { 3, 7, 4, 88, 13, 2, 23, 16, 1, 55, 6 };快速排序快速排序是对冒泡排序的一种改进,它与冒泡不同的是比较是从两侧向中间进行的。它在排序中不断根据两边的比较来改变数组的...

2019-09-12 14:23:44 244

原创 C# 学习笔记(阶段性总结篇):栈、堆

C#中堆栈和堆是一个很基础的概念,很遗憾我现在才来写这个话题。导语Windows使用的是虚拟寻址系统,把程序可用的内存地址映射到硬件内存中的实际地址,在32位处理器上,每个进程都可以使用4GB的内存(无论计算机内部有多少硬盘空间),4GB包含了程序的所有部分,包括了可执行的代码、加载的DLL动态链接库、以及代码中的所有的变量。这4GB的内存称为虚拟内存。在这4GB的每个存储单元都是从...

2019-09-05 15:28:18 390

原创 C# 学习笔记:散列与哈希

哈希表我们在C#中,除了数据结构的顺序表链表栈队列之外,还有一个比较重要的就是哈希表,也就是数据结构中的散列表。散列表:建立一个确定的对应关系H,使得每个关键码key都和它唯一的存贮位置H(key)相对应。存储记录时,通过散列函数计算记录的散列地址,并用该地址存储记录。 查找记录时,通过同样的散列函数计算记录的散列地址,并访问该记录。在C#的哈希表(HashTable)是根据关键码...

2019-09-02 21:13:27 2091

原创 C# 学习笔记:迭代器:协程

协程是Unity一个刚开始看起来很诡异但是实际用起来很方便的一种用法。在游戏运行的时候,总是需要读秒,我之前写过一个游戏,就是炮塔看见人物就等三秒然后开枪,最开始用Time类去读秒,效果勉强能用,但是炮塔多了之后整个脚本逻辑看起来痛苦不已。但是协程就非常好的实现了读秒、读帧、读逻辑的功能。我们在脚本里实现一遍协程是很简单的,但是协程背后是不容易整明白的。协程的语法对于曾经的我来说特别晦涩。...

2019-09-01 17:19:08 1025

原创 C# 学习笔记:迭代器

C#中,如果实现遍历一个数组,除了for循环,还可以是foreach循环。在foreach循环中,我们只需要创建一个同类型的值,来表示我们遍历后的值就可以了。但是实际上,只有实现了IEnumerable接口的类型,才能使用foreach遍历。那么什么是迭代器呢:我们先手动实现以下迭代,我们使用迭代器写个和foreach类似的功能来遍历一个字符串,输出它每个字符。在foreach前面调用它...

2019-08-31 20:16:39 3276

原创 数据结构:排序技术

排序技术真是太重要了,最近我也在看这个,所以今天发在博客来总结一下,自己对排序技术的看法和理解。我们先做个准备,写一个无序的数组:我们首先来看看基础的排序,最基础的就是冒泡排序了。冒泡排序:先帖代码: public int[] BubbleSort(int[] TargetArray,int n) { for (int...

2019-08-30 19:07:33 249

原创 C# 学习笔记:泛型(3):约束

我们如果在泛型方法中创建泛型的实例,我们会发现它自动带了四个方法:这四个方法都是Object里面自动有的方法。由于我们在使用时由于泛型的高度可指定,我们可以为它表明是任何形式,类名、int、string都行,但是我们的自己写的代码逻辑为了执行它的功能,做不到能对任何类型都有很好的兼容,所以我们在指定泛型的类型的时候必须对泛型进行约束。泛型约束泛型的约束语法,在声明泛型的行有:whe...

2019-08-28 16:49:20 999

原创 C# 学习笔记:委托(7):匿名

这是真 最后一章了,写一下委托的匿名函数和Lambda表达式。由于我们在委托中,每一次创建实例都会声明一个方法与之匹配,但如果方法里的逻辑不太复杂,这种每次都要new的操作会让代码变得臃肿,所以C#引入了匿名方法这种机制即为本地函数。匿名方法是用于“简化代码使用”。顾名思义,它是没有函数名的函数。它使用Delegate关键字创建,顾名思义它是给委托使用的,我们来看一个小例子: ...

2019-08-27 21:07:42 247

原创 C# 学习笔记:委托(6):异步

这次是委托的完结篇。委托的隐式异步调用异步先说说委托的委托的隐式异步调用,也顺便为后面的协程线程迭代器啥的开个头。首先我们先讲一下啥叫异步呢,中文的异步和英文的异步有所不同。中文的同步表示的是“两边同时发生”。相反,英文的异步表示的是:“二者同时独立进行,分支线程不互相等待并发生资源的争抢”这和我们理解的中文“同步”概念是类似的。即中文中的异步等于英文中的同步。中文中的...

2019-08-27 16:21:22 217

原创 C# 学习笔记:委托(5):可变性

这篇文章我们来用一下泛型委托,委托的泛型如果我们用最原始的角度去看,那就是在委托声明后加上一个<T>。但是,关于委托的内容还不止这些,首先先看看C#给开发者自带的两种泛型委托:Action委托:Action委托主要用于无参或者无返回值的委托的委托,那么使用起来非常简单:若有参数,则表示起来就是: class Program { s...

2019-08-24 19:40:07 225

原创 C# 学习笔记:泛型

泛型对于我来说一直是个心头大患,俗话说得好:人类最古老、最强烈的恐惧是对未知的恐惧。这种恐惧是全方位的,那么我们就从最开始来打破它。泛型之所以让人害怕,主要是它太过于多变,他很像假面骑士Decade,Decade在各大剧场版和ZIO里面都很强,是因为它能变成其他的假面骑士(平成昭和都能变),你刚知道他的招数,他就变成另一个假面骑士使用其他的能力了。就跟我们的泛型一样,能和其他的类型...

2019-08-24 14:38:52 199 2

原创 C# 学习笔记:委托(4):事件(2)

接上一篇,我们了解了事件的一些基础用法和组成结构,这篇写一个完整的事件的例子目前是这样,我是个玩家,然后我想要进入游戏大厅,进入大厅后出发开始游戏的事件,事件分发消息给订阅了事件的游戏启动器。1.事件参数准备:首先我们声明一个玩家类,里面包装了一个字段表明我们玩家的玩家账号名字。 public class Gamer { public string ...

2019-08-23 15:14:34 232

原创 C# 学习笔记:委托(3):事件(1)

整事件之间,我们需要知道自己为啥需要事件。在Unity里面,有Update函数每帧都调用,我们如果按下了一个键位,只需要这样写:if(Input.GetKeyDown(KeyCode.E))很清楚,由于有Update函数,Unity每帧都会检测我们是否摁下了这个E键,这样我们就非常方便的实现了如何检测一个按键的触发,然后在if里执行相应的逻辑就好了。但是,如果说我们在UI里面这么...

2019-08-23 11:32:11 150

原创 C# 学习笔记:委托(2)

上篇文章我们讲了委托的父类和多播委托,这篇博客来讲讲委托的回调(Callback)。其实我一直不明白CallBack啥意思,就回调方法。回调方法的具体解释是把方法当做一个参数传入其它方法中,C#代码中,我们可以使用委托实例来包装方法。比如说,我写了个Game类,朋友写了个Load类,他需要我的值来判定登录的是哪个游戏,我这边需要把一个函数的返回值传给他里面,他就需要写一个回调函数来...

2019-08-22 20:29:59 138

原创 Mesh网格:如何画个平面

上次球都画了,这次画个平面,平面来说要比球简单一些:uv也给出了,因为都是2D的,所以UV也比较简单using System.Collections;using System.Collections.Generic;using UnityEngine;[ExecuteInEditMode][RequireComponent(typeof(MeshFilter),typeof(M...

2019-08-22 13:22:06 1169

原创 C# 学习笔记:委托(1)

委托是函数指针功能在C#中的实现。委托包装了方法,我们在C#中使用委托来间接调用方法。委托是调用该方法时要操作的对象的包装器。委托是一种类,继承自MulticastDelegate类。它最重要的三个字段分别是:字段 类型 作用 _Target System.Object 改字段为表明委托所在的类或实例对象。 若委托包装静态方法时:此处为n...

2019-08-22 11:56:03 153

原创 Mesh网格:教你如何画个球(没UV)

第二篇博文,不整那些大路货,来整个球对于网格来说,需要的计算每个顶点的位置,面片的链接方式,然后UV的分布,最后是法线。最难的是UV,本篇的球体也没有写出UV的写法(效果有点差)。这是我想了两三天的写法,其实实现得并不好,但是好在比较动态,Shader中计算光照的时候能用得上这个代码,就能看到逐顶点和片元的时候比较好的效果。原理很简单,我们假设一个球体的横向割面和纵向割面一致,那么...

2019-08-20 21:14:01 1624 5

原创 C# 学习笔记:反射

最近开始写博客了,这是第一篇。主要讲述最近看的一些资料的关于反射的应用。反射指程序可以访问、检测、修改它本身状态行为的一种能力。通过反射可以获得在运行时的.net中每个类型的成员,包括委托、结构、类、枚举。获得了这些信息,便可以创建相应的对象。反射中最重要的是三个类,当然还有其他的,但一般最主要就这三个Assembly:加载和操作程序集。 Type:得到一个类的类型信息然后还可以...

2019-08-20 20:55:44 228 1

防摸鱼机.zip(个人项目保存)

自己暂时保存的,防止摸鱼的软件(目前退出软件时会有bug)

2021-03-23

空空如也

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

TA关注的人

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