首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Unity通用渲染管线(URP)系列(八)——复杂贴图(Masks, Details, and Normals)

(遮罩着色器属性) 2.2 遮罩输入 向LitInput添加一个GetMask函数,该函数仅对遮罩纹理进行采样并返回它。 ? 在继续之前,我们还要整理一下LitInput代码。...(使用中平滑度贴图) 2.5 遮挡 遮罩G通道包含遮挡数据。这个想法是,诸如间隙和孔之类较小凹陷区域部分会被对象其余部分遮盖,但是如果这些特征由纹理表示,它就会被光照忽略。...(使用中遮挡贴图) 绿板某些部分低于其他部分,因此应将其遮挡一点。区域很大,让遮挡贴图处于最大强度以使效果清晰可见,但结果太强又不合理。...我们可以通过对反照率平方根进行插值,然后进行平方来对此进行近似。 ? ? (直接插值,黑暗部分更强了一些) 目前,这些细节已应用到整个表面,但好处是,大多数金色电路均不受影响。...在LitPassFragment中,根据关键字使用切线空间法线仅对插值法线进行归一化。 ? 另外,如果可以,请省略Varyings中切线向量。

4.2K40

进阶渲染系列(七)——三向贴图(任意表面纹理化)【进阶篇完结】

为防止这种情况,请在归一化之前进行钳位。 ? 结果是偏移量越大,混合区域变得越小。要更清楚地看到混合如何变化,请使用权重作为反照率。 ? ?...(其他设置GUI) 6 分离顶部贴图 大部分时候,你不希望外观完全统一。一个很明显情况是地形,其中水平表面(指的是向上而不是向下)可以是草,而其他所有表面都可以是岩石。...(大理石 MOHS贴图) 顶部使用电路(绿色,有点像草),其余部分则使用大理石。 ? (顶部为电路 其他为大理石) 由于着色器尚不了解顶层贴图,因此我们目前只能看到大理石。 ?...因此,不需要检查法线Y分量是否为正,可以省略。 这将生成一个着色器,对Y投影常规贴图或顶部贴图进行采样。在我们案例中,我们在大理石上获得了一个电路层。可以是草,沙或雪。 ?...(指数设置为8) 6.4 稍后展开 尽管着色器编译器使用if-else方法对顶部或常规贴图进行智能采样,但对法线进行拆包并不明智。它不能假定UnpackNormal两种用法可以组合使用。

2.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

基础渲染系列(二十)——视差(基础篇完结)

在这一部分中,我们将添加到目前为止尚不支持标准着色最后一部分,即视差贴图。 本教程使用Unity 2017.1.0f3制作。 ?...(移位由高度调制) 现在低点区域保持不变,而高点区域被拉高。标准着色器可抵消此影响,因此低区域也向下移动,而中间区域仍保持原样。这是通过从原始高度数据中减去½来完成。 ? ?...2 射线步进 这个想法是我们视差效果是通过以高体积拍摄视线并确定其在表面上位置来起作用。它通过在射线进入体积仅对高度图进行一次采样来进行此操作。...2.2 分步穿过高度场 为了找到视线照射到高度场上点,我们必须对视线上多个点进行采样,并找出最终在表面下方位置。第一个采样点在顶部,我们在此处输入高度体积,就像使用偏移方法一样。...与简单偏移方法区别是显而易见。视差效果更加明显。现在,较高区域也正确地阻止了我们对它们后面较低区域观察。而且我们还得到了明显层,总共十层。

3K20

基础渲染系列(十)——更复杂复合材质

(复合材质往往看起来一团糟) 1、遮挡区域 虽然我们可以创建看起来很复杂材质,但这些只是假象,三角形仍然是平坦。法线贴图可以给人深刻印象,但这仅适用于直射光。没有自我遮挡。...较高零件应该在较低区域上投射阴影,但现在不会发生。当法线贴图存在小孔,凹痕或裂缝时,这一点最为明显。 假设有人在向我们电路板射击。但没有穿过电路板,留下了明显凹痕。...下面就是为此调整法线贴图。 ? (凹陷电路法线图) 使用此法线贴图时,电路材质确实确实凹陷了。但是凹痕最深部分和未凹痕表面一样被照亮。凹痕没有任何自我遮挡现象。结果,这些凹痕看起来并不深。...2 细节遮罩 现在电路材质缺乏一些细节。让我们完善这部分。下面是带细节反照率图和法线图。 ? ? (细节反照率和法线贴图) 然后导入,并将纹理设置为淡出mipmap。分配纹理并使用全强度法线。...不必总是将反照率与细节相乘,而是基于蒙版在未修改和修改后反照率之间进行插值。就像所有其他属性一样,将反照率检索放入其自身函数中。 ? 2.3 法线细节 还需要对法线向量进行相同调整。

