漫反射

URP学习之五--LitShader

99封情书 提交于 2020-03-21 18:33:25
这节我们来看一下URP下的LitShader。LitShader也是基于物理渲染的,很多方法和属性看过默认管线PBR代码的应该都会很熟悉,我们现在再过一遍,加深一下印象,同时疏通一下以前可能没有掌握的地方。 先看Shader的Properties: // Specular vs Metallic workflow [HideInInspector] _WorkflowMode("WorkflowMode", Float) = 1.0 工作流还是Specular和Metallic。说到这两个流程的区别,其实笔者认为他们只是在不同输入形式同样的算法下产生同样的结果。所以叫工作流,因为材质需要的贴图产出流程是不一样的。但是不同输入的形式其实决定了可控制参数的多少和基于物理自定义效果的程度。 首先看看Metallic Workflow:Metallic工作流的输入是五张贴图(当然并不是每张贴图都是必须的),分别是主纹理、法线、环境遮蔽、金属度、自发光。 对比一下Specular Workflow:Specular工作流输入的是还是五张贴图:分别是主纹理、法线、环境遮蔽、高光贴图、自发光。 通过对比我们发现两个工作流唯一不同的输入就是 金属度贴图vs高光贴图 那么究竟这两种输入方式对于渲染效果有着什么影响呢(其实熟悉PBR的小伙伴都知道,借着URP的机会讲讲PBR~手动滑稽)

光线追踪技术 - 第二章 – Phone光照模型、镜像和阴影

萝らか妹 提交于 2020-01-02 15:44:18
光线追踪技术 - 第二章 – Phone光照模型、镜像和阴影 Raytracing Topics & Techniques - Part 2 - Phong, Mirrors and Shadows 原作者:Jacco Bikker 原文地址: http://www.flipcode.com/archives/Raytracing_Topics_Techniques-Part_2_Phong_Mirrors_and_Shadows.shtml 翻译日期:2012年5月24日 引言 在第一章中,我介绍了光线追踪的基础知识:从摄像机发射一系列穿过屏幕到达场景的射线,找出每条射线最近的交点,然后用交点的法线点乘指向光源的向量得出一个简单的漫反射阴影。 在第二章中,我将介绍Phone先生,他的卫生间的镜子和他的背光面:) 主射线 VS 二级射线 考虑下面的这张图: 图一:主射线 这张图展示了第一章中的简单光线跟踪器的射线发射到场景中的情形。一条射线可以与光源或一个物体碰撞,或者什么都没有碰到。这些射线没有反射和折射,它们被称为“主射线”。 除主射线外,你可以使用“二级射线”。下面图片展示了此种情况: 图2:各种各样的二级射线 图中蓝色的线是反射光线。对于反射来说,它简单的从一个平面弹回来。稍后会介绍如何计算它。 绿色的线是折射光线。它比反射光线要难计算一些,但也是可以计算的

漫反射式光电开关

懵懂的女人 提交于 2019-12-11 07:38:19
光电开关是光电接近开关的简称,它是利用被检测物对光束的遮挡或反射,由同步回路接通电路,从而检测物体的有无。物体不限于金属,所有能反射光线(或者对光线有遮挡作用)的物体均可以被检测。光电开关将输入电流在发射器上转换为光信号射出,接收器再根据接收到的光线的强弱或有无对目标物体进行探测。安防系统中常见的光电开关烟雾报警器,工业中经常用它来计数机械臂的运动次数。 光电开关正负极给电,输出端out也带电。 光电开关由发射器、接收器和检测电路三部分组成;内有光敏三极管、发光二极管等。 工作原理: 利用光学元件,在传播媒介中间使光束发生变化;利用光束来反射物体;使光束发射经过长距离后瞬间返回。光电开关是由发射器、接收器和检测电路三部分组成。发射器对准目标发射光束,发射的光束一般来源于发光二极管(LED)和激光二极管。光束不间断地发射,或者改变脉冲宽度。受脉冲调制的光束辐射强度在发射中经过多次选择,朝着目标不间接地运行。接收器有光电二极管或光电三极管组成。在接收器的前面,装有光学元件如透镜和光圈等。在其后面的是检测电路,它能滤出有效信号和应用该信号。 来源: CSDN 作者: 保持微笑N 链接: https://blog.csdn.net/weixin_44207534/article/details/103464474

