摘要:
平行光 2D这里主要是指有高度的光,即限定了影子的长度。 Shadow Mesh 限定影子长度生成的Mesh有很多种,可以根据实际情况,选择不同的方案。 平移Sprite顶点(自动生成的Sprite Vertex 或者 Custome Physics Shape 顶点),然后使用凸包形成新的影子外形 阅读全文
摘要:
半影方案 之前用来生成lightMesh的端点扫描的方案并不适合生成ShadowMesh,主要原因是光源体积边缘的点和光源中心点的端点顺序可能不同。虽然端点排序很快,但也不可能每个半影区域都排一次,即使有优化方案,代码的复杂度也会很高。 使用Shader绘制阴影(包括半影)比较简单,而且效率很高。个 阅读全文
摘要:
光与阴影的渲染 光与阴影的渲染需要两类贴图,LightMap(光照贴图) 和 ShadowMap(阴影贴图)。 每个光源都需要渲染一张LightMap、ShadowMap。LightMap 是光渲染结果,ShadowMap 是阴影渲染结果。 两者可以同一次渲染,分开渲染是为了之后做软阴影或半影。 这 阅读全文
摘要:
2D阴影 生成2d阴影一般有两种方案,一种是基于物理射线生成Light Mesh(也有叫ShadowMesh,我觉得叫LightMesh更贴切点)。另一种同unity3D阴影原理,就有是生成ShadowMap。 这篇记录使用射线生成LightMesh的两种方法。 方法1:通过射线扫描可视区域 因为使 阅读全文
摘要:
Mesh Decal 1. 获取与投影框相交的mesh 多种方法如:手动指定、遍历静态物体、碰撞检测、搜索等等。 2. 将Mesh的顶点、法线转换到投影框的模型坐标系内 主要是为裁剪做准备。 var mesh = meshFilter.sharedMesh; // 相交物体的 Mesh List<V 阅读全文
摘要:
2D程序式火焰 火焰一般包括焰心、内焰、外焰,至少要有内焰、外焰的区分,另外有烟,火花,热扭曲之类的效果。 基本原理很简单,就是使用梯度值(一般是uv.y)截取不断上移的噪声值来形成火焰效果。 截取方法可以定值截取,也可以插值截取 1. 定值 参考博客 使用step区分内外焰,效果上类似卡通火焰(t 阅读全文
摘要:
草对象 线性排列 (图片取自gpu gem1) 顶点最少、需要对应纹理、法线等贴图。效果不好。固定视角;远处;或者加上广告牌(billboard)效果(eg:游戏漫漫长夜,如果不绕着草转不一定能发现)可采用。 交叉多边形 顶点少、需要对应纹理、法线等贴图。 自定义模型 顶点多,更灵活,效果更好。 C 阅读全文
摘要:
积雪判定 同一坐标系下法向量与雪的方向点乘,可以控制雪的方向 使用世界坐标系法线的g通道值,无法控制雪方向,省了点乘操作 雪颜色 纹理贴图:通过世界坐标的xz值采集,需要无缝贴图(seamless texture) 半兰伯特(half Lambert)+ 渐变纹理 雪厚度 将顶点依法线向外偏移(非后 阅读全文
摘要:
反射、折射贴图 1. 使用GrabPass 2. 使用相机的Render Texture render texture的高宽比一般与相机viewport的高宽比相同。 扭曲 Distortion 扭曲的方法多种多样,一般原理都是使用时间错位(time offset)获取两次扭曲结果,然后将两者组合起 阅读全文
摘要:
一般3D溶解 边缘溶解 使用噪声贴图或者程序噪声,通过范围0 1的float材质参数在片元着色器进行 clip 操作。 边缘颜色 使用hdr、渐变纹理(RampTexture)、bloom提高效果。 程序噪声参考 "link" 示例源码: Shader "DissolvePack/unlit/Dis 阅读全文