unity Shader之——unity的透明效果
demi 在 周二, 07/28/2020 - 16:54 提交
透明是很常用的一种效果,在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道。在开启透明混合后,当一个物体被渲染到屏幕上,每个片元除了颜色值和深度值以外,还有一个透明度的属性,为1表示该像素是完全不透明的,当其为0表示该像素完全不会显示。
透明是很常用的一种效果,在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道。在开启透明混合后,当一个物体被渲染到屏幕上,每个片元除了颜色值和深度值以外,还有一个透明度的属性,为1表示该像素是完全不透明的,当其为0表示该像素完全不会显示。
为了让场景看起来更加真实,具有深度信息,我们通常希望光源可以把一些物体的阴影投射到其他物体上,下面介绍如何让一个物体向其他物体投射阴影,以及如何让一个物体接收来自其他物体的阴影。
Unity一共支持4种光源类型:平行光、点光源、聚光灯和面光源(area Light)。Shader中最常使用的光源属性有光源的位置、方向(准确的说是到达某点的方向)、颜色、强度以及衰减(具体的说就是,到某点的衰减与该点到光源的距离有关)这5个属性。这些属性和它们的几何定义息息相关。
和渲染优化相关的东西很多,大致可分为网格、着色器材质、光照和阴影。相关的优化技术有相机视椎体剔除、遮挡剔除、基于层的分类剔除与合并绘制调用。LOD降级分为着色器的LOD降级和LodGroup降级。
建模时尽可能减少模型中三角面片的数目,一些对于模型没有影响、或是肉眼非常难察觉到区别的顶点都要尽可能去掉。美术人员往往需要优化网格结构。很多三维软件都有相应的优化选项,可以自动优化网格结构。
相比于动态批处理来说,静态批处理适用于任何大小的几何模型。它的实现原理是,只在运行开始阶段,把需要进行静态批处理的模型合并到一个新的网格结构中,这意味着这些模型不可以在运行时刻被移动。但由于它只需要进行一次合并操作,因此比动态批处理更加高效。
批处理的实现原理就是为了减少每一帧需要的draw call数目。为了把一个对象渲染到屏幕上,CPU需要检查哪些光源影响了该物体,绑定shader并设置它的参数,再把渲染命令发送给GPU。
随着更多的开发功能逐渐以安装包的形式发布,长长的功能包列表可能会让你眼花缭乱。为此,我们在Unity 2020.1中更新了包管理器,更改了功能包列表的展示方式,方便开发者详细了解使用预览包的影响,让开发过程更加可控。
游戏优化不仅是程序员的工作,更需要美工人员在游戏的美术上进行一定的权衡,例如避免使用全屏的屏幕特效,避免使用计算复杂的shader,减少透明混合造成的overdraw等。这是由程序和美工人员等各部分人员共同参与的工作。
传统的渲染方式下所做的光照计算流程称为前向渲染。这是一种十分直接的方式,在顶点着色器中对所有待渲染对象的顶点进行一系列的变换,这些变换通常是将顶点的法线和位置变换到裁剪空间。