全息投影必须要有全息介质吗?

匿名 (未验证) 提交于 2019-12-03 00:22:01
既然是投影,自然是需要一块幕布的,因为投影最起码的光学基础就是漫反射。目前的全息投影会用水幕、烟雾、半透磨、特殊玻璃、塑料,甚至是旋转的叶片等作为幕布。这些材料,都有一个特点,那就是在弱光下可以达到接近透明的状态,在强光下又可漫反射呈像。这原理类似拍摄时吊钢丝,一定的光环境下能达到隐形状态。 其实正是因为你看不到幕布,才误以为幕布上的虚像是真实存在的。 文章来源: 全息投影必须要有全息介质吗?

WebGL简易教程(十):光照

蓝咒 提交于 2019-12-01 07:20:00
目录 1. 概述 2. 原理 2.1. 光源类型 2.2. 反射类型 2.2.1. 环境反射(enviroment/ambient reflection) 2.2.2. 漫反射(diffuse reflection) 2.2.3. 综合 3. 实例 3.1. 具体代码 3.2. 改动详解 3.2.1. 设置日照 3.2.2. 着色器光照设置 4. 结果 5. 参考 1. 概述 在上一篇教程 《WebGL简易教程(九):综合实例:地形的绘制》 中,实现了对一个地形场景的渲染。在这篇教程中,就给这个地形场景加上光照,让其更加真实,立体感更强。 2. 原理 2.1. 光源类型 在现实中,即使是一个纯白色的物体,你也能很容易识别物体的轮廓。事实上,这是因为光照的产生的阴暗差异给了其立体感。类似于现实,WebGL有三种基本类型的光: 点光源光:一个点向周围发出的光,如灯泡、火焰等。定义一个点光源光需要光源的位置、光线方向以及颜色。根据照射点的位置不同,光线的方向也不同。 平行光:平行光可以看成是无限远处的光源发出的光,如太阳光。因为离光源的位置特别远,所以到达被照物体时可以认为光线是平行的。只需要用一个方向和颜色来定义即可。 环境光:环境光也就是间接光,指的是那些光源发出后,经过其他物体各种发射,然后照到物体表面上的光线。比如说夜间打开冰箱的门,这个厨房产生的亮光。因为经过多次反射后

OpenGL光照2:材质和光照贴图

不羁岁月 提交于 2019-11-27 13:31:28
本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 材质 在现实世界里,每个物体会对光产生不同的反应,钢看起来通常会比陶瓷花瓶更闪闪发光,木头箱子也不会像钢制箱子那样对光产生很强的反射 每个物体对镜面高光也有不同的反应,有些物体反射光的时候不会有太多的散射(Scatter),因而产生一个较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点,如果我们想要在OpenGL中模拟多种类型的物体,我们必须为每个物体分别定义一个 材质(Material) 属性 之前我们指定了一个物体和光的颜色,以及结合环境光和镜面强度分量,来定义物体的视觉输出,当描述一个物体的时候,我们可以用这三个分量来定义一个材质颜色(Material Color):环境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)和镜面光照(Specular Lighting)。通过为每个分量指定一个颜色,我们就能够对物体的颜色输出有着精细的控制了 现在,我们再添加 反光度(Shininess) 这个分量到上述的三个颜色中,这就有我们需要的所有材质属性了 //片段着色器 #version 330 core struct

OpenGL光照2:材质

