自定义博客皮肤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)
  • 资源 (16)
  • 收藏
  • 关注

原创 UE源码剖析 - Pixel Inspector

UE4的Pixel Inspector工具源码剖析

2022-06-22 21:05:14 1214

原创 UE源码剖析 - Scene View Extension

UE的SceneViewExtension介绍与实现分析

2022-03-28 21:30:06 2885

原创 SIGGRAPH 2020 Course: Samurai Shading in Ghost of Tsushima 知识点总结

SIGGRAPH 2020 Course: Samurai Shading in Ghost of Tsushima 知识点总结SIGGRAPH 2020 Course: Samurai Shading in Ghost of Tsushima主要分享了《对马岛之魂》这款游戏中的一些图形学技术,包括渲染强各向异性的材质渲染强asperity scattering的材质提升皮肤渲染的准确性改进的detailed map《对马岛之魂》的背景放在13世纪封建社会的日本,玩家操作一名日本武士,为了解

2021-07-21 20:39:42 1267 1

原创 关于浮点数的学习笔记

浮点数是计算机常用的一种表示实数的方法。虽然平时感觉不到,但是浮点数的运算、设计会和整数有很大的不一样,了解浮点数的底层原理,有助于调试程序中遇到的一些奇奇怪怪的问题。本文将从两个方面展开,先介绍浮点数的通用表示形式,讨论浮点数误差等话题,然后介绍IEEE标准对浮点数做了哪些规范。浮点数的格式取一个基底β\betaβ,一个精度ppp,浮点数根据±d.dd...d×βe\pm d.dd...d\times \beta^e±d.dd...d×βe用d.dd...dd.dd...dd.dd...d和

2021-04-09 18:03:42 1267 2

原创 记一个glslang的bug

错误日志这个错误是在Vulkan项目出现的,由Vulkan的Validation Layer报出:Validation Error: [ UNASSIGNED-CoreValidation-Shader-InconsistentSpirv ] Object 0: handle = 0x1c89eff0fd8, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x6bbb14 | SPIR-V module not valid: Interfaces pass

2020-10-23 20:07:16 674

原创 均匀采样问题总结

