带金属光泽的模型shader的实现
转载请标明出处http://www.cnblogs.com/zblade/
最近捣鼓了一下金属光泽的shader的实现,在一些高模展示的时候或者模型的金属部分的表现的时候,我们需要给模型添加一些金属光泽,表现出一个模型某些金属装备上有一定的反光。今天我主要写一种基于贴图实现的金属反光的效果。不过我没有添加最终的效果,大家可以自己理解一下做一些贴图实现各自的模型效果。
Unity5在更新后推出一种基于物理的shader-standard shader,其中给定了一个参数就是metallic 和 smoothness,可以通过添加一个纹理贴图来实现模型的金属表现。大概查看了一下源代码,主要也是对金属光泽纹理贴图的采样,然后分别赋值。主要的操作代码:
half2 MetallicGloss(float2 uv)
{
half2 mg;
#ifdef _METALLICGLOSSMAP
mg = tex2D(_MetallicGlossMap,uv.xy).ra;
#else
mg = half2(_Metallic,_Glossiness);
#endif
return mg }
分析其实现的原理,其实就是如果有贴图,则采样贴图的r通道和alpha通道,如果没有贴图,则根据参数进行赋值。基于standard提供的思路,我提供了一个类似的实现方式:首先让美术提供一个黑白透的贴图,合并在主纹理贴图中(通过合并,可以减少贴图数量),其中的通道值可以用来作为金属光泽的过滤效果。然后让美术提供一个贴图,可以用来实现金属光泽的光照,常见的为圆形光照,所以这儿我就采用的圆形光照来实现。主要的计算是在顶点shader中计算圆形光照的贴图采样坐标,所以我主要给出计算的关键部分即可:
v2f vert(a2v)
{
v2f o = (v2f);
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv = v.texcoord;
//计算球形光源的采样坐标,在观察空间中
half3 viewNormal = mul((float3x3)UNITY_MATRIX_MV,v.normal);
half4 viewPos = mul(UNITY_MATRIX_MV,v.vertex);
half3 projPos = normalize(viewPos.xyz/viewPos.w);
half3 reflectVar = reflect(projPos,viewNormal);
half m = 2.0 * sqrt(reflectVar.x * reflectVar.x + reflectVar.y*reflectVar.y + (reflectVar.x+)*(reflectVar.z + ));
o.sphereUV = fixed2(reflectVar.x/m + 0.5, reflectVar.y/m + 0.5);
} fixed4 frag(v2f i):SV_Target
{
//基本计算
...
half4 mainVar = tex2D(_MainTex,i.uv);
//用主贴图的alpha通道来做金属光泽的处理
half3 specular = tex2D(_SphereTex,i.sphereUV).rgb * mainVar.a *_SpecPower;
//
half3 diffuse = mainVar.rgb * _LightColor.rgb * _MainColor.rgb * max(,dot(v.normal,lightDir)) ;
fixed4 color;
color.rgb = diffuse + specular;
color.a = ;
return color;
}
本文实现的基本思路就是用一个基本的圆形贴图作为金属光泽的光照,其具体的调节做在住贴图的alpha通道中采样,所以关键计算是球形的采样坐标和通道的计算过滤。大家可以测试一下表现效果,基本的金属光泽就是这样,大家有什么反馈可以给我留言,共同讨论成长~
带金属光泽的模型shader的实现的更多相关文章
- 4. 纯 CSS 创作一个金属光泽 3D 按钮特效
原文地址:https://segmentfault.com/a/1190000014599280 HTML代码: <div class="box">BUTTON< ...
- thinkphp3.2.3 无法调用带下划线的模型
thinkphp 3.2.3 如果表名中带有下划线,在分割的时候命名模型类,首字母大写,例如:order_customer_bom 为表名 .模型名为OrderCustomerBomModel 引用的 ...
- 如何用纯 CSS 创作一个金属光泽 3D 按钮特效
效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此 ...
- 前端每日实战:4# 视频演示如何用纯 CSS 创作一个金属光泽 3D 按钮特效
效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此视频是可以 ...
- 硬货 | 手把手带你构建视频分类模型(附Python演练))
译者 | VK 来源 | Analytics Vidhya 概述 了解如何使用计算机视觉和深度学习技术处理视频数据 我们将在Python中构建自己的视频分类模型 这是一个非常实用的视频分类教程,所以准 ...
- 机器学习——打开集成方法的大门,手把手带你实现AdaBoost模型
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第25篇文章,我们一起来聊聊AdaBoost. 我们目前为止已经学过了好几个模型,光决策树的生成算法就有三种.但是我们每 ...
- matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色
一起来学matlab-matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 < ...
- 从3dMax导出供threeJS使用的带动作模型与加载
评论区发现的建议,最近没空测试,先贴这 还有好多人说找不到插件的 https://pan.baidu.com/s/1Q5g0... 密码:b43e . 应该是他们现在只是维护blender,只有这个的 ...
- [Unity] Shader(着色器)输入输出和语义
在Unity5.x后, 已经支持了基于物理的光照模型,也就是常说的次时代引擎所必须具备的功能. 如果在Properties使用2D,CG里要用sampler2D,代表使用的是2维纹理 如果在Prope ...
随机推荐
- paramiko库安装
python的paramiko库用于执行ssh2连接(client和server).安装方式如下: 硬件环境:Raspberry 2B,arm,1GB RAM,16GB TF卡; 系统环境:Linux ...
- sublime text 添加到鼠标右键功能
安装sublime text的同学可能在安装的时候忘了设置sublime text的右键功能.那我们介绍如何添加. 我们要创建一个.reg为后缀的文件sublime_addright.reg.那么…… ...
- ubuntu 下配置Web服务器
ubuntu 下配置Web服务器 1.切换管理员身份 终端/文本界面输入命令: su 根据提示输入密码 注: 如果不能使用su 点击查看如何启用su2.安装MySQL5 apt-get install ...
- RAS 加密 解密
蚂蚁金服电话面试时,问到了RAS加密解密,感觉回答的有点模糊,遂写个例子加深一下印象 package cheng.test.cipher;import java.io.FileInputStream; ...
- ECMAScript 6 笔记(六)
编程风格 1. 块级作用域 (1)let 取代 var (2)全局常量和线程安全 在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量. const优于le ...
- QML Object Attributes QML对象属性
QML Object Attributes Every QML object type has a defined set of attributes. Each instance of an obj ...
- c#类,接口,结构,抽象类介绍 以及抽象和接口的比较
c#中的类是最常见的实际上就是对某种类型的对象定义变量和方法的原型. 结构是值类型,而类是引用类型. 1.与类不同,结构的实例化可以不使用 new 运算符.结构可以声明构造函数,但它们必须带参数. 2 ...
- linux系统盘使用率达到100%的问题查找和解决方法
今天公司云服务器报警系统发来短信,系统磁盘空间不够,登录服务器进行查看,磁盘使用虑达到100%, 感觉比较奇怪,所存的东西并不多,怎么会将磁盘占满,而且数据都是存在数据盘下,通过简单的进行 ...
- CSS3知识点整理(四)----布局样式及其他
包括CSS3多列布局样式.Flexbox伸缩布局.盒子模型等.重点介绍了Flexbox伸缩布局的各种属性用法. 一.多列布局 为了能在Web页面中方便实现类似报纸.杂志那种多列排版的布局,W3C特意给 ...
- springMVC整合Junit4进行单元测试
springMVC整合Junit4进行单元测试 标签: springMVC整合Junit4junit单元测试教程springMVC入门教程 spring(10) 版权声明:本文为博主原创文章,未 ...