unity shader之——面积光:上篇(线光源)
demi 在 周二, 10/13/2020 - 09:48 提交
面积光是具有形体的一类光源,不像点光源和平行光这类完全抽象化,没有形体的光源。面积光适用于表达柔和的自然光,如通过灯发出的光具有明显的几何形体光源。unity实现了面积光,但仅用于灯光烘焙,而在实时渲染中仍然无法使用面积光。
面积光是具有形体的一类光源,不像点光源和平行光这类完全抽象化,没有形体的光源。面积光适用于表达柔和的自然光,如通过灯发出的光具有明显的几何形体光源。unity实现了面积光,但仅用于灯光烘焙,而在实时渲染中仍然无法使用面积光。
在模拟真实水面过程中,我们往往也会使用噪声纹理。此时噪声纹理通常会用做一个高度图,以不断修改水面的法线方向。为了模拟水不断流动的效果,我们会使用和时间相关的变量来对噪声纹理进行采样,当得到法线信息后,在进行正常的反射+折射计算,得到最后的水面波动效果。
PowerVR开发工程师Dihara Wijetunga简要介绍了Unity高清晰度渲染管线(HDRP)。
很多时候向规则的事物里添加一些“杂乱无章”的效果往往会有意想不到的效果,这些效果的来源就是造成,我们会学习使用噪声来模拟各种看似“神奇”的特效。
本文将给出一些如何规范shader代码的建议。我们一般使用Cg/HLSL来编写shader代码,有三种数据类型,.float、half和fixed。这些精度将决定计算结果的数值范围。
一开始我们在渲染中使用纹理是为了定义一个物体的颜色,但后来发现纹理可以用于存储任何表面属性。一种常见用法就是使用渐变纹理来控制漫反射光照的结果。在计算漫反射光照时,我们都是使用表面法线和光照方向的点积结果与材质的反射率相乘得到表面的漫反射光照。有时我们需要更加灵活的控制光照结果。
纹理的另一种常见的应用就是凹凸映射。凹凸映射的目的是使用一张纹理来修改模型表面的法线,以便为模型提供更多的细节。这种方法不会真的改变模型的顶点位置,只是让模型看起来好像是“凹凸不平”的,但可以从模型的轮廓看出“破绽”。
纹理最初的目的就是使用一张图片来控制模型的外观。使用纹理映射技术可以把一张图黏在模型表面,逐纹素(名字和像素进行区分)地控制模型的颜色。
光照贴图(Lightmap)是一种效果明显的模拟光照的方法,这种光照贴图需要提前渲染,因此可以应用在静态效果图中,属于全局照明技术。但是这种方法一般只适用于静态物体。当然unity做了很多工作,可以让我们混合使用静态光照贴图和动态实时光源,无缝地照亮场景中静态或动态的物体。
本篇在unity实现高光反射。