4 Dezeming

学生身份

我要认证

研究方向:数学原理,GPU加速技术,数据结构与算法,机器学习,深度学习神经网络,3D可视化,计算机图形学,图像处理,计算机视觉,Qt程序设计,C++编程 曾学习和研究过:Java,51,stm32,msp430等单片机,嵌入式ARM,DSP,模拟/数字电路,树莓派

等级
TA的排名 4k+

PBR理论(四)

openGL高级光照部分目录见openGL高级光照部分目录法线分布函数法线分布函数D在统计学上近似于微区的相对表面积,精确地与矢量h对齐。在给定一些粗糙度参数的情况下,有许多NDF在统计上近似于微面总体排列,我们将使用的NDF称为Trowbridge Reitz GGX:这里h是测量表面微区的中间矢量,α是表面粗糙度的量度。如果我们将h作为曲面法线和光线方向在不同粗糙度参数下的中间向量,我们将得到以下视觉结果:粗糙度较低(因此表面是光滑的)时,高度集中的微区在一个小半径上与一半矢..

2020-07-14 15:07:27

PBR理论(三)

openGL高级光照部分目录见openGL高级光照部分目录BRDFBRDF或双向反射分布函数是一个函数,它将入射(光)方向ωi、输出(视图)方向ωo、曲面法线n和表示微表面粗糙度的曲面参数a作为输入。考虑到不透明表面的材料特性,BRDF近似于每个单独光线ωi对最终反射光的贡献。例如,如果曲面有一个非常平滑的曲面(如镜子),则BRDF函数将为所有入射光线ωi返回0.0,除了一条与传出光线ωo具有相同(反射)角度的光线外,该函数返回1.0。基于反射理论和反射材料理论,讨论了反射材料的反射特性。为..

2020-07-14 10:59:21

PBR理论(二)

openGL高级光照部分目录见openGL高级光照部分目录这给我们带来了一个叫做渲染方程的东西,一个非常聪明的人想出的一个精心设计的方程,它是目前我们用来模拟光的视觉效果的最好的模型。基于物理的渲染强烈遵循渲染方程的一个更专门的版本,即反射方程。要正确理解PBR,首先要对反射率方程建立坚实的理解:反射率方程一开始看起来让人望而生畏,但当我们仔细分析它时,你会发现它慢慢开始有意义了。为了理解这个方程,我们必须深入研究辐射测量学。辐射测量是测量电磁辐射,包括可见光。有几种辐射量可以用来测量表面和..

2020-07-14 10:32:49

PBR理论(一)

PBR,或者更常见的基于物理的渲染,是一组渲染技术的集合,这些渲染技术或多或少基于与物理世界更接近的基本理论。由于基于物理的渲染旨在以一种物理上合理的方式模拟光,因此与我们的原始照明算法(如Phong和Blinn-Phong)相比,它通常看起来更真实。它不仅看起来更好,因为它非常接近实际物理,我们(尤其是艺术家)可以根据物理参数编写表面材料,而不必求助于廉价的技巧和调整来使灯光看起来正确。基于物理参数编写材质的一个更大的优点是,无论照明条件如何,这些材质都会看起来正确;有些在非PBR管线中则是不正确的。

2020-07-13 22:28:29

Bloom 未完成

openGL高级光照部分目录见openGL高级光照部分目录种方法是使其发光;然后光线在光源周围流动。这有效地给观者一种错觉,这些光源或明亮的区域非常明亮。这种轻微流动或发光效果是通过称为Bloom的后处理效果实现的。Bloom为场景中所有明亮的区域提供类似辉光的效果。下面是带有和不带发光的场景示例(图片由Epic Games提供):Bloom提供了关于物体亮度的明显视觉线索。当以一种微妙的方式完成时(有些游戏根本无法做到),Bloom会显著提高场景的照明度,并允许产生大量的戏剧性效果。..

2020-07-13 22:11:16

HDR

