Custom Mipmap encoding practice.

此示例不是生产级别。该示例可以在生产级别使用,但是可以通过添加更有效的功能将其升级到完整的生产级别功能。This example is not a production level.This example can be used at the production level, but it can be upgraded to a full production level function by adding more efficient features. 实验目的。公司内部还没有请求,但是我们根据JP Friends Company项目团队提出的类似要求进行研究。通过改善Unity mipmap过滤的质量并改善模糊的Texel采样,我们希望改善更清晰的法线贴图表达(中等距离)或Albedo表达。在粗糙的情况下,不需要改进。 Purpose of experiment.There is no … Custom Mipmap encoding practice. 더보기

对Reflection的误解(漫反射&镜面反射)

jplee23年的游戏开发商。 技术美术总监。 渴望退休的独立开发商。半灰、max、游丝结、戏剧常量、熊掌等 6 人赞同了该文章 Written by JP.Lee心动的 Technical art team leader.leegoonz@163.com 对Reflection的误解(漫反射&镜面反射) 字面含义 我们通常使用diffuse reflection(漫反射 ) 和 specular reflection( 镜面反射 ) 这两种术语。但真的懂得其含义吗? 首先来看看diffuse的字面含义。 1.散开;四散 ( 光, 热量, 味道等 ) 2. 传播(知识) ,普及, 舒缓( 情绪等 ) 3. ( 气体或液体) 弥漫;漫射;发散 来自:百度翻译 … 对Reflection的误解(漫反射&镜面反射) 더보기

在GPU避免分支的方法

在GPU避免分支的方法Unity TechnologiesOrigianl Authored by Brandon Fogerty(XR Graphics Engineer at Unity Technologies.) Additional Organized by JP.Lee(李正彪)leegoonz@163.com概要这边来稿文章中,希望了解如何编写GPU着色器友好型代码,以避免和分支相关的性能费用。“分支”有着什么意义?使用明确的 if / then随时都可以产生分支。编译器遇到条件会作出命令。GPU可去的地方有两处。因此需要决定要使用哪种代码路径。以下示例展示了在汇编GPU里面运行的示例。运算变量设置为幻数7,则添加该数字。否则的话要减掉。 为什么要避免分支?为了增加CPU使用率,大多数计算机都尝试在管线上执行尽可能多的任务。汇编指令按顺序执行,CPU会尝试在尽可能多的CPU内核上执行尽可能多的指令。举个简单的例子。想象一下,在Twilight Zone内,我们就是世界上最高效的程序员! 用两行代码写了电子游戏! CPU会尽可能在每一个CPU内核上各执行一个,共计两个光荣的指令。这是计算机能够更有效的运行代码。 但是在分支时,计算机可能会花时间准备未运行的代码结果。从结论上看处理器时间被浪费,影响了游戏或应用程序的应答能力。CPU 侧分枝误诊通常会导致周期遗漏超过40次。– Charles Sanglimsuwan (集成开发人员相关工程师)运气不错,最新的CPU处理器速度惊人,实际分支预测出色,因此分支错失几乎不会有问题。但是GPU仍然存在性能问题。 GPU尝试并行解决大量计算,因此大部分GPU不支持分支预测GPU为什么会发生性能问题?GPU为生成美丽的图像,喜欢并行进行很多工作!GPU为进行多种固有的结果计算,进行了精心设计,解决了通过单一滤镜(例如:着色器程序)实施的多种输入和相关的问题。这就是渲染经常使用GPU(Graphics processor units)的原因。通过几个Shader程序运行位置,法线,贴图坐标等具有不同属性的固有顶点,该Shader程序输出在画面上表现的大量固有像素颜色。举个例子,显示器是1080 × 960这样的一般HD像素的情况下,GPU在一组输入时,将计算1080 × 960 = 1,036,800个的固有像素颜色值!那是很多的计算结果!想象一下在1080×960的高清游戏体验。游戏尝试每秒渲染60个固有的图像或帧。因此GPU在1秒之内需要计算1080x960x60以上的固有像素颜色值!结论上看一秒之内可以计算62,208,000个固有像素值!撰写本文的节点,NVDIA最现金的GPU是GeForce RTX 2080 Ti。它有着比英特尔最先进的CPU处理器i9-7980XE更多4,352个Cuda内核,18个内核。非常大的差异吧? GPU有大量的处理内核,但是与最新的CPU相比,其核心处理数量仍不足百万。至少目前还没有!显卡在物理上太大了,可能会很昂贵。 … 在GPU避免分支的方法 더보기

