平面阴影投射矩阵的推导
摘要:【平面阴影投射矩阵的推导】 参考:http://blog.csdn.net/augusdi/article/details/23768869
阅读全文
如何降低Unity程序的Drawcall
摘要:【如何降低Unity程序的Drawcall】 Unity can combine a number of objects at runtime and draws them together with a single draw call. This operation is called “bat
阅读全文
NormalMap & CubeMap
摘要:【NormalMap & CubeMap】 有时候我们需要CubeMap的环境反射也需要有凹凸信息,此时需要装将NormalMap与CubeMap结合。 因为要使用NormalMap,使用Property定义中必须有定义NormalMap: By using the INTERNAL_DA...
阅读全文
Specular Mask Texture
摘要:【Specular Mask Texture】 Specular Texture是一个Mask纹理,通过Mask纹理的texel可以控制每个像素的纹理。 在属性中添加Specular Mask Texture纹理。 在Surf函数中修改Mask: 下图是最后的结果:
阅读全文
built-in SpecularType of Unity
摘要:【built-in SpecularType of Unity】1、声明变量。 注意并没有在Shader中声明_SpecColor,因为Lighting.cginc中已经帮我们声明。2、声明使用BlinnPhong光照模型。 3、最后将_SpecPower和Gloss给赋值。 Sp...
阅读全文
Creating Procedural Textures
摘要:【Creating Procedural Textures】 由程序主生贴图,然后设置给Material。首先定义需要的数据: 在Start方法中完成初始化,注意设置的是_MainTex。 实现GenerateParabola方法,算的是到中点的距离除以半径的百分比: 【How it...
阅读全文
NormalMapping
摘要:【NormalMapping】 法线贴图内的数据是法线,高度贴图内的数据是高度,不是一个东西。在ShaderLab中,UnpackNormal()分析的是法线贴图(注意不是高度贴图)。 可以看到,在GLES环境下及Mobile环境下,normal中存储的只是0-1的值。而UnpackNorm...
阅读全文
使用BlendingTexture实现简单的Terrain
摘要:【使用BlendingTexture实现简单的Terrain】 BlendingTexture,就是一张纹理,纹理内存储的数据用于其它去处的Alpha通道value。例如以下四张图需要混合在Terrain表面: 我们可以将四张alpha灰度图组织成一张RGBA图: 为了完成混合纹理功能...
阅读全文
UV-Sprite动画
摘要:【UV-Sprite动画】 下文以单行Sprite纹理作为动画贴图。首先需要输入纹理宽度、Sprint数量、速度: 计算每个Sprite的像素宽与UV宽: 根据_Time,计算当前显示第几个Sprite: 最后,就是根据上述信息修改原有UV了。 UV-Sprite动画把计算完全...
阅读全文
UV动画
摘要:【UV动画】 UV-Animatinoallows you to create effects such as waterfalls, rivers, lava flows, and so on. 首先,添加x、y速度属性。 还需要引用_MainTex的uv,如下: 使用内置的_...
阅读全文
使用RampTexture实现BRDF效果
摘要:【使用RampTexture实现BRDF效果】 BRDF stands for bidirectional reflectance distribution function. While that is a mouthful, it simply means the way in which l...
阅读全文
使用RampTexture来控制diffuse shading
摘要:【RampTexture】 RampTexture(渐变纹理),可以是1D/2D纹理. This allows you to accentuate the surface's colors to fake the effects of more bounce light or a more ad...
阅读全文
Half Lambert
摘要:【Half Lambert】 Half Lambert was a technique created by Valve as a way of getting the lighting to show the surface of an object in low-light areas. It
阅读全文
雾化
摘要:【雾化】 雾浓度在[0,1]间取值,控制雾化程度。 和光的衰减一样,通过把雾分为3段进行处理,当距离小于D_min时,雾系数为0,当距离大于D_max时,雾系数为1,在2者中间时,则进行插值。 雾的浓度即是插值得到的这个系数[0,1]。公式如下: C_fogged = C_lit + f...
阅读全文
中点画圆算法
摘要:【中点画圆算法】 此算是一种圆的光栅化算法。定义以下函数: 通过上述函数,可以得到点(x,y)与半径为r的圆的关系: 已知点(Xk,Yk),我们需要知道(Xk+1,Yk)、(Xk+1,Yk-1)哪一个更接近圆。决策方程如下: 如果Pk小于0,那么中点位于圆内,扫描线Yk上的像...
阅读全文
Bresenham画线算法
摘要:【Bresenham画线算法】 Bresenham是一种光栅化算法。不仅可以用于画线,也可以用用画圆及其它曲线。 通过lower与upper的差,可以知道哪一个点更接近线段: 参考:《计算机图形学》3.5.3 Bresenham画线算法
阅读全文
DDA算法
摘要:【DDA算法】 Digital Differential Analyzer,DDA算法是一种线段扫描转换算法。(线段光栅化算法) DDA算法优缺点: 1、消除了直线方程中的乘法计算,而在x、y方向使用合适的增量。 2、取整操作耗时。参考:《计算机图形学》3.5.2 DDA算法
阅读全文
Lambert模型
摘要:【Lambert模型】漫反射光的强度近似地服从于Lambert定律,即漫反射光的光强仅与入射光的方向和反射点处表面法向夹角的余弦成正比。 由此可以构造出Lambert漫反射模型:Idiffuse =Id Kd cosθIdiffuse表示物体表面某点的漫反射光强Id为点光源,Kd(0<Kd<1)表示...
阅读全文
ShadowVolume
摘要:【ShadowVolume】 1、z-pass 算法。 z-pass 是 shadow volume 一开始的标准算法,用来确定某一个象素是否处于阴影当中。其原理是: Pass1:enable z-buffer write ,渲染整个场景,得到关于所有物体的 depth map 。注意这里的 dep
阅读全文
Phong Shading
摘要:【Phong Shading】 The most serious problem with Gouraud shading occurs when specular highlights are found in the middle of a large polygon. Since these...
阅读全文