当前位置: 首页 > news >正文

企业怎么建设网站首页搜狐综合小时报2022113011

企业怎么建设网站首页,搜狐综合小时报2022113011,做网站推广的方法有哪些,广西卫健委发布疫情最新消息大家好,我是阿赵 之前介绍过各种光照模型的实现方法。那些光照模型的实现虽然有算法上的不同,但基本上都是灯光方向和法线方向的计算得出的明暗结果。 下面介绍一种叫做MatCap的模拟光照效果,这种方式计算非常简单,脱离灯光的计算…

大家好,我是阿赵
之前介绍过各种光照模型的实现方法。那些光照模型的实现虽然有算法上的不同,但基本上都是灯光方向和法线方向的计算得出的明暗结果。
下面介绍一种叫做MatCap的模拟光照效果,这种方式计算非常简单,脱离灯光的计算,并可以实现比较好的高光阴影效果。

一、什么是MatCap

1、MatCap的介绍:

在这里插入图片描述

MatCap是Material Capture的缩写,意思是“材质捕获”。
听名字好像很高端并且深奥,实际上却并不是什么很深奥的东西。
MatCap贴图的样子一般是这样的:
在这里插入图片描述

2、MatCap的实现原理

MatCap实现的原理很简单,把物体的世界空间法线,转换到观察空间,然后用这个值作为UV,采样MatCap贴图。所以,如果当物体是一个球体的时候,它的法线角度应该是刚刚好和MatCap贴图完全一样,所以,如果把MatCap材质赋给一个球体,它应该是会得到和MatCap贴图一样的效果,比如我拿上面那张MatCap贴图放到MatCap材质球里面,会得到这样的效果:
在这里插入图片描述

如果物体不是一个球形,由于各个面的法线变化,所以会得到这样的效果:
在这里插入图片描述

不过如果直接算世界法线转观察空间法线,会存在一个问题,如果物体偏离视窗中心点之后,会在物体边缘出现一些奇怪的颜色
在这里插入图片描述

这是因为我们的MatCap贴图只有中间圆形绘制了光影颜色,在贴图的边缘的颜色是不对的
在这里插入图片描述

在计算观察空间的时候,如果偏离屏幕中心点太多,会不小心采样到了贴图的边缘。
要解决这个问题其实也很简单,给算出来的MatCap的UV用一个变量来控制一下缩放,让UV坐标不要超出一定范围就行了。
在这里插入图片描述

二、MatCap实现的代码

下面是Unity引擎的shader

Shader "AzhaoMatCap"
{Properties{_MainTex ("Texture", 2D) = "white" {}_MatCapTex("MatCapTex", 2D) = "white" {}_MatCapIntensity("MatCapIntensity",Range(0,2)) = 1_MatCapPow("MatCapPow",Range(0,5)) = 1_MatCapUVScale("MatCapUVScale",Range(0,1)) = 1}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{Cull offCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal:NORMAL;};struct v2f{                float4 vertex : SV_POSITION;float2 uv : TEXCOORD0;float3 normal:TEXCOORD1;};sampler2D _MainTex;float4 _MainTex_ST;sampler2D _MatCapTex;float _MatCapIntensity;float _MatCapPow;float _MatCapUVScale;float2 GetMatCapUV(float3 objNormal){float3 normalWorld = mul(unity_ObjectToWorld, objNormal);float3 normalView = mul(UNITY_MATRIX_IT_MV, normalWorld);return normalView.xy*0.5+0.5;}v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);o.normal = v.normal;return o;}float4 frag (v2f i) : SV_Target{// sample the texturefloat4 col = tex2D(_MainTex, i.uv);float2 MatCapUV = GetMatCapUV(i.normal)*_MatCapUVScale;float4 MatCapCol = tex2D(_MatCapTex, MatCapUV)*_MatCapIntensity;MatCapCol = pow(MatCapCol, _MatCapPow);float3 finalCol = col.rgb*MatCapCol.rgb;return float4(finalCol,col.a);}ENDCG}}
}

代码很简单,通过法线方向获取MatCap的UV,都写在GetMatCapUV方法里面了,就2、3行代码而已。
然后我个人习惯,为了控制一个叠加颜色的强度和对比度,我都是先乘再pow。
最后再给了一张MainTex贴图,作为混合固有色的例子。

三、MatCap的优缺点和应用

1、优点

1.比起真实的光照模型,MatCap计算量很少,只是算个UV采样一张贴图就可以了
2.光照效果非常的可控,可以自己绘制喜欢的高光、阴影和补光的效果
在固定摄像机角度和光照方向的情况下,用MatCap模拟物体的材质,通过使用不同的MatCap贴图,可以达到很强的质感

2、缺点

MatCap的缺点也很明显,因为它的光照效果是假的,所以从不同的角度观察物体,它的光照是不会变化的,也不能做到跟随灯光旋转变化而变化。
所以MatCap的效果一般只能用于固定摄像机和灯光角度的情况下。

3、应用

下面换了几张不同的MatCap贴图,可以看出,物体有了非常强的质感。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的shader代码里面,我最后是用乘法来和MainTex颜色叠加,是因为我想MatCap同时产生亮部和暗部的效果。其实我们也可以单纯用MatCap来叠加某个部分的效果,比如,可以改成用加法,然后MatCap贴图只绘制高光部分,其余部分都涂黑。这样我们可以通过MatCap来单纯的叠加高光部分,然后暗部使用烘焙贴图或者顶点颜色来实现,也是可以的。
虽然说MatCap只能用于固定角度,但如果通过贴图遮罩,只限于模型的某些小局部的金属之类强高光的地方显示,其实也能在模型转动或者运动的时候,产生比较不错的质感。
MatCap的其他应用,各位可以再发挥一下想象力。

http://www.hkea.cn/news/756960/

相关文章:

  • 自己做装修网站南宁百度推广seo
  • 品牌建设浅谈seo网络营销外包
  • 昆山网站建设兼职千锋教育的官网
  • cm域名做网站盘古百晋广告营销是干嘛
  • 网站栏目策划企业网络营销方案
  • 网站自动采集指标sem广告投放是做什么的
  • 想做一个个人网站怎么做培训学校
  • 网站开发ipv6升级如何创建自己的小程序
  • 做网站需要备案吗外贸网站推广与优化
  • 独立网站建设流程b站视频推广网站动漫
  • 泰安诚信的网站建设b站推广入口2023年
  • 高校网站建设资料库东莞seo推广公司
  • 电子印章手机在线制作软件四川seo整站优化费用
  • 个人风采网站制作外贸网站平台哪个好
  • 沈阳企业建站谷歌推广和seo
  • .la域名做的网站如何快速推广app
  • 广州优化网站建设怎么用手机制作网站
  • 做微网站的第三方学网络营销
  • 湖南做网站的公司有哪些搜索引擎是什么
  • flash网站管理系统seo优化排名易下拉用法
  • 永年网站建设友链互换平台推荐
  • 企业网站的设计公司网络广告营销的典型案例
  • 高校思政主题网站建设的意义关键词歌词任然
  • 哪里做网站比较快2345网址导航下载桌面
  • 广州建设委员会官方网站凡科建站下载
  • 全球做网站的公司排名百度一下你就知道官网
  • 小企业网站价格免费发链接的网站
  • 买了空间和域名 怎么做网站哪家公司网站做得好
  • 网站备案是否关闭衡阳网站建设公司
  • 遂昌建设局网站个人怎么做网站