﹥>﹥吖頭↗ 提交于 2019-11-27 11:09:37
本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 前言 在现实世界里,每个物体会对光产生不同的反应,钢看起来通常会比陶瓷花瓶更闪闪发光,木头箱子也不会像钢制箱子那样对光产生很强的反射 每个物体对镜面高光也有不同的反应,有些物体反射光的时候不会有太多的散射(Scatter),因而产生一个较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点,如果我们想要在OpenGL中模拟多种类型的物体,我们必须为每个物体分别定义一个 材质(Material) 属性 之前我们指定了一个物体和光的颜色,以及结合环境光和镜面强度分量,来定义物体的视觉输出,当描述一个物体的时候,我们可以用这三个分量来定义一个材质颜色(Material Color):环境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)和镜面光照(Specular Lighting)。通过为每个分量指定一个颜色,我们就能够对物体的颜色输出有着精细的控制了 现在,我们再添加 反光度(Shininess) 这个分量到上述的三个颜色中,这就有我们需要的所有材质属性了 //片段着色器 #version 330 core struct

OpenGL光照1:颜色和基础光照

这一生的挚爱 提交于 2019-11-27 10:57:19
本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 前言 我们简要提到过该如何在OpenGL中使用颜色(Color),但是我们至今所接触到的都是很浅层的知识,现在我们要更深入地讨论什么是颜色,并且还会为学习光照(Lighting)创建一个场景 颜色 首先你要知道我们一直在使用有限的数值来模拟真实世界中无限的颜色,所以并不是所有现实世界中的颜色都可以用数值来表示的,然而我们仍能通过数值来表现出非常多的颜色,甚至你可能都不会注意到与现实的颜色有任何的差异 颜色可以数字化的由红色(Red)、绿色(Green)和蓝色(Blue)三个分量组成,它们通常被缩写为RGB,仅仅用这三个值就可以组合出任意一种颜色 例如,要获取一个 橙色(Coral) 色的话,我们可以定义这样的一个颜色向量: glm::vec3 coral(1.0f, 0.5f, 0.31f); 我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色,换句话说,那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色 太阳光能被看见的白光其实是由许多不同的颜色组合而成的,看下图

光照着色器---漫反射

丶灬走出姿态 提交于 2019-11-27 03:28:47
漫反射的计算公式: float brigthness=dot(normal,lightDir)------法线和光线方向得到亮度 float3 pixelColor=brightness*lightColor*surfaceColor------表面像素最终的颜色 1、定义漫反射的变量,法线向量 struct appdata { float4 vertex : POSITION; float3 normal:Normal; }; struct v2f { float4 vertex : SV_POSITION; float3 worldNormal : TEXCOORD1; }; 一个是对象空间坐标的法向量,另一个是世界空间坐标的法向量; 2、将对象空间坐标变换到世界空间坐标 v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); float3 worldNormal = UnityObjectToWorldNormal(v.normal); o.worldNormal = worldNormal; return o; } 3、 片元着色器将其进行计算,输出最终的颜色 fixed4 frag (v2f i) : SV_Target { float3 normalDirection =

光照贴图

风格不统一 提交于 2019-11-27 02:41:03
一:啥叫贴图 上一节中,我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。 拓展之前的系统,引入漫反射和镜面光贴图(Map)。这允许我们对物体的漫反射分量(以及间接地对环境光分量,它们几乎总是一样的)和镜面光分量有着更精确的控制。 二: 漫反射贴图 通过某种方式对物体的每个片段单独设置漫反射颜色,根据片段在物体上的位置来获取颜色值。 一个纹理。我们仅仅是对同样的原理使用了不同的名字:其实都是使用一张覆盖物体的图像,让我们能够逐片段索引其独立的颜色值。在光照场景中,它通常叫做一个漫反射贴图(Diffuse Map), 它是一个表现了物体所有的漫反射颜色的纹理图像。 在着色器中使用漫反射贴图的方法和纹理教程中是完全一样的。但这次我们会 将纹理储存为Material结构体中的一个sampler2D 。我们 将之前定义的vec3漫反射颜色向量替换为漫反射贴图。 注:sampler2D是所谓的不透明类型(Opaque Type),也就是说我们不能将它实例化,只能通过uniform来定义它。如果我们使用除uniform以外的方法(比如函数的参数)实例化这个结构体,GLSL会抛出一些奇怪的错误。这同样也适用于任何封装了不透明类型的结构体。 我们也移除了环境光材质颜色向量,因为环境光颜色在几乎所有情况下都等于漫反射颜色