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

张掖作风建设年网站win8风格网站 源码

张掖作风建设年网站,win8风格网站 源码,梧州论坛手机红豆网,宝塔面板wordpress静态化文章目录 前言一、法线纹理的作用二、为什么法线贴图长这样#xff1f;#xff08;蓝色#xff09;三、法线贴图能使纹理采样时#xff0c;进行偏移采样四、在Shader中使用法线贴图1、在属性面板定义一个变量来接收法线贴图2、在使用前声明 _NormalTex3、在片元着色器中蓝色三、法线贴图能使纹理采样时进行偏移采样四、在Shader中使用法线贴图1、在属性面板定义一个变量来接收法线贴图2、在使用前声明 _NormalTex3、在片元着色器中对法线贴图进行纹理采样使用4、法线贴图采样后用来替换Lermbert光照模型中的法线5、把模型换成方块会发现一个Bug 前言 Unity中Shader法线贴图 一、法线纹理的作用 为了给几何物体添加细节 如果不使用法线贴图我们在做一些凹凸不平的模型时就需要在建模的时候给模型建出凹凸不平的效果。但是这样的话就需要很多的面来达到效果这是极其消耗性能的。 二、为什么法线贴图长这样蓝色 法线贴图是模拟几何表面的空间感的信息即储存的是 xyz 三个轴向上的偏移数据而z轴表示的就是几何表面的高度信息当存储成一张贴图时会将 xyz 变换为 RGB而 xyz 的取值范围是(-1,1)所以需要使用简单的算法 xyz * 0.5 0.5 来变换到 (0,1) 间通常情况下 xyz (0,0,1) 转化为 RGB (0.5,0.5,1) RGB (0.5,0.5,1) 时的颜色如下 三、法线贴图能使纹理采样时进行偏移采样 四、在Shader中使用法线贴图 我们继续使用上一篇文章的Shader来继续测试 Unity中Shader立方体纹理Cubemap 1、在属性面板定义一个变量来接收法线贴图 [Normal]_NormalTex(“NormalTex”,2D) “bump” {} [Normal]专门用来限制纹理类型的当纹理类型不是法线贴图时会给出警告“bump” : 默认的法线贴图颜色 这是我用来测试的法线贴图 2、在使用前声明 _NormalTex sampler2D _NormalTex; 3、在片元着色器中对法线贴图进行纹理采样使用 fixed3 normalTex UnpackNormal(tex2D(_NormalTex,i.uv)); UnpackNormal(half4 XX);该函数用来对法线贴图采样后进行转化处理。 这里输出看一下效果 4、法线贴图采样后用来替换Lermbert光照模型中的法线 Unity中Shader的Lambert光照的实现 //法线纹理 fixed3 normalTex UnpackNormal(tex2D(_NormalTex,i.uv)); //max(0,dot(N,L)) fixed3 N1 normalize(normalTex); fixed3 L _WorldSpaceLightPos0.xyz; return max(0,dot(N1,L)); 看一下现在的效果已经可以受光照的影响了 测试代码 //纹理的多级渐远 Mipmap //纹理的环绕方式 Shader MyShader/P2_1_6 {Properties{_MainTex (Texture, 2D) white {}[KeywordEnum (Repeat,Clamp)]_WrapMode(WrapMode,int) 0[IntRange]_Mipmap (Mipmap,Range(0,10)) 0//法线贴图[Normal]_NormalTex(NormalTex,2D) bump {}//在属性面板定义立方体纹理_CubeMap(CubeMap,Cube) white {}}SubShader{Tags { RenderTypeOpaque }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma shader_feature _WRAPMODE_REPEAT _WRAPMODE_CLAMP#include UnityCG.cgincstruct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;half3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3 localPos : TEXCOORD1;float3 worldPos : TEXCOORD2;half3 worldNormal : NORMAL;};sampler2D _MainTex;float4 _MainTex_ST;half _Mipmap;samplerCUBE _CubeMap;sampler2D _NormalTex;v2f vert (appdata v){v2f o;o.vertex UnityObjectToClipPos(v.vertex);o.uv TRANSFORM_TEX(v.uv, _MainTex);o.localPos v.vertex.xyz;o.worldPos mul(unity_ObjectToWorld,v.vertex);o.worldNormal UnityObjectToWorldNormal(v.normal);return o;}fixed4 frag (v2f i) : SV_Target{//WrapMode#if _WRAPMODE_REPEATi.uv frac(i.uv);#elif _WRAPMODE_CLAMP//法一://i.uv clamp(i.uv,0,1);//法二:i.uv saturate(i.uv);#endiffloat4 uvMipmap fixed4(i.uv,0,_Mipmap);fixed4 col tex2Dlod(_MainTex, uvMipmap);//法线纹理fixed3 normalTex UnpackNormal(tex2D(_NormalTex,i.uv));//max(0,dot(N,L))fixed3 N1 normalize(normalTex);fixed3 L _WorldSpaceLightPos0.xyz;return max(0,dot(N1,L));return fixed4(normalTex,1);//CubeMapfixed4 cubemap texCUBE(_CubeMap,i.localPos);//V,N,Rfixed3 V normalize(i.worldPos - _WorldSpaceCameraPos);fixed3 N normalize(i.worldNormal);fixed3 R reflect(V,N);cubemap texCUBE(_CubeMap,R);return cubemap;return col;}ENDCG}} } 5、把模型换成方块会发现一个Bug 部分面是符合法线贴图的凹凸的但是部分面会与法线贴图的凹凸完全相反 原因 这里采样使用的是世界空间的坐标 而我们纹理在制作时使用的是切线空间下的坐标所以纹理采样会出错。 我们在下篇文章中解决 Unity中Shader法线贴图下理论篇
http://www.yutouwan.com/news/132242/

相关文章:

  • 网站建设平台推广百度做网站审核要多久
  • 方圆网通网站建设公司泉州找工作网站
  • 自己做内部网站陕西印象盒子
  • 重庆孝爱之家网站建设佛山网红打卡景点大全排名榜
  • 石嘴山住房和城乡建设厅网站中建一局招聘网
  • 推拿网站制作手机版网页开发
  • 二手房网站谁做的更好梁山网站开发
  • 推荐做微商海报的网站宝安区网络公司
  • 网站内容怎么修改牡丹江市建设局网站
  • 博达高校网站群建设教程温州微信网站开发
  • 浦项建设(中国)有限公司网站关于二手书的网站开发ppt
  • 计算机应用技术(网站开发)响应式布局代码例子
  • 做电影网站一年赚多少设计师的个人网页设计
  • 网站后台登陆口综合办公系统
  • 网站前期准备阿里巴巴网站是怎么做的
  • 网站服务器cpu占用多少要升级网站设置5个关键词
  • 做网站模板链接放哪里dw网站建设的基本流程
  • 低价网站制作顺德WordPress用来营销
  • 西安做网站推广企业网络营销实施方案
  • 黄骅市网站建设wordpress替换链接
  • 新闻实时报道seo排名优化怎么样
  • 漫画网站开发温州创荣网络科技有限公司
  • php源代码做网站小广告图片素材
  • 网站建设费用计入管理费用浙江平湖建设局网站
  • 网站建设得花多少钱江苏建设集团公司官网
  • 重庆展示型网站制作织梦网站地图底部
  • 如何做电影网站才不侵权关键词点击价格查询
  • 农业门户网站开发万户网络是干嘛的
  • 外贸网站管理系统wordpress电商
  • 建设小说网站用什么软件自建站怎么接入支付