8 _子宽

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 7w+

记一个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

均匀采样问题总结

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

2020-10-16 20:23:58

两种不同的PBR工作流介绍

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

2020-10-08 15:44:33

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

接上文,本文主要介绍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

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

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

2020-10-08 15:36:25

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

图形学中的矩阵变换

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

2020-08-25 18:35:36

Filament介绍

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

2020-08-06 19:58:48

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

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

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

爬虫检测方法总结

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

2019-07-27 11:42:26

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

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

2019-07-25 00:04:24

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

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

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

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

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

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

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

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。