2.3K30

进阶渲染系列(一)——平坦和线框着色(导数和几何体)

理想情况下,可以使用自定义材质 在一个单一pass下,对任何网格进行平面着色和线框渲染。要创建这种材质,需要一个新着色器。我们将使用“渲染”系列第20部分最终着色器作为基础。...从一个空void函数开始。 ? 仅当目标着色器模型为4.0或更高版本时才支持几何着色器。如果将目标定义得较低,Unity会自动将其增加到该级别,但让我们对其进行明确说明。...(最小重心坐标) 看起来有点像白色网格顶部黑色线框,但是太模糊了。这是因为到最近距离从边零到三角形中心⅓。...(较宽宽度,但有失真现象) 这样可以产生更清晰线条,但也会在三角形拐角附近线条中显示出锯齿失真现象。出现失真的原因是最近边缘在那些区域中突然改变,从而导致不连续导数。...给它一个新DoWireframe方法来为线框创建一个小部分。 ?

2.4K21

Computer Graphics note(4):Shading

3.Phong shading(Shade each pixel) 如第三个球体而言,对每个像素进行着色,求出其法线。...2.Shader 图像管线中存在可编程部分,所以可以人为控制顶点和像色着色部分,而决定顶点和像素如何处理运作代码即为Shader。...这是因为屏幕上远处和近处像素覆盖纹理范围是各不相同,如下图。当覆盖区域过大但仍旧采用像素重心进行应用时就会走样。 ?...(2)凹凸/法线贴图(Bump Mapping) 纹理除了可以定义颜色之外,还可以定义其他不同属性,比如定义在一个表面上任意一点相对于基础表面上沿着法线方向相对高度,从而避免使用大量三角形来定义部分复杂...通过凹凸贴图这样就可以在不改变几何形体情况下来改变着色结果,将像素法线进行(Perturb)扰动(仅仅为了着色计算而使用),也就是相对于平面的高度变化,相当于改变了法线(实际没有改变物体原本法线)

1.6K30

基础渲染系列(六)——凹凸

原始高度图仍然存在,但是Unity内部使用生成贴图。 就像我们将法线可视化为颜色时一样,必须对其进行调整以使其在0–1范围内。因此它们存储为 (N + 1)/2。这表明平坦区域将显示为浅绿色。...(有和没有凹凸) 3 凹凸细节 在第3部分“组合纹理”中,我们创建了具有细节纹理着色器。我们用反照率做到了这一点,但我们也可以用凹凸来做到这一点。...然后,将圆柱体顶部和底部弄皱,直到它们与球体匹配。所以两极都很混乱。Unity默认球体将其与立方顶点布局结合在一起,从而加剧了问题。...因此,我们有足够需要理由去使用切线空间。话虽如此,也有一些方法可以使用切线空间法线,而无需明确提供切线向量。这些技术依赖于着色器派生指令,我们将在以后教程中进行介绍。...由于对所有pass使用相同设置是有意义,因此我们必须在基本pass和附加pass中都定义它。但是我们也可以将其放在着色顶部CGINCLUDE块中。该块内容包含在所有CGPROGRAM块内。

3.6K40

基础渲染系列(九)——复合材质

这使我们无法创建实际上代表不同材质混合复杂材质。例如,这是计算机电路版反照率图和法线图。 ? ? (电路反照率图和法线图) 绿色部分构成电路板底部,而蓝色部分代表光线。这些是非金属。...染色金属较暗,因为其顶部为半透明脏层。 ? (金属贴图) 将此类贴图属性添加到我们着色器里。 ? 我们仍然需要NoScaleOffset属性吗? 这些属性是默认着色器GUI提示。...请记住,着色器编译器会删减重复代码。我们在两个不同函数中对同一纹理进行采样,但是编译后代码将仅对纹理采样一次。我们不必显式缓存这些内容。 实际上,标准着色器具有两个不同平滑度属性。...着色器编译器将检测重复代码并对其进行优化。 ? ? (充分发挥贴图平滑度) 沿着金属条边缘那些正方形失真是什么? 这些失真是由法线贴图DXT5nm纹理压缩引起。...最快方法是复制DoMetallic并进行一些更改。 ? 将其包括在主贴图部分中。 ? ? (检查器里带有自发光贴图和颜色) 4.3 HDR自发光 标准着色器不使用常规颜色进行自发光。

