Shader 学习笔记 20160618
2016-06-18 11:38
232 查看
星之卡比-机械星球 机械魔方shader思路
CSDN服务器崩了,图片待补。视频如下
http://pan.baidu.com/s/1i4R97gT
图片说明:
a, 一个box, 自己旋转,然后颜色变换,在最右侧有高光, 然后内部有电路一样的东西似乎在流动。
b, 背后有一个动态光flare
c, 背后有一个多个方块fadeinFadeout效果。
思路一:旋转、动态光flare、背后的多方块fadeinFadeout效果都不是问题。难点是中间的那个光不停变换的怎么做。思路一就是我最开始的想法,通过程序做按照时间或者旋转角度作为输入做pixel控制。但是后来一想,这种方法太笨了,coding过于复杂,并且不利于artist调整。
思路二:使用两个差别比较大的Texture配合lerp()函数,然后配合计算时间(或者cube的旋转角度)做输入,计算pixel。这个approach比之前的好一些,但是还是面对需要做两个Texture,调整lerp的工作,最关键是不够直观。
思路三:其实也不算是思路,因为之后我又看到了一个同样的cube,但是是灰色的,从这个cube可以看到它会出现镜面高光(最右面的面)。我一下子想到了!这是一个典型应用了brdf(或者reflectionCube)做到的高光和颜色控制说白了就是通过输入Viewdir和Normal,算出Reflectdir,然后把Reflectdir归一化到一个texture里面去找点(实际上这个点代表的意思就是光源的color和specular)。找完点(找完光)后再和cube本身的Texture相乘。
操作上有两种:
一种是shader里面直接写反射公式,然后去映射lightTextureMap。这个方式好处在于节省材质大小,但是缺点在于不太方便artist灵活调整。
另外一种就是直接使用reflection cube map做反射控制,简单粗暴,又符合人类直观调整。举例来说,用standardShader实现,可以直接挂一个reflection probe,然后reflection probe上面挂一个reflection cube以便模拟光源。而物体本身则可以通过specular和smooth来决定反射效果。缺点是对象多,资源耗费多,特别是cubemap的资源多(不过可以使用mipmap降低分辨率);另外一个缺点就是Cubemap需要仔细调整,因为在cube旋转的时候,如果cubemap的色彩调整不到位,就会让人感觉cubemap是在反射环境,而不是在shining,从这点上看第一种操作就好,因为可以函数控制,搞成非线性的,直接reflection probe cube的方式就是只能线性的。
相关文章推荐
- 反编译ARB program to GLSL shader日记
- 虚幻3引擎
- 基于顶点纹理的无限大海水仿真
- 图形加速卡技术 [专业的基础技术文章]
- 关于VR(主要是虚拟城市场景)的一些想法及实现(可能会连载)
- 编译ics
- 项目中的简单shader
- Simulating Ocean Water
- 在c++中模以”委托“
- 关于NGUI中UITexture贴图自定义的shader文件在UISrollView中不报错的解决方案
- OpenGL&D3D State Machine
- 得到一个 a4e9 bitmap的倒影
- 为什么DirectX 11 在把矩阵(例如View矩阵)传给shader之前要进行转置
- DirectX 8 开发者常见问题集
- error X3025:global variebles are implicitly constant,enable compatibility mode to allow modificatiom
- dx编译shader报错:global variables are implicitly constant, enable compatibility mode to...
- 2016年的游戏引擎设计
- Unity5.0内置Shader解析
- 纹理过滤模式中的Bilinear、Trilinear以及Anistropic Filtering
- Bump Mapping综述