Uniform

【Ray Tracing in One Weekend 超详解】 光线追踪1-5

我只是一个虾纸丫 提交于 2020-04-18 08:22:34
一天一篇,今天来学习第7章 (散射)漫反射材质 Chapter7: Diffuse Materials Preface 从这一章开始,我们将通过光线追踪制作一些逼真的材质。 我们将从漫射(磨砂)材料开始。 先看效果 :    正文 不发光的漫射物体仅仅呈现其周围的颜色,但是它们用它们自己的固有颜色来调和这些色彩。 从漫反射表面反射的光方向是随机的,比如:如果我们将三条光线发送到一个漫反射表面,它们将各自具有不同的随机行为: 引用书上的图:                           diagram 7-1 它们也可能被吸收而不是被反射。 表面越暗,光线越可能被吸收。 (这就是为什么它是黑的!) 任何随机化方向的算法都会产生看起来很粗糙的表面。 最简单的方法之一是理想的漫反射表面。 原文还提到了 Lambertian 发射面 我们来看一下,如何实现上述功能 图说一切:                            diagram 7-2 图解 先简述一下各个原件:左黄球是以eye为中心的一个单位圆,右黄球是一个和左黄球一样的圆,至于怎么生成的,后续说 左黄球上有两个随机点,蓝紫色的s1,红紫色的s2,对应于右黄球上为s1' 和s2' 红色为视线;深绿色为反射线;三个黑球为漫反射球体,黑色只是用颜色来区分各个原件的功能,并不是黑色的漫反射球(画完才发现

【numpy】新版本中numpy(numpy>1.17.0)中的random模块

我怕爱的太早我们不能终老 提交于 2020-04-15 15:28:59
【推荐阅读】微服务还能火多久?>>> numpy是Python中经常要使用的一个库,而其中的random模块经常用来生成一些数组,本文接下来将介绍numpy中random模块的一些使用方法。 首先查看numpy的版本: import numpy numpy. __version__ '1.18.2' numpy获得随机数有两种方式: 结合BitGenerator生成伪随机数 结合Generate从一些统计分布中采样生成伪随机数 BitGenerator:生成随机数的对象。包含32或64位序列的无符号整数 Generator:将从BitGenerator生成的随机数序列转换为遵从特定概率分布(均匀、正态或二项式等)的数字序列的对象。 从Numpy版本1.17.0开始,可以使用许多不同的BitGenerators初始化Generator。 它包含了许多不同的概率分布。 传统的RandomState随机数例程仍然可用,但仅限于单个BitGenerator。为了方便和向后兼容,单个RandomState实例的方法被导入到numpy.random命名空间。 默认情况下,Generator使用PCG64提供的位,该位具有比RandomState中的传统mt19937随机数生成器更好的统计属性。 使用旧的numpy.random.RandomState from numpy import

OpenGL中Uniform Block与Uniform BufferObject的关系

家住魔仙堡 提交于 2020-04-14 01:23:28
【今日推荐】:为什么一到面试就懵逼!>>> UBO( uniform buffer在GLSL中是 只能读不能修改 ) 用来存储Uniform类型变量的缓冲区对象,类似于定义结构体,使用UBO可以实现让Uniform|变量在不同的着色器语言程序中实现共用,可以设置和更新。 可以在不同的着色语言程序中通过更新UBO中的数据实现所有uniform类型变量的更新 。 步骤:1.定义Uniform Block uniform MatrixBlock { mat4 projection; mat4 modelview; } matrices; 关联Uniform Block 与 binding points——2.获得Uniform Block的索引 GLuint glGetUniformBlockIndex​( GLuint program​, const char *uniformBlockName​ ); 关联Uniform Block 与 binding points——3.将Uniform Block的索引值绑顶到binding points void glUniformBlockBinding(GLuint program, GLuint uBlockIndex, GLuint uBlockBinding); 关联 binding points与UBO——4. binding

使用GAN 进行异常检测——anoGAN,TODO,待用于安全分析实验

笑着哭i 提交于 2020-04-11 10:33:47
先说实验成功的代码: git clone https://github.com/tkwoo/anogan-keras.git mkdir weights python main.py --mode train 即可看到效果了! 核心代码:main.py from __future__ import print_function import matplotlib matplotlib.use('Qt5Agg') import os import cv2 import numpy as np import matplotlib.pyplot as plt from keras.datasets import mnist import argparse import anogan os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' parser = argparse.ArgumentParser() parser.add_argument('--img_idx', type=int, default=14) parser.add_argument('--label_idx', type=int, default=7) parser.add_argument('--mode', type=str, default='test', help='train,

Linux性能之CPU优化

廉价感情. 提交于 2020-04-09 18:14:43
CPU优化 我们接下来从应用程序和系统的角度,分别来看看如何才能降低 CPU 使用率,提高 CPU 的并行处理能力。 应用程序优化 首先,从应用程序的角度来说,降低 CPU 使用率的最好方法当然是,排除所有不必要的工作,只保留最核心的逻辑。比如减少循环的层次、减少递归、减少动态内存分配等等。除此之外,应用程序的性能优化也包括很多种方法,我在这里列出了最常见的几种,你可以记下来。 编译器优化:很多编译器都会提供优化选项,适当开启它们,在编译阶段你就可以获得编译器的帮助,来提升性能。比如, gcc 就提供了优化选项 -O2,开启后会自动对应用程序的代码进行优化。 算法优化:使用复杂度更低的算法,可以显著加快处理速度。比如,在数据比较大的情况下,可以用 O(nlogn) 的排序算法(如快排、归并排序等),代替 O(n^2) 的排序算法(如冒泡、插入排序等)。 异步处理:使用异步处理,可以避免程序因为等待某个资源而一直阻塞,从而提升程序的并发处理能力。比如,把轮询替换为事件通知,就可以避免轮询耗费 CPU 的问题。 多线程代替多进程:前面讲过,相对于进程的上下文切换,线程的上下文切换并不切换进程地址空间,因此可以降低上下文切换的成本。 善用缓存:经常访问的数据或者计算过程中的步骤,可以放到内存中缓存起来,这样在下次用时就能直接从内存中获取,加快程序的处理速度。 系统优化 从系统的角度来说

python中有数学功能的函数

ⅰ亾dé卋堺 提交于 2020-04-09 17:42:26
一. 内置数学函数 1.绝对值abs a=-100 a2=abs(a) #求绝对值 print(a2) #100 2.比较大小max,min #比较两个数大小 b=100 #如果前面b>c 返回1 b<c返回-1 相等返回0 c=20 print((b>c)-(b<c)) #1 print(max(b,c)) #100 给定的参数返回最大的值 print(min(b,c)) # 20 给定的参数返回最xiao的值 max,min 3.平方pow #求x的5次方 2^5 print(pow(2,5)) #32 pow()求某某的n次方 4.四舍五入round #四舍五入round(x,[,n]) 返回浮点数x的四舍五入的值 如果给n值 则代表舍入到小 print(round(3.456)) #3 print(round(3.7)) #4 print(round(3.72228,2)) #3.72 后面那个参数表示保留几位 print(round(3.546,1)) #3.5 后面那个参数表示保留几位 round 二 .导入库math 库:封装了一些功能 import math 意思就是导入数学相关的库 math 数学相关的库 import math #意思就是导入数学相关的库 1.向上取整ceil import math #意思就是导入数学相关的库 # 向上取整 print(math

Web页面制作基础

筅森魡賤 提交于 2020-04-06 17:11:00
Web页面制作基础 说明:仅作为学习辅助 那么Web页面制作基础,能让你掌握什么呢? 第一节掌握Web基础知识。 第二节掌握HTML基础知识。 第三节掌握CSS基础知识。 web开发背景 计算机语言的概念 解释和编译 Sublime的介绍 开发者工具介绍 命名规范 命名规范 英文命名 数字不能打头 驼峰命名法 学习前端接触的web基础语言,HTML,CSS,JavaScript Web基础知识 每次15分钟朗读: Internet,中文为因特网,国际互联网。 它是由所有使用公用语言互相通信的计算机连接而组成的全球网络。 WWW是World Wide Web的缩写,中文名万维网。 WWW是Internet的最核心部分。 它是Internet上那些支持WWW服务和HTTP协议的服务器集合。 WWW在使用上分为Web客户端和Web服务端。 用户可以使用Web客户端访问Web服务器上的页面。 Website,中文名为网站,是指在Internet上根据一定的规则,使用HTML等工具制作的用于展示特定内容相关网页的集合。 URL,是Uniform Resource Locator的缩写,中文名为统一资源定位符,俗称网址,它是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。 URL的一般格式: 协议://主机地址(ip地址)+目录路径+参数 常见的协议有:

ML-Agents(五)GridWorld

感情迁移 提交于 2020-04-06 12:57:27
目录 ML-Agents(五)GridWorld Visual Observations Masking Discrete Actions 环境与训练参数 场景基本结构 代码分析 环境初始化代码 Agent脚本 初始化与重置 动作遮罩 Agent动作反馈 FixedUpdate() 手动操作代码 关于GridSetting 关于其他 训练模型 泛化参数配置 开始训练 总结 ML-Agents(五)GridWorld GridWorld这个例子比较有意思,它还是运用了Reinforcement Learning来进行学习的,不同的是它运用了视觉观察值(Visual Observations)来训练agent。 如上图所示,Agent就是蓝色的方块,每次它可以移动一格(上、下、左、右),要求不能碰到红叉,最终到达绿色加号目标。 Visual Observations 先来了解一下视觉观察值是怎么回事。在ml-agents里主要通过 CameraSensor 或 RenderTextureSensor 两种方式来向Agent提供视觉观察。通过这两个组件收集的图像信息输入到agent policy的CNN(卷积神经网络)中,这使得agent可以从观察图像的图像规律中学习。Agent可以同时使用视觉观察值( Visual Observations)和矢量观察值( Vector

ML-Agents(五)GridWorld

▼魔方 西西 提交于 2020-04-06 11:20:46
目录 ML-Agents(五)GridWorld Visual Observations Masking Discrete Actions 环境与训练参数 场景基本结构 代码分析 环境初始化代码 Agent脚本 初始化与重置 动作遮罩 Agent动作反馈 FixedUpdate() 手动操作代码 关于GridSetting 关于其他 训练模型 泛化参数配置 开始训练 总结 ML-Agents(五)GridWorld GridWorld这个例子比较有意思,它还是运用了Reinforcement Learning来进行学习的,不同的是它运用了视觉观察值(Visual Observations)来训练agent。 如上图所示,Agent就是蓝色的方块,每次它可以移动一格(上、下、左、右),要求不能碰到红叉,最终到达绿色加号目标。 Visual Observations 先来了解一下视觉观察值是怎么回事。在ml-agents里主要通过 CameraSensor 或 RenderTextureSensor 两种方式来向Agent提供视觉观察。通过这两个组件收集的图像信息输入到agent policy的CNN(卷积神经网络)中,这使得agent可以从观察图像的图像规律中学习。Agent可以同时使用视觉观察值( Visual Observations)和矢量观察值( Vector

001-webaudio

空扰寡人 提交于 2020-04-06 02:36:47
这是学习Three.js 官方案例系列 001-webaudio - visualizer 体验地址 片元 shader: // tAudioData: 0~64数组,只在 tAudioData[0].a 有数值,该数值表示该通道上的音值大小。 uniform sampler2D tAudioData ; uniform float style ; varying vec2 vUv ; void main ( ) { vec3 backgroundColor = vec3 ( 0.8 , 0.8 , 0.8 ) ; vec3 color = vec3 ( 0.0 , 0.65 , 0.97 ) ; float f = texture2D ( tAudioData , vec2 ( vUv . x , 1.0 ) ) . a ; float i2 = step ( vUv . y , f ) * step ( f - 0.0125 , vUv . y ) ; float i1 = step ( vUv . y , f ) ; float i ; if ( style == 1.0 ) { i = i1 ; } else { i = i2 ; } vec3 tt = mix ( backgroundColor , color , i ) ; gl_FragColor = vec4 (