PBR Specular D的几何学含义

PBR Specular D的几何学含义 jplee 2019.9.03 PBR( Physically Based Rendering )里成为大趋势的Cook-Torrance的Specular BRDF [1]定义如下: 这里面D函数是对于微表面(microfacet)的倾斜度的分布(Distribution)函数。本文档将对于本函数在几何学上的意义进行说明。 一个表面(surface)是由几个微表面构成,这是PBR理论的根本。而且构成表面的各微表面都有着不同的法线(normal)。另外微表面上发生了镜面反射(mirror reflection, 正反射)。 很多文档里面将这样的微表面的法线用m表示,也会用h表示。应该是microfacet normal和half vector的略写。那么图1里面表面和微表面的关系就显而易见了。 图1:由微表面构成的表面[2]. 微表面的法线用m来表示很容易理解,但是用h(half vector)来表示就有点费解了。Burley和Cook-Torrance [1, 3]一致记述了用半向量(half vector)来表现微表面的法线。 这里最好是用半向量的思路来理解这个含义。上面我们已经假设微表面能够镜面反射,现在我们来反过来看一下这个问题。 表面内,能够给我们展示镜面反射的、带有倾斜度的微表面究竟有多少呢? 这就是我们要通过Specular D函数得到的值的本质。要看到图2最左边的微表面向我这个方向的镜面反射结果的话,需要怎样的倾斜度呢?这里的n是表面法线,m是微表面法线。 图2: 微表面样品 镜面反射是“入射角和反射角相同的反射”。因此像下图那样光的向量l和视图向量v的一半,即半向量(h)和微表面法线(m)一致的情况下,就会发生镜面反射。 这里我们可以推断的是,如果有很多尖锐的微表面,逆反射(retroreflection)数量就会增多;如果乱乱的很粗糙的话,漫反射就会更加严重;柔和的话(即,m和n几乎一样的面很多的话),正反射的概率就很大了。 结论就是,我们的问题可以更改如下: 光的向量l和视图向量v同时具备的时候,与他们的半向量h一样的微表面法线m有多少呢? 查找半向量h和微表面法线m的角度是0的微表面分布,是Specular D函数的目标。因此所有的文献里面都会以这样的假设为基础,使用“半向量是微表面的法线” 这样的表现方式。 [3] 里面Burley将实测数据和其他Specular … PBR Specular D的几何学含义 더보기

对Reflection的误解(漫反射&镜面反射)

字面含义 我们通常使用diffuse reflection(漫反射 ) 和 specular reflection( 镜面反射 ) 这两种术语。但真的懂得其含义吗? 首先来看看diffuse的字面含义。 1.散开;四散 ( 光, 热量, 味道等 ) 传播(知识) ,普及, 舒缓( 情绪等 ) ( 气体或液体) 弥漫;漫射;发散 来自:百度翻译 跟大家知道的意思一样吗? 下面来看看specular 的字面含义。 镜子似的,反射的,反映的 ( 光学 )正反射性的 来自:百度翻译 这也跟大家知道的意思一样吗? 现在看看是否跟实际含义一样。 Diffuse 反射在粗糙的表面形成? 很多人觉得diffuse reflection … 对Reflection的误解(漫反射&镜面反射) 더보기