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)一致的情况下,就会发生镜面反射。…

%d 블로거가 이것을 좋아합니다: