Unity3D 中的贴花效果

这周研究一下,以前从 Stage3D 时代就想做的效果 -> 贴花

具体是怎样的呢

decay3

就是可以贴合模型全新纹理,差不多是这样
于是我做了个 动态贴花插件,这样美术童鞋在做场景的时候就比较直观咯

decayCircle

具体应用的美术场景,可以看看这个图
decay1

decay2

贴花做法其实就是复制要贴花模型的某一部分三角形,然后绘制新的纹理
decay4

如何截取三角形呢

继续阅读“Unity3D 中的贴花效果”

半色调抖动与近景透明


Dithering4

话说,上个月神秘海域4 出了开发者日志, 其中的半色调近景透明技术让我非常感兴趣, 毕竟非常多游戏要用到这个功能, 比如很多RPG游戏,近景的墙壁如果遮挡住主角,就会半透明。 而且半透明又是很消耗性能的,这篇日志也提到使用半色调技术是因为性能考虑。

开发者日志地址 : http://www.paopaoche.net/tv/99983.html

之前一直没空,在研究了2天半色调技术后,终于渲染出了我的半色调皮卡丘!!
Dithering

之后,上周看 火猫tv 的 dota2 马尼拉比赛直播的时候,发现 dota2的新地图也用到了类似的技术, 如图中的柱子 😀
我想估计这个技术应该会慢慢铺开,不过玩家能不能马上接受这种像素风的半透明效果就另说咯。

Dithering2Dithering3

— 未完待续, 周末有空的话, 会补充 贝尔矩阵的求解过程,可以自己计算任意 偶次方长度的矩阵。

Unity3d ddx ddy 法线

最近摸到一个很神奇的API -> DDX, DDY (DX) 或者 FDX, FDY (Opengl)

ddxddy normal

三角面片这么明显的法线有木有

在Nvidia 文档说, ddx/ddy 是求一个近似偏导函数, 以对齐屏幕分辨率的值进行取值

看了好几遍,不懂,然后仔细一想一阶求导不就是斜率嘛, 那么斜率是什么呢,就是平面向量啊。
于是测试了 ddx(worldSpaceVertex.xyz) ddy(worldSpaceVertex.xyz) 可以求出 ddx[(x,x) – (x+1,x)] , ddy[ (y,y) – (y-y)] 即隔壁像素所在三角形和当前像素的斜率差,或者说当前像素到隔壁像素的斜率

x轴 斜率表示前进方向向量, 和 y 轴斜率表示右手方向向量,就可以求 三角面的法线
normalize(ddx) cross normalize(ddy) = normal;
normal = normalize(normal);

这个时候,如果直接输出fixed4(normal,1.0) 就是这样
ddxddy normal fragment

继续阅读“Unity3d ddx ddy 法线”

Unity3d Compute Shader

=。= 准备开始花1个小时探讨这个复杂的 Compute Shader的, 结果从家里拷贝做的 Demo 在女朋友的小霸王笔记本上运行不起来。。只能明天回家在写了。。

就是这个破显卡 🙁 Intel HD Graphics 3000

—–

I’m back…

话说, Compute Shader 能做什么呢,可以把大量的并行计算丢到GPU去计算,因为GPU并行计算的能力爆表
举例来说呢
1.大规模粒子特效,计算粒子的位置,大小,颜色等等(当然传统粒子也可以做到这点,通过传入时间值和带有时间的公式来计算位置,但是Compute Shader 可以实现带有逻辑更复杂的效果, 而且编码更加简单)
2.烟雾,液体的模拟
3.可以做贪食蛇 =.= 像这样
ComputeSnake

继续阅读“Unity3d Compute Shader”

Unity3D 中的高度雾

fog
图中有2个效果, 分别是 HDR(做法在这里uniy3d-hdr_bloom/, 高度5的白色高度雾
不过除了雾以外,其他都不重要.

unity3d 一直都有一个距离雾,也可以说是深度雾,随着物体的远近慢慢渐变颜色,设置在 Window->Lightning->Fog(Unity 5.x)

这次来实现一个u3d中没有的,从低到高,而不是从远到近的雾效 – 高度雾。

之前做这个效果之前,有查阅些资料,有看到某外国的大大做了个类似的效果,地址在这里 altitude-fog
我们将要做的效果和这个差不多,但是区别在于,老外的做法是需要场景中的每个物体都添加一个雾效材质,这个雾效Shader是判断物件顶点Y轴在世界坐标系中的位置,然后 (FogEnd – 物体Y) / (FogEnd – FogStart) 算出一个在Y轴方向的雾效颜色比例,最后差值一下。

继续阅读“Unity3D 中的高度雾”

Unity3D Geomerty Shader

Geomerty Shader 是 SM4.0 Directx 9.0c 中引用的新技术, 它的位置位于 Vertex Shader 和 Fragment Shader 之间, 可以对一组(多个)顶点进行编程

Geometry Shader 可以自定义输出方式
PointStream
LineStream
TriangleStream
分别是 点,线,面
这样如果想做线框模式渲染,就非常的简单

上个线框模式图
LineStream

继续阅读“Unity3D Geomerty Shader”