【Unity学习】Unity Shader 实现透明效果(2) 透明度混合
demi 在 周二, 04/30/2019 - 16:57 提交
在没有开启双面渲染的时候,我们常常无法观察到物体内部及背面的形状,这是因为另外一面并没有被渲染而是被默认剔除了。 所以我们需要用到一个新的指令Cull来设置......
在没有开启双面渲染的时候,我们常常无法观察到物体内部及背面的形状,这是因为另外一面并没有被渲染而是被默认剔除了。 所以我们需要用到一个新的指令Cull来设置......
在Unity中,可以使用两种办法来获得透明效果: 1. 使用透明度测试(Alpha Test),但其实得到的并不是真正的半透明效果;2. 使用透明度混合(Alpha Blending),得到的效果是比较真实的。
在C++领域,必看的书是《Effective C++》。而《Effective C#》之于C# ,是类似《Effective C++》之于C++一样的存在。这篇文章,将《Effective C# Second Edition》一书中适用于Unity游戏引擎里使用C#的经验之谈进行了提炼,总结成为22条准则,供各位快速地掌握这本书的知识梗概,在Unity中写出更高质量的C#代码。
在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。
常用的几个内置文件通常都被封装在cginc文件中,通过文件的包含来实现对文件中函数及变量的引用,大家可以到unity的安装目录下找到对应的文件,当然我们也可以写一些自己的cginc文件放置到该目录中,方便自己使用。
CPU在游戏中的主要分工,主要分为两个部分:设置渲染状态和调用DC。 其中设置渲染状态属于比较重要的分工,对于加载到游戏中的资源和对象等,CPU需要计算其顶点相关的矩阵,渲染所用的贴图,渲染所用到的材质和shader,渲染所用到的灯光等。
对于不在摄像机拍摄范围内的对象,对这一对象的绘制是完全没有必要的,所以可以用到遮挡剔除技术:将静态物体勾选static;选择Windows->Occlusion Culling打开遮挡剔除窗口,单机Bake;修改bake界面的参数大小,可以修改Bake的单元的大小......
在Unity的延迟渲染中,每个光源都可以按照逐像素的方式进行处理,但也有缺点:①不支持真正的抗锯齿功能;②不能处理半透明物体;③对显卡有一定要求。
unity会把 CGINCLUDE 和 ENDCG 之间的代码插入到每一个pass中,已达到声明一遍,多次使用的目的。例如,可以在 CGINCLUDE 和 ENDCG 之间 定义多个 顶点和片段方法,在pass里只要写明 #pragma vertex 顶点方法名 #pragma fragment 片段方法名 即可,而不用写具体的函数实现。
我们必须要明白我们是如何看到一个物体的,我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色。换句话说,那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色,所以最终的颜色要由光源的颜色以及物体的颜色来共同决定。