translation

Using physical lighting units with Enlighten and UE4.(Translated topic/Extra explaining)

Original topic by Silicon Studio Japan at 2019.Additional extra declaring by JPLee at 2021. This document is written in English and added Chinese using a baidu translator.It can include a number of mistranslations. Physical-based rendering (https://en.wikipedia.org/wiki/Physically_based_rendering) has become the standard technology for game development. Provides a simple way to create materials based on physical parameters […]

Voxelizations of Shadow for mobile. Case Study.

This article was translated into English in my own way after listening to the presentation of voxel-based shadow processing research released by the Unity Spotlight team in 2019.While living in China, I participated in the development of two mobile MMO Rpg( Fully Open World Mobile MMORPG ).Real-time shadow handling is a very difficult optimization difficulty.I […]

(PSO)How to use shader pipeline cache effectively.

Let’s see how to use the shader pipeline cache. I will talk about the above table of contents.First, we’ll talk about pipeline state objects, how to use them in Unreal Engine, and also add a cache using PSO to see how to use them. Let’s look at the PSO cache first. Let’s move on because […]

通过新的任天堂Switch模式了解CPU、GPU和温度状态

通过新的任天堂Switch模式确定CPU,GPU和温度状态 Writing by JP.Lee Nintendo Switch是任天堂开发的小型游戏机。 我认为,作为纯游戏用途的Nintendo Switch卖得好的原因是比智能手机小,易于操作,并且还支持Wi-Fi,因此可以多重博弈。 ​ 任天堂 Switch的配置和规格如下。 可以说,现有的iphone11顶级版本或者iPad Pro第三代的性能与任天堂Switch相似。 但是我个人认为,任天堂Switch具有专注于游戏性的内部设计结构,所以更优秀一点。 此外,安装在扩展坞的时候和手持式状态的优化系统也非常优秀。 ​ * CPU : NVIDIA TEGRA X1+ T210B01 * GPU : NVIDIA GM20B * RAM : LPDDR4X SDRAM 4GB * 网络 : 2.4GHz/5GHz支持至802.11ac。 蓝牙 4.0 Tegra X1 & X1+ (T210 / T210B01)​ Part Number T210 (X1) T210B01 (X1+) CPU ARM […]

在GPU避免分支的方法 [Translation & Addition]

在GPU避免分支的方法Unity Technologies Origianl 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将尝试对要解决的问题类型进行特定假设。GPU充分利用SIMD。SIMD表示单个命令的多种数据。SIMD允许以并行方式为多个输入运行计算。SIMD通常希望输入和输出位于相邻的内存块中。因此SIMD操作不必加载每个输入并单独保存每个结果,而是加载输入并将结果保存为单个加载/保存操作,从而减少昂贵的内存加载和保存。SIMD的使用要求内存布局严格,并在应用程序设计中维持更好地内存缓存一致性上有积极作用。SIMD在CPU和GPU均可使用.在CPU使用SIMD的示例可参考此处。与CPU程序不同,GPU程序几乎始终使用SIMD。为了充分利用SIMD,GPU通常每个内核都有很多ALU。ALU是算术逻辑设备的缩写。ALU执行数学命令。举个例子,使用“add 4, 3”命令计算结果7。因此,单一内核上有8个ALU的话,就可以同事并行运行8个计算。即,单一GPU内核有8个ALU,则单个GPU内核则可以同事计算8个像素值!但是,着色器阶段使用动态分支会发生什么呢?核心是必须执行所有代码路径,并最终丢弃不满足条件的代码路径。这意味着ALU会浪费时间执行任何未使用的操作。也就是说渲染图像需要更长的时间。 使用示例:在Unity里,使用立体shader以保证双眼能够准确渲染。左眼以绿色表示渲染,右眼渲染的显示为红色。下面是使用立体shader渲染双眼锁渲染的单个球体。 针对此的纯接近方式是基于unity_StereoEyeIndex变数的条件方法。 分段shader的集合输出如下: 注意从0行开始的分支。分段shader stage上指定的内核将强制所有ALU执行两个条件结果。但是不满足条件的结果将被丢弃。这种情况,可能是一部分ALU执行了被浪费的操作。我们刚刚让几种ALU很伤心,现在他们提出了他们为什么需要存在。不要让可怜的小ALU做很忙的工作了。(✖╭╮✖)  你肯定不喜欢浪费时间吧?用ALU做一些游泳的事情吧。如果能够去掉条件部,可以减少浪费,让ALU更有效率,更加幸福!以下示例演示了分段着色器的实现方式: 没有明确的条件,仔细看下HLSL组件输出。 再一次确认也是!没有分支!我们现在使用的不是明确的条件部,而是Lerp。lerp在两个值之间执行线型插值。Lerp本质上是: 如组件输出所示,lerp会转换一些比乘法和分支更好地附加输出。基本上会向lerp函数提供两个任意值,传递第三个参数”t value”。t值一般是易于操作的空间数0.0和1.0之间的数字。t值为0.0,结果为a。如果t值为1,则结果为b。t值介于0.0和1.0之间的话,结果将在a和b之间线性显示。 对于我们来说,我们知道unity_StereoEyeIndex是左眼或者右眼分别是0或者1。因此,这可以很好的操作,并可以避免明确的分支。避免分支的其他方法是什么?默认情况下,我们希望得到的是将条件转换为数学方程式。为了帮助实现这个目标,我们继续介绍HLSL硬件加速功能。 […]

综合研究基于物理的渲染算法Unity3D[Translation]

基于物理的渲染算法有关 Unity3D 的概括研究 来说说基于物理的渲染。基于物理的渲染(PBR)近几年非常火爆。Unity 5, 虚幻引擎 4, 寒霜引擎, 甚至是 ThreeJS, 更多的游戏引擎在使用它。很多 3D 模型工作室在根据 Marmoset Toolbag 和 Allegorithmic Substance Suite等人气工具转换成 “PBR Pipeline”。现在没几个不熟悉管线的美术,但是了解管线在后台是怎么运行的,很少有引擎和美术知道。我这个指南分解(分析) PBR 渲染 (shading),是想让初学者方便理解 PBR。让我们开始吧。 PBR的物理特征 在过去的 3 ~ 40 年,我们对周围世界的理解和科学上 / 数学上它是怎么运作的都有很多进步。而且这种理解在渲染技术领域也有了很大的发展。多位灵敏的研究者对光,视野,表面正常形态,然后这三个是怎么互相作用的有着深刻的结论。这种发展大部分是围绕 BRDF (双向反射率分布函数)和固有能量保存的想法为中心形成的。​如果想理解光和观测点跟Surface是怎么相互作用的,首先要理解Surface本身。光照射到完全光滑的表面几乎可以在表面形成完整的反射。光和我们叫做粗糙表面的东西相互作用的时候,他的反射不是类似的,这可以用微表面 (microfacets)的存在说明。 我们看物件的时候,要假设他的表面不是完全光滑的,而是用很小的面组成的。每个物件都是完整的 Specular reflection 。这个微表面(microfacets)通过光滑表面的法线,具有分布的法线。微表面法线的不同程度是根据表面粗糙度定的。表面越粗糙,高光损失的可能性就越大。所以粗糙的表面有更大更模糊的斑点。光滑的表面上,光的反射比之前更完整时可以压缩反射高光。 再回到 BRDF… 双向反射率分布函数 (Bridirectional Reflectance Distribution Function, BRDF)是说明表面反射率的函数。有各种 BRDF 模型 / 算法,其中大部分不是基于物理的算法。基于物理的 BRDF需要能量守恒。‘能量守恒 (Energy Conservation)’是说从地表反射的总光量,比地表收到的总量少。表面反射的光不能比之前讨论的所有微表面相互作用前更强烈。 […]

PBR Specular D的几何学含义[Translation]

Original Topic from 그냥 그런 블로그 :: PBR Specular D 의 기하학적 의미 (tistory.com) This topic is a Chinese translation of the original text above. PBR Specular D的几何学含义 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)一致的情况下,就会发生镜面反射。 […]