openGL高级光照部分目录见openGL高级光照部分目录默认情况下,当存储到帧缓冲区时,亮度和颜色值在0.0和1.0之间。这句话一开始看起来很无辜,却让我们总是在这个范围内的某个地方指定光和颜色值,试图使它们适合场景。这个方法很好,而且效果不错,但是如果我们走在一个非常明亮的区域,有多个明亮的光源,总的和超过1.0,会发生什么呢?答案是,所有亮度或颜色和大于1.0的片段都被限制为1.0,这看起来不太好看:由于大量片段的颜色值被钳制为1.0,每个明亮片段在大区域具有完全相同的白色值,因此会丢..

2020-07-13 20:04:34

Normal Mapping (一)

openGL高级光照部分目录见openGL高级光照部分目录我们所有的场景都是用网格填充的,每个网格都由数百个或数千个三角形组成。我们通过在这些平面三角形上包装二维纹理来增强真实感,隐藏了多边形只是很小的平面三角形的事实。纹理有帮助,但是当你仔细观察网格时,仍然很容易看到底层的平面。然而,大多数现实生活中的表面并不是平坦的,并且显示出很多(凹凸不平)的细节。例如,以砖表面为例。砖的表面是一个相当粗糙的表面,而且显然不是完全平坦的:它含有凹陷的水泥条纹和许多细密的小孔和裂缝。如果我们在一个明亮的场景..

2020-07-13 14:28:05

Point Shadows(二)

openGL高级光照部分目录见openGL高级光照部分目录PCF由于全向阴影贴图基于与传统阴影贴图相同的原理,因此它也具有相同的分辨率相关伪影。如果你放大足够近,你可以再次看到锯齿状的边缘。通过过滤片段位置周围的多个样本,并对结果进行平均,百分比闭合滤波(PCF)允许我们平滑这些锯齿状边缘。如果我们使用上一章中相同的简单PCF过滤器并添加第三维度,我们可以得到:float shadow = 0.0;float bias = 0.05; float samples = 4.0..

2020-07-12 16:26:37

Point Shadows(一)

在上一章中,我们学习了使用阴影贴图创建动态阴影。它工作得很好,但它主要适用于平行光(或聚光灯),因为阴影只在光源的方向生成。因此,它也被称为方向阴影映射,因为深度(或阴影)贴图仅从灯光所观察的方向生成。本章将着重于在周围所有方向上生成动态阴影。我们使用的技术非常适合点光源,因为真实的点光源会向各个方向投射阴影。这种技术被称为点(光)阴影,或者更以前称为全向阴影贴图。本章建立在上一章阴影映射的基础上,因此除非您熟悉传统的阴影映射,否则建议您先阅读阴影映射一章。该技术主要类似于方向阴影映射:我们从灯

2020-07-12 10:36:47

Shadow Mapping (2)

openGL高级光照部分目录见openGL高级光照部分目录改进阴影贴图我们设法使阴影映射的基础工作,但正如你所能做到的那样,由于与阴影映射相关的一些(清晰可见的)工件,我们还需要修复。我们将在下一节集中讨论修复这些工件。暗疮很明显,与之前的图像相比有些问题。更近距离的变焦显示了一个非常明显的云纹图案:我们可以看到地板四边形的大部分以交替的方式呈现出明显的黑色线条。此阴影映射伪影称为阴影痤疮,可以通过以下图像进行解释:由于多个阴影碎片距离贴图的深度相对较远,因此它们与贴图的距离..

2020-07-11 22:07:19

Shadow Mapping (1)