3.3K10

【笔记】《计算机图形学》(11)——纹理映射

这根本上是因为在渲染管线中, 我们先进行了对顶点透视投影后才在光栅化和片元着色器中对顶点进行着色, 也就是说在着色时候目标顶点已经在屏幕空间(标准视体)中了....切线空间使得我们应用法线时要通过法线法线来叠加改变当前要渲染物体表面的法线, 计算光照着色....在过去时候扰动法线是需要着色器动态对凹凸图进行求导得到法线, 现在通常直接保存法线图来使用更为方便. 下图是应用了刚才提到三种技术综合起来对地板渲染效果....我们知道凹凸图中保存了物体深度信息,置换贴图就首先对模型进行了曲面细分, 然后在纹理查找时候, 凹凸图动态改变目标表面的顶点位置, 让顶点按照法线方向进行深度改变, 这个过程由于是在着色时候才进行所以相对来说不会消耗太大性能...如下图中我们看到尽管像素中心对准区域可以正确计算出深度值dmap, 但是像素所覆盖部分区域经过投影变换后得到深度值d却常常无法和dmap完全匹配, 这会导致同样被光照到区域部分被识别为阴影一部分被识别为照明

3.8K41

【笔记】《计算机图形学》(10)——表面着色

之所以这样做是因为当着色是对应物体面片时,明暗在面片上不变因此会显得很粗糙,解决方法就是先计算出三角形顶点上法线,然后三角形内部颜色由三个顶点着色进行重心插值得到 而若模型没有给出三角形顶点法线...,可以使用顶点周围多个三角形面片法线求平均得到,求平均后法线记得要进行单位化。...由于拥有高光物体在高光区域颜色变化比只有朗伯着色情况更剧烈,因此除非采用非常复杂多边形否则需要进行法线插值来让高光自然(不插值方法称为Gouraud着色法)。...在也就是像8.2中提到在面片着色器中让面片每个像素都插值得到自己法线方向然后进行一次Phong着色,这样可以得到非常平滑高光效果 ?...,其实就是通过计算相邻两个面片之间法线角度差异,当差异达到一定程度就认为是表面的转折区域于是绘制出线条。

1.4K20

基础渲染系列(八)——反射

因为我们使用球体法线来采样环境,所以投影不取决于视图方向。这就像在一个球体画了环境一样。 为了产生实际反射,我们必须采取从照相机到表面的方向,并使用表面法线对其进行反射。...使用旋转四边形作为地板,并在其顶部放置了一些立方体柱,在其顶部放置了一些立方体梁。球体悬停在建筑物中心。 ? (一些用来反射物件) 要查看建筑物反射,必须首先捕获它。...反射探针检查器顶部是“Probe Scene Editing Mode”切换按钮。左按钮打开盒投影边界gizmos。 ? ? (盒投影边界) 你可以使用边界中心黄点进行调整。...(第二个反射探针) 这些反射是有道理,但是在两个不同探测区域之间仍然存在突然变清晰过渡。 4.1 插值探针 Unity为着色器提供了两个反射探针数据,因此我们可以在它们之间进行混合。...当目标平台无法处理时,Unity着色器也会禁用混合。这由UNITY_SPECCUBE_BLENDING控制,在可能进行混合时将其定义为1,否则定义为0。

3.7K30

基础渲染系列(四)——光照(Unity)

将此矩阵与顶点着色器中法线相乘,以将其转换为世界空间。并且由于法线是一个向量表示方向,所以需要忽略位置。也就是说,第四齐次坐标必须为零。 ? 或者,我们可以只乘以矩阵3×3部分。...那是因为它们也得到了同比缩放。因此,我们必须在转换后对再其进行归一化。 ? ? (归一化后法线) 虽然我们再次对向量进行了归一化,但是对于没有统一比例尺对象,它们看起来很奇怪。...因此,我们必须在片段着色器中再次归一化法线。 ? ? (重新归一化法线) 尽管这会产生更好结果,但其实不做的话,误差通常也很小。如果你更重视性能,则可以不对片段着色进行重新归一化。...显然,他们认为在针对低性能着色器硬件以及针对PS3时,最好使用Saturate。 ? 它使用半精度数字,但不必担心数值精度。它仅对移动设备有所不同。...但是手动进行操作不方便,特别是如果我们要使用特定反照率色度时。因此,让我们在着色器中执行此操作。 ? ? (不再那么刺眼了) 现在,漫反射和镜面反射贡献已链接在一起。镜面反射越强,扩散部分越暗。

