带金属光泽的模型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 ...
随机推荐
- Function.caller、arguments.caller、argument.callee
caller.callee是与javascript函数相关的两个属性,今天来总结下. Function.caller caller是javascript函数的一个属性,它指向调用当前函数的函数,如果函 ...
- 钉钉开发笔记(6)使用Google浏览器做真机页面调试
注: 参考文献:https://developers.google.com/web/ 部分字段为翻译文献,水平有限,如有错误敬请指正 步骤1: 从Windows,Mac或Linux计算机远程调试And ...
- Easy单例模式
在学习单例模式前,不妨问自己几个问题:单例模式是怎么来的,单例模式怎么去用? 单例模式是怎么来的? 这就从设计模式起源开始,他是在实际实践中遇到类似情况可以通用经验所得到的总结,一般在其他模块或者方法 ...
- C# 类型和变量
C# 中的类型有两种:值类型 (value type) 和引用类型 (reference type).值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象.对于引用类型 ...
- java程序测试之字节流
package filestream; import java.io.FileInputStream; import java.io.FileNotFoundException; import jav ...
- kbhit()的三个测试
#include <stdio.h> #include<conio.h> #include<stdlib.h> int main() { ; system(&quo ...
- Linux下ifort的安装记录
首先进入网址https://software.intel.com/en-us/qualify-for-free-software/student 下载Intel Parallel Studio XE ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介
很久之前就打算开始写一下自己的技术博客了,实在抽不出时间所以计划一直搁置了,最近项目进度渐渐缓了下来,不那么忙了,也因此开始筹备自己的博客.说到这次博客的主角,也是无心插柳找到的,来源于两年前自己写的 ...
- 【PHP系列】PHP推荐标准之PSR-4,自动加载器策略
接上回的继续说,上回说到PSR-3日志记录器接口,这回我们来说说PSR的最后一个标准,PSR-4,自动加载器策略. 缘由 自动加载器策略是指,在运行时按需查找PHP类.接口或性状,并将其载入PHP解释 ...
- ABP Zero源码
测试运行地址:http://ghy.demo.aspnetzero.com 账号:admin 密码:123456 需要源码,请加QQ:858-048-581 1.先编译成功,Nuget下载ABP的依 ...