摘要均匀采样问题是图形学中常遇到的一类问题,这类问题的描述如下:如何用[0,1]之间的均匀采样获得在xxx上的均匀采样?其中,xxx可以是圆盘、球面、球体等。我们可以利用的只有[0,1]之间的均匀采样,这个可以通过程序的伪随机实现。总的来说,这类问题有着类似的思路和解决方案,都可以利用概率论知识一步步推导出来。本文将介绍相关方法,并给出几个常用的示例。理论概率论知识回顾注:如果基础比较扎实,可以直接跳到求解思路累积分布函数 随机变量XXX的累积分布函数(cumulative distribu

2020-10-16 20:23:58 7084 5

原创 两种不同的PBR工作流介绍

本文介绍两种常用的PBR材质工作流:金属/粗糙度工作流(Metal/Roughness)和镜面反射/光泽度工作流(Specular/Glossiness)。这两种工作流都可以用来制作一个支持PBR的材质,并用PBR渲染出逼真的效果,它们没有优劣之分,只是对同一种现象的不同实现。理解了这两种工作流,才可以更好的理解PBR着色器的一些参数及其使用背后的原理。本文参考了Substance出版的The PBR Guide,原文连接在[1],如果想看中文版可以参考[2]。PBR需要什么无论是金属/粗糙度工作流还

2020-10-08 15:44:33 10862 1

原创 着色模型简介和实现(下)

接上文,本文主要介绍UE4、Filament以及Disney对前面介绍的几种shading model的实现。实现着色模型(Shading model)指的是材质如何对入射光线做出反应,可以理解为从入射光线到出射光线的映射函数。前面介绍的BRDF理论也是shading model的一部分。除了BRDF,还有BSDF、BTDF模型,统称为BxDF。BxDF的公式的选取决定了shading model的效果。这一节我们将讨论主流的渲染引擎、方法都采用了哪些shading model,以及他们的具体实现是什么

2020-10-08 15:38:49 4792 2

原创 着色模型简介和实现(上)

摘要着色模型(shading model)描述的是材质表面对光线的作用,它的输入是光线、入射角、反射角、材质的属性(例如粗糙度、金属度等),输出是材质的颜色。前面提到的BRDF模型就是shading model的一种,但是BRDF模型过于简单,很多复杂的物理现象无法描述。本文将接着BRDF继续介绍一些更复杂的shading model,以及UE4和Disney的实现。本文主要介绍理论部分,下篇将介绍UE4、Filament以及Disney对shading model的详细实现。理论主要介绍对各向异性

2020-10-08 15:36:25 1066

原创 BRDF理论及shader实现(下)

接上篇:BRDF理论及shader实现(上)Specular BRDF对于specular分量来说,fmf_mfm​是一个遵循菲涅尔反射定律的镜面BRDF项,此时的fmf_mfm​满足([3]和[21]有详细的推导):fm(l,v,m)=F(v,m)δωm(h,m)4(l⋅h)2f_m({\bf{l}},{\bf{v}},{\bf{m}}) = F({\bf{v}},{\bf{m}})\frac{\delta_{\omega_m}({\bf{h}}, {\bf{m}})}{4({\bf{l}}\c

2020-10-06 15:14:40 2263

原创 图形学中的矩阵变换

摘要图形学因为要处理三维中的物体,所以经常要用到矩阵变换,包括基础的模型变换(旋转、平移、缩放变换),以及投影变换、视口变换。这其中有很多有意思的数学知识。网络上虽然有很多介绍矩阵变换的博客,但是很多只介绍了基本的矩阵运算,没有深入介绍四元数等高级用法。因此本文将从模型变换入手,介绍图形学中的插值操作,包括四元数等内容。模型变换模型变换是将一个点(模型)变换到另一个点(模型)的操作。一般我们会把三维点用齐次坐标(homogeneous notation)表示,所以变换矩阵是4×44\times44×4

2020-08-25 18:35:36 3530

原创 Filament介绍

摘要Filament是一款Google开发的跨平台的实时渲染引擎,支持PBR材质,并且针对Android平台做了优化(毕竟Google亲儿子)。本文将针对Filament的特点,简单介绍Filament的一些特性,包括它的材质系统和光照系统。这些设计对于实现一款渲染器,特别是PBR渲染器具有一定的参考意义。至于具体的实现细节,因为跟PBR理论重合度比较高,就不再赘述。如果对这款引擎很感兴趣,可以参考他们的文档。这个文档怎么说呢,详细的地方非常详细,简略的地方一律“TODO”过,很神奇。平台特性●

2020-08-06 19:58:48 12595 2

原创 BRDF理论及shader实现(上)

摘要本文将介绍几种渲染中常用的BRDF公式,包括Diffuse和Specular,以及相关理论。理论介绍BRDFBRDF(Bidirectional Reflectance Distribution Function)表示的是出射光线的辐射率radiance与入射光线的辐照度irradiance之间的比值,公式为:f(l,v)=dLo(v)dE(l)f({\bf{l}},{\bf{v}})=\frac{dL_o({\bf{v}})}{dE({\bf{l}})}f(l,v)=dE(l)dLo​(

2020-07-25 19:38:53 2599

原创 PRT算法介绍

摘要PRT(precomputed radiance transfer)的全称很长,Precomputed radiance transfer for real-time rendering in dynamic, low-frequency lighting environments,强行翻译一下大概是基于预计算辐射率传播函数的动态低频环境光场景的实时渲染,论文[1]对它的定义是:real-time method for rendering diffuse and glossy objects in

2020-07-12 11:58:52 4539 1

原创 Windows下编译Mitsuba 1&2

目录简介Mitsuba 2准备工作编译过程获取源码编译设置路径使用参考文档Mitsuba 1准备工作编译过程安装依赖获取源码编译编译错误1编译错误2编译错误3设置路径参考文档简介Mitsuba是一款面向研究的渲染器,因其对材质的模拟非常细致,故而在研究领域应用的非常多。Mitsuba的开发团队也比较争气,已经开发到第二代了。最近由于工作上的需要,在Windows下陆续编译了2代和1代的Mitsuba源码,踩了一些坑,在这里记录一下。注:Mitsuba相关的代码和数据都可以在他们的github账户下找到

2020-06-19 19:51:15 2706 1

原创 爬虫检测方法总结

背景近期由于工作上的需求,研究了一下反爬虫的工作。爬虫真是一种让人又爱又恨的存在,一方面搜索引擎的爬虫可以带来更多曝光率和更多流量,对公司是一件好事,但是也有一些个人或者竞争对手的爬虫,不但不会带来利润,反而会像DDos一样对服务器造成压力。反爬虫一般存在于两个环节,一种是traffic层面,在爬虫访问到服务器之前进行识别、区分,减轻服务器的压力,一般CDN提供商会有相关的反爬虫服务可以购...

2019-07-27 11:42:26 7171 2

原创 Mac下配置Filebeat+ELK日志管线的方法

介绍日常维护运行在集群上的服务时,依次登录到机器上查看日志文件显然是非常低效的。另一方面,这些日志文件经常是有着良好的格式以及固定的路径。如果能将指定的日志文件批量导出到一个数据库里,无论是查看还是检索都会方便很多。这里记录一下在构建日志管理系统时的一些工具和方法,方便以后取用。本文将构建的系统如下面的框图所示,用于管理日志文件(例如.log文件),并可以通过可视化工具Kibana显示、查...

2019-07-25 00:04:24 2426

原创 LeetCode 730. Count Different Palindromic Subsequences

QuestionGiven a string S, find the number of different non-empty palindromic subsequences in S, and return that number modulo 10^9 + 7.A subsequence of a string S is obtained by deleting 0 or more cha...

2018-05-01 21:25:29 484

原创 LeetCode 514. Freedom Trail && 动态规划与贪心算法的对比分析

QuestionIn the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal dial called the "Freedom Trail Ring", and use the dial to spell a specific keyword in order to open t...

2018-04-30 21:52:09 379

原创 LeetCode 410. Split Array Largest Sum

QuestionGiven an array which consists of non-negative integers and an integer m, you can split the array into m non-empty continuous subarrays. Write an algorithm to minimize the largest sum among the...

2018-04-27 11:35:57 171

原创 LeetCode 343. Integer Break

QuestionGiven a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.For example, given n = 2,...

2018-04-21 10:15:26 158

原创 Leetcode 338. Counting Bits

QuestionGiven a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.ExampleFor num = 5 ...

2018-04-19 21:16:34 115

原创 LeetCode 792. Number of Matching Subsequences

QuestionGiven string S and a dictionary of words words, find the number of words[i] that is a subsequence of S.Example :Input: S = "abcde"words = ["a", "bb", "acd", "ace"]Output: 3Explanation: The...

2018-04-13 20:45:27 180

原创 LeetCode 689. Maximum Sum of 3 Non-Overlapping Subarrays

QuestionIn a given array nums of positive integers, find three non-overlapping subarrays with maximum sum.Each subarray will be of size k, and we want to maximize the sum of all 3*k entries.Return the...

2018-04-13 20:42:11 274

原创 中断的上半部分与下半部分

为了让内核能够快速响应硬件设备的消息,引入了中断机制。当硬件设备需要被处理(比如网卡收到了包),会发送一个异步的中断请求给处理器,然后处理器陷入中断上下文中,停止当前执行的程序,转而执行预先设定好的中断处理程序。完成中断处理程序之后给硬件设备一个信号再返回原先的工作继续。在这套机制中,中断处理程序的编写非常关键。一方面,它必须完成对硬件中断响应的处理,比如网卡中断,要把缓冲区里的内容复制到内存

2017-01-11 19:13:31 949

原创 操作系统概念-内核同步-信号量

继续内核同步的话题。自旋锁是一种快速简单的锁实现,可以用于临界区很短的情况。但是由于等待锁的进程要不断检测锁的状态,会造成一定的CPU资源浪费。对于这个问题的解决方案就是信号量。信号量是一种睡眠锁,当一个进程试图获得正在使用的锁时,它不会像自旋锁那样原地等待,而是会被丢入一个等待队列,等到这个锁被释放时,等待队列会中的(第一个)进程会被唤醒,并获得该锁。       还是用前面门和锁的例子来说

2017-01-08 15:42:33 434 1

原创 操作系统概念-内核同步-自旋锁

有了原子操作,就可以了制作控制临界区的锁机制了。自旋锁就是其中的一个代表。 自旋锁机制可以用门和锁的例子来比喻。进程执行到某个临界区,相当于要进入一栋房子,这是进程会检查屋内是否有人(进程),如果屋内没有人,则直接拿起钥匙进入并把门锁上(进入临界区);如果屋内有人(进程),则在门口等待(忙等待)屋内的进程出来再进去。可以看出,自旋锁最多只能被一个进程持有,如果有新的进程希望获取自旋锁,它将会一直忙等待直到前一个持有自旋锁的进程释放锁。

2017-01-06 15:47:44 929

原创 操作系统概念-内核同步-原子操作

在同一个操作系统中,不同的进程经常需要相互协同工作,协同的方法一般有两种,一是直接共享逻辑地址空间,二是通过文件或消息共享数据。如果共享逻辑地址空间,则在进程执行的时候有可能会发生多个进程同时访问同一个数据的冲突问题,特别是在多处理器的情况下。对于这类冲突,内核采用了一些方法进行进程同步,例如原子操作、自旋锁、信号量等方法。接下来的四篇(包括本文)将分别介绍原子操作、自旋锁、信号量和死锁的一些概念,同时以Linux4.8.1版本的内核代码(x86架构部分)为例进行分析。

2016-12-28 21:09:02 7993

原创 Mac原生开启本地服务器的两种方法

由于做前端开发的时候,经常需要看自己做的网页效果,但是如果用到了本地资源,默认情况下是不允许浏览器加载的。当然可以通过设置(safari-开发-停用本地文件限制)来停用限制,但是这样做存在安全隐患。另一个解决方案就是开启本地服务器,把网页和资源挂到本地服务器上去。本文给出用Apache和python搭建本地服务器的简单命令介绍。

2016-12-17 14:12:35 14843

原创 Visual Studio2013下Magick++配置方法

ImageMagick是一个图片编辑的跨平台开源库,可以读写各种类型的图片(包括svg格式的矢量图)并对其进行处理。本文将介绍Win10平台下用源码编译ImageMagick库的流程,主要支持Visual Studio 2013的调用。

2016-08-16 20:48:15 5917 5

原创 Chrome自定义CSS样式的方法

Chrome自V33以后不允许自定义CSS样式了,但是仍然可以通过插件的方式实现自定义样式。因此本文主要完成如下3个工作:1,介绍ChromeV33+自定义CSS样式的方法2,介绍Chrome自定义滚动条样式的代码3,介绍Chrome插件添加白名单的方法

2016-08-07 22:30:13 13701 4

原创 Windows下配置vegaFem的方法

vegaFem配置vegaFem是一个跨平台的开源库,用于做几何和材料的模拟。官网:http://run.usc.edu/vega/。vegaFem在linux下的配置比较容易,直接make就差不多了,博文http://blog.csdn.net/silangquan/article/details/12944969详细介绍了配置和使用方法。而在windows下的配置就麻烦一些,需要根据源

2016-01-03 15:58:55 2390

原创 matlab/C混合编程--mex文件的编写、编译、调用

matlab程序计算速度太慢,特别是面对大量循环的时候。经测试,11k个面的规模的mesh,用matlab求mass properties需要0.45s,而同样的程序用C实现,在release模式下仅需要2ms。因此如果能将复杂计算、循环用C包装起来,用matlab调用,可以极大地提高运算速度。matlab配置C编译器         打开matlab,输入:mex –setup可

2015-08-14 16:09:47 7102

转载 Lib和Dll的那点事

转载自 http://www.cppfans.org/1394.html搞程序开发的朋友应该对Lib和Dll很熟悉,对于这两个东西,可谓是几家欢喜几家忧,喜欢的人觉得它可以封装代码,避免别人剽窃,不喜欢的人觉得它很麻烦,干嘛不直接用源文件。而特别是新手对于Lib和Dll的关系和使用完全搞不清楚。Lib称为静态链接库(static link library),是在编译的链接期间使用的

2015-06-26 18:35:42 469

原创 GLEW库安装和初始化

转载请注明出处!GLEW库安装和初始化         GLEW库是OpenGL的扩展库,用于支持OpenGL1.1以上的版本[0]。比如着色器特性。一般非集成显卡都能支持到OpenGL2.0或者更高,但是没有GLEW库依然无法调用高版本OpenGL的函数。GLEW能自动识别你的平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,你就能使用gl, glu,

2015-05-19 18:14:55 19641 8

原创 PLY文件读取与显示

用OpenGL写了一份读取PLY文件并显示的代码,支持以下关键字: ply/format/element vertex/property/element face/end_header以及数据类型: char(int8)/uchar(uint8)/short(int16)/ushort(uint16)/int(int32)/uint(uint32)/float(float32)/dou

2015-04-19 18:53:15 24794 18

原创 OpenGL键盘事件处理

GLUT提供了两个函数用于设置键盘事件的回调函数,一个用于处理普通按键,一个处理特殊功能按键(如箭头、F1~F12)。先看看处理普通按键的函数:void glutKeyboardFunc(void (*func) (unsigned char key, int x, int y));回调函数func的第一个参数是按键的ASCII码,剩下的是按键时候的鼠标坐标。鼠标坐标是相对窗口的左上角

2015-04-19 18:10:13 8401

转载 OpenGL版本查看

本文代码摘自如何查看OpenGL版本?  gl和glut库提供了版本查看函数,只需要调用就可以了:#include#include #include int main(int argc, char** argv){ glutInit(&argc,argv); //显示模式初始化 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DE

2015-04-19 18:00:49 8211

转载 GLUT函数说明

注:本文转自:http://blog.sina.com.cn/s/blog_5f0d72800100iajl.html由于我下到的OpenGL函数库只有gl和glu库的函数,缺少常用的glut库函数,因此转载此文,并略加补充。在此感谢原作者的整理!OpenGL函数手册可以前往 OpenGL学习资料 下载。一、初始化void glutInit(int* argc,char**

2015-04-09 21:19:02 575

原创 OpenGL配置(Win8+VS2012)

学习OpenGL相关书籍红宝书:OpenGL编程指南 蓝宝书:OpenGL超级宝典 配置注:结合http://blog.csdn.net/lixam/article/details/7618015#reply与http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html的方法整理,并做适当修正。环境:windo

2015-03-27 19:35:10 975

Applied Cryptography: Protocols, Algorithms and Source Code in C(2nd edition)

《应用密码学:协议、算法与C源程序》的英文版第二版,pdf。很清晰

2016-12-27

Computer_Organization_and_Design,The_HardwareSoftware_Interface_5th

Computer Organization and Design,The Hardware/Software Interface, 5th edition

2016-11-17

Computer.Architecture.A.Quantitative.Approach英文版及习题答案

Computer.Architecture.A.Quantitative.Approach,学习体系结构很好地教材,内涵第五版英文电子版及习题答案。

2016-11-17

Database Management Systems(3rd edition)

Database Management Systems电子版

2016-11-16

模式分类Pattern Classification第二版(Duda)英文版教材及参考答案(含matlab代码)

包含Duda的pattern classification第二版英文版pdf,及课后习题的参考答案和上机练习的代码

2016-09-26

Chrome添加插件白名单所需的文件

将Chrome插件添加进白名单所需要的文件。具体操作方法参考:http://blog.csdn.net/u010281174/article/details/52145291

2016-08-07

计算机网络_严伟潘爱民译

本书是国内外使用最广泛、最权威的计算机网络经典教材。全书按照网络协议模型自下而上(物理层、数据链路层、介质访问控制层、网络层、传输层和应用层)有系统地介绍了计算机网络的基本原理,并结合Internet给出了大量的协议实例。

2015-03-24

数字通信 基础与应用(第二版)

数字通信 基础与应用(第二版),作者Bernard Sklar

2014-12-29

n2cpu_Embedded_Peripherals.pdf

Quartus II handbook Version8.1 Volume5:embedded peripherals

2014-12-21

NIOSII那些事儿--pdf

学习FPGA之Nios系统的资料,很详细。适配 FPGA黑金开发板,Quartus9.0+Nios II IDE9.0。

2014-12-20

Apress-Beginning.Kinect.Programming.with.the.Microsoft.Kinect.SDK.Mar.2012.pdf

学习Kinect SDK的教材,中文翻译可以参考 寒江独钓 的博客——http://www.cnblogs.com/yangecnu/p/Learning-KinectSDK.html

2014-11-26

Kinect应用开发实战用最自然的方式与机器对话

Kinect应用开发实战用最自然的方式与机器对话,pdf版,代码可以见http://download.csdn.net/detail/u010281174/8070239

2014-10-22

Kinect应用开发实战用最自然的方式与机器对话-代码

Kinect应用开发实战用最自然的方式与机器对话 对应书的 源代码

2014-10-22

游戏编程中的人工智能技术

源码可以参见http://download.csdn.net/detail/u010281174/7851439

2014-09-01

《游戏编程中的人工智能技术》源代码

《游戏编程中的人工智能技术》一书的源代码

2014-09-01

空空如也

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

TA关注的人

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