openGL高级光照部分目录见openGL高级光照部分目录阴影是由于遮挡而缺少灯光的结果。当一个光源的光线没有击中一个物体,因为它被其他物体挡住了,这个物体就处于阴影中。阴影为照亮的场景添加了大量的真实感,使观看者更容易观察对象之间的空间关系。它们给我们的场景和物体以更大的深度感。例如,请查看具有和不包含阴影的场景的以下图像:你可以看到,有了阴影,物体之间的关系变得更加明显。例如,一个立方体漂浮在其他立方体之上的事实,只有当我们有阴影时才真正明显。阴影的实现有点棘手,特别是在当前的实时(..

2020-07-11 09:30:02

Gamma Correction

openGL高级光照部分目录见openGL高级光照部分目录一旦我们计算出场景的最终像素颜色,我们就必须在监视器上显示它们。在数字成像的旧时代,大多数显示器是阴极射线管(CRT)显示器。这些显示器的物理特性是输入电压的两倍不会产生亮度的两倍。将输入电压加倍后,亮度将达到大约2.2的指数关系,即监视器的伽马值。这恰好(巧合地)也与人类测量亮度的方式密切匹配,因为亮度也以类似的(逆)幂关系显示。为了更好地理解这一切意味着什么,请看下图:在人眼看来,顶行看起来像是正确的亮度比例,将亮度加倍(例如从0..

2020-07-10 22:37:40

LearnOpengl 高级光照目录

openGL高级光照部分目录 见learnOpenGL在线教程是目前可以说最好的OpenGL新特性的教程版本,可编程管线极大增加了灵活性。但是高级光照部分的中文版翻译的有问题,也很久没有再版了,这里我将自己翻译总结一下高级光照部分的内容。...

2020-07-10 21:16:29

CUDA的Block和Grid详解

一般CUDA会把线程分为Block和Grid:这里方便介绍我们用的都是二维的结构,其实Block和Grid也可以设置成三维的。blockDim.x:Block的x方向的维度,这里是5,即每行5个线程。blockDim.y:Block的y方向的维度,这里是3,即每列3个线程。blockIdx.x:Block在x方向的位置,图中放大的Block是2,即为第2个。blockIdx.y:Block在y向的位置,图中放大的Block是2,即为第2个。注意blockIdx中的Idx是表示in

2020-07-07 15:24:00

CUDA结构体或类的传递内存实验

我想把指针传送到CUDA内存区域中,但是遇到了一定的问题,最终找到了解决方法,这里进行一下记录:一、普通传递没有任何问题:cudaMalloc((void**)&a_dev, 50 * sizeof(int));a_host = (int*)malloc(sizeof(int) * 50);for(inti = 0;i < 50;i++) a_host[i] = i;cudaMemcpy(a_dev, a_host, 50 * sizeof(int), cudaMem..

2020-06-29 18:26:59

CUDA定义在类内的数组内存拷贝和计算问题

CUDA在类内进行拷贝的内存,在外部无法进行计算?比如:#include "cuda_runtime.h"#include "device_launch_parameters.h"#include <stdio.h>#include <iostream>class myRandom {public: myRandom() { cudaMalloc((void**)&a_dev, 50 * sizeof(int)); a_host = (int*)

2020-06-29 11:36:18

使用3Dmax做一个妹子 一 基本操作方法

使用3Dmax做一个妹子系列 见使用3Dmax做一个妹子首先可以从这里创建一个立方体,在图中通过鼠标设置立方体的长宽和大小。这个可以设置选中物体并移动。按下M键打开材质编辑器,位置如图所示,拖动一个标准色过去:右边属性框里可以改改名字:右键物体,转换为可编辑多边形。然后右键->Freeze Selection,再进行右键,选择:可以看到变为下面的样子:再去右面属性里往下拉,取消选择:就能得到硬边显示的效果:...

2020-06-28 16:02:55

使用3Dmax做一个妹子

使用3Dmax做一个妹子 系列 参考使用3Dmax做一个妹子

2020-06-25 00:48:32

Unity菜单布局工具栏

使用Unity3D来设计游戏全部文章 见使用Unity3D来设计游戏菜单栏的东西基本上都是可以从别的地方进行设置的(比如在某处右键)。Window可以打开一些窗口,Help可以看一些内容和简介。在scene上右键,可以再添加一个观察窗口:点击下面三角形按钮可以运行游戏,再点击一下就取消运行。...

2020-06-23 16:14:54

Unity3D物体的使用

使用Unity3D来设计游戏全部文章 见使用Unity3D来设计游戏天知道我是多么想用可爱的美少女作为素材的,但是太贵了买不起啊(虽然淘宝有盗版的)。没办法,选个人物,emmmm,免费的基本上都有点歪瓜裂枣,没办法,这个还可以:下载然后导入。我们先来看看一些简单的三维物体:在图上分别按下鼠标 左 中 右 键就可以分别移动物体视野了。我们把自己的素材拖动到这里:注意调整一下方位,就可以显示:注意在asset里点击物体以后,这里有一些信息:以后用到..

2020-06-22 15:10:42

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 分享精英
    分享精英
    成功上传11个资源即可获取