立方体纹理映射是环境映射的一种实现方法。
环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像渡了层金属一样反射周围的环境。
反射,通过入射光线的方向和表面法线方向来计算反射方向,再利用反射方向对立方体纹理采样。
折射,当光线从一种介质斜射入另一种介质中时,传播方向会发生改变,当给定入射角度时,通过斯涅尔定律来计算反射角
η1sin 01 = η2 sin 02, η1和η2是两个介质的折射率。
菲涅尔反射,当光线照射到物体上时,一部分发生反射,一部分进入物体内部,发生折射或散射。
Schlick菲涅尔近似等式,,v是视角方向,n是表面发现,F0是反射系数
Empricial菲涅尔近似等式,
其中,bias、scale和power是控制项。
渲染目标纹理,把整个三维场景渲染到一个中间缓冲中,即渲染目标纹理,而不是传统的帧缓冲或后备缓冲。
多重给渲染目标,该技术指的是GPU把场景同时渲染到多个渲染目标纹理中,而不再需要为每个渲染目标纹理单独渲染完整的场景。延迟渲染就是使用多重渲染纹理的一个应用。
屏幕后处理效果,渲染完整个场景得到屏幕图像后,再对这个图像进行操作,从而实现屏幕特效。
边缘检测,边缘检测的原理是利用一些边缘检测算子对图像进行卷积。常见的边缘检测算子有,Robert、Prewitt和Sobel。
但是,使用这种方法,边缘信息会收到物体纹理和光照等外界因素影响,得到很多不需要的边缘点。
深度纹理实际上是一张渲染纹理,但其存储的是一个高精度的深度值。
可以使用深度纹理和法线纹理来获取目标边缘
模糊,均值模糊、中值模糊和高斯模糊。
高斯模糊是使用高斯核,进行高斯滤波,从而实现模糊效果。
Bloom效果,模拟真实摄像机的一种图像效果,让画面较亮的区域扩散到周围的区域,造成一种朦胧的效果。
Bloom原理,根据一个阈值提取出图像中的较亮区域,把他们存储在一张渲染纹理中,再利用高斯模糊对这张纹理进行模糊处理,模拟光线扩散的效果,最后将其与原图进行混合,得到最终的效果。
运动模糊,累计缓存和速度缓存。
累计缓存,利用一块累计缓存来混合多张连续的图像,当物体快速移动产生多张图像后,取它们之间的平均值作为最后的运动模糊图像,但是消耗很大,取多张图片,意味着要在一帧里渲染多次场景。
速度缓存,在速度缓存中记录各个像素当前的运动速度,然后利用该值来决定模糊的方向和大小。
速度缓存一种方法是,把场景中所有物体的速度渲染到一张纹理中,但是需要修改场景中所有的Shader代码。
另一种方法,可以利用深度纹理在片元着色器中为每个像素计算其世界空间坐标系下的位置,这是通过使用当前的视角*投影矩阵的逆矩阵对其顶点坐标进行变换得到的。然后根据前一帧和当前帧的位之差,来得到其速度。
雾效,线性、指数、以及指数的平方等计算方式来实现雾效。设置一个雾效系数f,作为混合原始颜色和雾的颜色的混合系数。
f*fogColor + (1-f)*origColor。
卡通渲染,渐变着色+高光(半兰伯特光照)+描边。
渲染轮廓线
1.基于观察角度和表面法线的轮廓线渲染,使用视角方向和表面法线的点成结果来得到轮廓线的信息。
该方法快速简单,但是局限很大,描边效果不尽人意
2.过程式几何轮廓线渲染。利用两个Pass渲染,第一个Pass渲染背面面片,并使其轮廓可见(背面顶点扩张),第二个Pass再渲染正面的面片。
背面定点扩张之前,先对顶点法线的z分量进行处理,使其为定值,然后再把法线归一化后再对顶点进行扩张。否则,对于一些内凹的模型,可能发生背面面片遮挡正面面片的情况。
该方法快速有效,适合表面平滑的模型,不适合立方体这样平整的模型。
3.基于图像处理的轮廓线渲染。卷积处理和法线深度信息处理。
该方法适用任何种类的模型,但是深度和法线变化很小的轮廓无法检测。
4.基于轮廓边检测的轮廓线渲染,先找到精确的轮廓边,然后把模型和轮廓边渲染到纹理中,再使用图像处理的方法识别出轮廓线,并在图像空间下进行风格化渲染。
消融效果,噪声纹理+透明度测试。使用对噪声纹理采样的结果和某个控制消融程度的阈值进行比较,小于阈值,就裁剪掉。
噪声纹理也可以运用在 反射 和 雾效中,让其有不规则的美,如使用在雾效中,雾的不均匀反而更逼真。