2.5K20

unity3d:Shader知识点,矩阵,函数,坐标转换,Tags,半透明,阴影,深度,亮度,优化

在 Unity 着色器编程中,通过使用 UNITY_MATRIX_MVP 矩阵,可以将顶点位置和法线等数据进行变换,并进行下一步光照、纹理映射等操作,以生成最终渲染结果。...通过使用"UnpackNormal"函数,你可以在着色器中将纹理采样结果转换为法线向量,然后再进行后续计算和操作。...在着色器中,我们可以使用这个旋转矩阵来将法线从切线空间转换到世界空间或屏幕空间,以便进行光照计算和渲染。 切线空间是一种以顶点切线、法线和切线叉积向量为基础局部坐标系,常用于处理带有法线贴图模型。...通过将值传递给frac函数,可以获得该值小数部分,即该值减去其整数部分后剩余部分。...高光、反射等特效:通过提取亮度值,可以对场景中高光部分进行特殊处理,例如增强或减弱高光区域亮度。

19710

ISUX译文 | The PBR Guide基于物理渲染指引(下)

在实现过程中,当着色器监测到金属贴图中白色区域时,它会检查 Base Color 贴图中相应位置来获取金属反射值并进行渲染(如图26)。...在图29中我们可以看到,污垢层遮掩了一部分金属,而污垢实际上是非导体(电介质),如果金属贴图中,对应污垢地方仍是白色,那么渲染时,着色器就会认为这个区域Base Color是金属反射值。...而最好反射处理就是使用AO贴图与屏幕空间反射进行混合。 在Substance PBR着色器中,环境光(由环境贴图生成)会和AO贴图进行叠加。...·制图指引 在SP或SD里,AO贴图既可以从一个模型里烘焙出来,也可以利用内置烘焙工具制作,或从法线贴图里进行转换。...·制图指引 和AO贴图一样,高度贴图在SP和SD中既可以从一个模型里烘焙出来,也可以利用内置烘焙工具从法线贴图里进行转换。在SD中可以使用节点从法线贴图里转换出高度贴图(图47)。

1.3K20

Unity通用渲染管线(URP)系列(三)——方向光(Direct Illumination)

要知道表面的方向,就需要访问表面的法线,该法线是一个单位长度向量,指向远离它方向。该向量是顶点数据部分,就像位置在对象空间中定义一样。...(来自上方漫反射光照) 在球体每一个点上,结果都是是表面法线Y分量,因此它在球体顶部为1,在侧面为零。再下面,结果为负,在底部达到-1,但我们看不到负值。...它与法线向量和向上矢量之间角度余弦匹配。忽略负部分,这在视觉上与指向下方方向光漫反射光相匹配。...这是光方向L 和表面法线N 对齐情况,因此N⋅L = 1。当它们不对齐时,至少有一部分光束会错过表面片段,因此较少能量会影响片段。影响片段能量部分为N⋅L。...在GetBRDF中进行。 ? ? (预乘漫反射) 4.2 预乘切换 将Alpha与diffuse 进行预乘可有效地将对象变成玻璃,而常规Alpha混合可使对象实际上仅部分存在。

5.6K40

Unity 水、流体、波纹基础系列(一)——纹理变形(Texture Distortion )

然后创建一个新标准表面着色器。我们要通过扭曲纹理贴图来模拟流体表面,因此将其命名为DistortionFlow。下面是新着色器,其中删除了所有注释和不需要部分。 ?...(没有压缩) 为什么不使用更高分辨率图? 尽管是可以,但流体贴图通常会覆盖较大区域,因此最终导致有效分辨率很低。只要不使用极端变形,就没有问题。...它是水抽象灰度表示,波浪底部是深色,波浪顶部是浅色。 ? (水纹纹理) 使用此纹理作为我们材质albedo贴图。除此之外,我没有使用跳跃。...(最大jump 速度设置为1) 4.3 导数贴图 尽管生成法线看起来不错,但对法线进行平均并没有多大意义。正确方法是将法线向量转换为高度导数,将它们相加,然后转换回法线向量。...(用导数图代替法线图) 生成表面法线看起来几乎与使用法线贴图时外观相同,但它们计算成本较低。由于我们现在也可以访问高度数据,因此我们也可以使用它为表面着色

