zoukankan      html  css  js  c++  java
  • 这几天阅读的shadowgun的几个shader

      直接从阅读时记录的笔记摘抄过来,写的比较随意。

      1.

    MADFINGER-blinking-god-rays
    除了可以用于实现太阳光线效果,还能调整参数让颜色随时间淡入淡出闪烁,能做出想灯光之类的效果

    这个shader的基本算法和MADFINGER-god-rays基本一致(透明度淡入淡出变化和顶点移动计算模型稍微有区别),但加入了颜色随时间闪烁的模型,计算模型有两个,
    一个是大致梯形模型
    float wave= smoothstep(0, _TimeOnDuration * 0.25, fracTime) * (1 - smoothstep(_TimeOnDuration * 0.75, _TimeOnDuration, fracTime));
    熄灭->颜色变强->持续->颜色变弱->熄灭

    另一个是w型的三角函数
    floatnoise = sin(noiseTime) * (0.5f * cos(noiseTime * 0.6366f + 56.7272f) + 0.5f);



    使用哪个取决于_NoiseAmount参数

      2.

    MADFINGER-billboarded-blinking-god-rays
    这个功能除了和MADFINGER-blinking-god-rays 功能一样外,Mesh将被指定为始终面向摄像机的,即Billboard类型
    这里面的billboard算法,还是没看太明白,虽然我看了www.lighthouse3d.com/opengl/billboarding这篇文章,但还是没搞明白这个shader里的算法,暂时只能放在这里,没时间纠结了慢慢理解吧。

      3.

    MADFINGER-cube-env
    支持光照图的环境反射

    这个也比较简单,至于为何要在计算完反射光线后,将x分量区分,还待了解
    o.refl.x = -o.refl.x;

      4.

    MADFINGER-animtexture
    用于以淡入淡出的方式播放纹理tile动画,用于模拟水面等效果。



    假如使用这张纹理,xy方向的tile各为4,那么播放效果为:每行的横向的tile组成一个序列帧动画,播放完后下次随机(其实还是有规律可循,根据时间播放速度有关)找一行动画播放。
    例如:动画帧有(1,2,3,4),(5,6,7,8),(9,10,11,12),(13,14,15,16),如果第一次播放(1,2,3,4),下次可能播放的是(9,10,11,12)或者其他的动画帧,每一帧之间动画都淡入淡出,因为在两帧之间,做了差值。

    tile.xy = float2(itime,floor(itime /_NumTexTiles.x));
    tile.zw= float2(ntime,floor(ntime /_NumTexTiles.x));
    这两句意思是,横向变化的速率是纵向变化的4倍,结果就是一行播放完了再换行

    lerp(tex2D (_MainTex, i.uv.xy),tex2D (_MainTex, i.uv.zw),i.col.a) * i.col;
    这是在两个颜色中间差值(可理解为两个向量之间)

     
  • 相关阅读:
    GCJ 2015-Qualification-A Standing Ovation 难度:0
    CF 103E Buying Sets 最大权闭合子图,匹配 难度:4
    HDU 1560 DNA sequence A* 难度:1
    蓝桥杯练习系统 矩阵翻硬币 大数,牛顿迭代法 难度:2
    Operating System Concepts with java 项目: Shell Unix 和历史特点
    HDU 2181 哈密顿绕行世界问题 dfs 难度:1
    HDU 3533 Escape bfs 难度:1
    HDU 3567 Eight II 打表,康托展开,bfs,g++提交可过c++不可过 难度:3
    POJ 1011 Sticks dfs,剪枝 难度:2
    UVALive 5905 Pool Construction 最小割,s-t割性质 难度:3
  • 原文地址:https://www.cnblogs.com/yaukey/p/3170742.html
Copyright © 2011-2022 走看看