4K21

基础渲染系列(十五)——延迟光照

我们可以在此处使用相同方法来重建片段世界位置。 在定向光情况下,将四边形四个顶点光线作为法线矢量提供。因此,我们可以将它们传递给顶点程序并进行插值。 ?...我们在“渲染13,延迟着色器”教程中填充了相同缓冲区。现在我们开始向他们读取。需要反照率,镜面反射色,平滑度和法线。 ?...相反,聚光灯仅影响场景中位于其圆锥体内部分。通常无需为整个图像计算聚光灯照明,取而代之是绘制一个与聚光灯影响区域匹配金字塔。 3.1 绘制金字塔 禁用定向光,改用聚光灯。...因为我们着色仅对定向光源正常工作,所以结果将会是错误。但是它允许你查看金字塔哪些部分被渲染了。 ? (金字塔部分) 事实证明,金字塔被渲染为常规3D对象。...这只是一个改进,因为这是一个连贯分支。除了靠近阴影区域边缘,所有片段都落在阴影区域内部或外部。但这仅在GPU可以利用此优势情况下才重要。

3.3K10

【笔记】《计算机图形学》(4)——光线追踪

因此基础光线追踪包含下面三部分,对每个像素执行一次: 生成视线:计算出每个像素发出视线 视线相交:找出与视线相交最近一个物体和相交面的法线 着色:利用相交交点,法线和光照计算出当前像素所需显示颜色...L式子前半部分仍然是Lambertian明暗部分,后半部分才是Blinn-Phong明暗部分,因为明暗着色就是不断叠加色彩。...,我们平时经常见到可以调整精细度"实时阴影"其实就是射线追踪一种典型应用,它原理类似于在光源处进行一次透视投影或者对全局进行一次平行投影,但是这里视线看到像素区域我们将其正常着色,而由于物体遮挡没能看到像素我们对其进行阴影着色...,这样视线称为阴影射线 前面的明暗着色部分说到没有被直接光照部分我们对其进行环境光着色,这个想法延续下来就是阴影覆盖区域(没有光线照射区域)我们只进行环境光着色,其余区域进行正常着色。...,对于能被照射到物体进行正常着色,否则不进行进一步着色从而呈现阴影效果 ?

2.3K20

基础渲染系列(十六)——静态光照

本文重点: 1、渲染到光照贴图,并从中采样 2、让烘焙光和法线一起正常生效 3、使用光探针组 (温馨提示:本系列知识是循序渐进,推荐第一次阅读同学从第一章看起) 这是关于渲染系列教程第16部分。...否则,需要手动生成新光照贴图。 ? (自动生成光照贴图) 1.3 光照贴图设置 照明窗口包含专门用于灯光映射设置部分。在这里,你可以在质量,尺寸和烘焙时间之间进行权衡。...此过程第一步是对光照贴图进行采样。调整场景中球体,使它们与我们着色器一起使用白色材质。 ?...我们必须对着色进行一些调整,甚至还要添加另一个pass来完全支持光照贴图。 从现在开始,对场景中所有对象使用我们自己着色器。默认材质将不再使用。...(粗糙绿色金属 标准 VS 我们着色器) 这个想法是,非常粗糙金属应该产生比我们目前计算结果更多间接光。标准着色器通过将部分镜面反射颜色添加到反照率来对此进行补偿。

3.6K20

UE(4):PBR材质

另外,除了默认光照模型,UE还提供了针对次表面,植物,布料,眼睛等几个着色模型,这些着色模型都是在默认光照模型上追加了一些属性和方法,实现一些具体效果。...优化 Bent Normal 该函数对法线进行了优化,如果开启了BentNormal,则会用BentNormal取代Normal,上图是Bent Normal示意,不仅考虑当前点法线方向(绿),...试想一下,在平面法线平行,单位法线累加后平均长度依然是1,平面也没有遮盖;而在崎岖下,向量累加后长度会变小,而被遮盖区域也增多,符合预期。 漫反射中支持AOMultiBounce[7]。...需要函数实现,而又包括,,三项,BRDF.ush文件中可以找到这些方法,UE提供了不同函数实现,如上图,粗体对应UE默认方法(个人感觉UE没有提供接口来设置使用不同方法,这部分需要自己来改动)。...总结 本文从光源贡献角度,介绍了UE PBR材质在延迟渲染管线下实现内容。

1.9K30
领券