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

网站首页模板代码电脑网络

网站首页模板代码,电脑网络,广西建设安全员证查询网站,wordpress挂广告能赚多少——内容源自唐老狮的shader课程 目录 1.光源类型 2.判断光源类型 2.1.在哪判断 2.2.如何判断 3.光照衰减 3.1.基本概念 3.2.unity中的光照衰减 3.3.光源空间变换矩阵 4.点光源衰减计算 5.聚光灯衰减计算 5.1.聚光灯的cookie#xff08;灯光遮罩#xff09; 5.2.聚…——内容源自唐老狮的shader课程 目录 1.光源类型 2.判断光源类型 2.1.在哪判断 2.2.如何判断 3.光照衰减 3.1.基本概念 3.2.unity中的光照衰减 3.3.光源空间变换矩阵 4.点光源衰减计算 5.聚光灯衰减计算 5.1.聚光灯的cookie灯光遮罩 5.2.聚光灯衰减计算 6.应用 7.如有疏漏还请指出 1.光源类型 平行光没有位置没有衰减只有方向颜色强度参与计算 点光源五个属性都需要考虑 聚光灯五个属性都需要考虑并且因为他的范围由Range和Spot Angle共同决定特殊所以需要进行更复杂的运算 面光源在烘培时使用 2.判断光源类型 2.1.在哪判断 我们一般在Additional Pass中判断光源类型以分别处理各部分的逻辑因为不同光源的处理不一样 2.2.如何判断 unity提供了三个宏 _DIRECTIONAL_LIGHT平行光_POINT_LIGHT点光源_SPOT_LIGHT聚光灯 //在CG中使用条件语句来分别处理#if defined(_DIRECTIONAL_LIGHT) 平行光逻辑 #elif defined(_POINT_LIGHT) 点光源逻辑 #elif defined(_SPOT_LIGHT) 聚光灯逻辑 #else 其他逻辑 #endif unity底层会根据该条件编译指令生成多个 Shader Variants着色器变体这些变体共享相同的核心代码但会根据条件选择执行不同的代码块。 Shader Variants是在编写Shader时根据不同的配置如条件编译指令下不同的条件生成的多个版本的Shader 3.光照衰减 3.1.基本概念 通常是指渲染过程中考虑光线在传播过程中的减弱效应。 一般常见的光照衰减计算方式有线性衰减和平方衰减后者更符合现实 3.2.unity中的光照衰减 为了提高性能我们一般不会直接通过数学公式计算衰减而是使用一张纹理作为查找表在片元着色器中计算逐像素光照的衰减。 为此unity准备了一个内置的纹理类型的变量 _LightTexture0unity会在内部计算好相关数据并存储到这个变量中。其上的纹理颜色值表明了光源空间中不同位置的点对应的衰减值。 起点00位置表明和光源重合的点的衰减值 终点11位置表明光源空间中离光源最远的点的衰减值 一般我们会直接从_LightTexture0纹理中进行纹理采样利用其中的UNITY_ATTEN_CHANNE宏来获得衰减值所在的分量即 tex2D(_LightTexture0,对应纹理坐标).UNITY_ATTEN_CHANNEL 要注意的是如果光源存在cookie灯光遮罩那么衰减查找纹理就变成_LightTextureB0 3.3.光源空间变换矩阵 由于我们要从光照纹理中取得对应的衰减数据因此我们需要将顶点坐标从世界空间变换到光源空间然后再去获取衰减数据使用如下公式即可 mul(unity_WorldToLight世界空间下顶点坐标) 4.点光源衰减计算 1.将顶点从世界空间下转换到光源空间并且只取xyz分量也就是说lightCoord是一个float3的变量。需要了解的是unity_WorldToLight计算所得的是一个规范在0~1之间的值这个值可视为与光源的距离 2.利用该光源空间的坐标来计算离光源的距离并利用距离参数从衰减纹理中采样 fixed atten tex2D(_LightTexture0dot(lightCoordlightCoord).xx).UNITY_ATTEN_CHANNEL 纹理坐标使用distance ^ 2是为了符合现实。ligthCoord是光源空间下顶点位置 5.聚光灯衰减计算 5.1.聚光灯的cookie灯光遮罩 unity会默认为聚光灯弄个cookie这玩意主要是用来模拟聚光灯的区域性就像打手电一样 此时_LightTexture0 存储的变为cookie纹理信息_LightTextureB0 存储的才是光照纹理信息也就是说衰减值要从这里面取 5.2.聚光灯衰减计算 1.将顶点从世界空间转换到光源空间并且这里的lightCoord是一个float4变量也就是取了w 2.利用光源空间下的坐标信息与一些数据获取聚光灯的衰减信息公式为好长 fixed atten (lightCoord.z 0) * tex2D(_LightTexture0, lightCoord.xy / lightCoord.w 0.5).w * tex2D(_LightTextureB0, dot(lightCoord, lightCoord).xx).UNITY_ATTEN_CHANNEL 第一行判断物体是不是在聚光灯的背面如果在背面返回值是0即不受聚光灯影响 第二行后半部分就是把xy变到01区间内xy/w能变到-0.5~0.5之间加个0.5就正好然后对遮罩纹理采样获取遮罩衰减值就是那个w。为什么要这么变换可以画个图根据相似三角形推导一下 第三行正常取出基于距离的光照衰减值需要了解的是dot不会计算w 6.应用 1.为BasePass添加编译指令 #pragma multi_compile_fwdbase 为AdditionalPass添加编译指令 #pragma multi_compile_fwdadd 这些编译指令会帮我们编译对应Pass中所有变体并且附加通道的编译指令还可以确保在附加渲染通道中能访问到正确的光照变量 2.在附加通道中加入混合命令 Blend One One即线性简单效果 3.根据条件判断语句基于不同的光照类型计算光的方向和衰减值。方向是因为点光源和聚光灯需要用光源位置减去顶点位置平行光不用 4.计算最终颜色附加通道中的最后颜色不需要再加环境光只需要将满反射颜色和高光反射颜色相加然后乘以衰减值即可 //这是附加通道Pass{Tags { LightMode ForwardAdd }Blend One OneCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdadd#include Lighting.cginc#include UnityCG.cginc#include AutoLight.cgincfixed4 _DiffuseColor;fixed4 _SpecularColor;float _Gloss;struct v2f{float4 pos : SV_POSITION;float3 wNormal : NORMAL;float3 wPos : TEXCOORD0;};v2f vert(appdata_full v){v2f data;data.pos UnityObjectToClipPos(v.vertex);data.wNormal UnityObjectToWorldNormal(v.normal);float3 wPos mul(unity_ObjectToWorld, v.vertex).xyz;data.wPos wPos;return data;}fixed4 frag(v2f f) : SV_TARGET{float3 wNormal normalize(f.wNormal);float3 wLightDir float3(0, 0, 0);#if defined(_DIRECTIONAL_LIGHT)wLightDir normalize(_WorldSpaceLightPos0);#else// 点光源和聚光灯的灯光方向需要用 位置 减去 顶点位置wLightDir normalize(_WorldSpaceLightPos0.xyz - f.wPos);#endiffloat3 wViewDir normalize(_WorldSpaceCameraPos - f.wPos).xyz;float3 halfAngle normalize(wLightDir wViewDir);fixed3 lambertColor _LightColor0.rgb * _DiffuseColor.rgb * max(0, dot(wNormal, wLightDir));fixed3 blinn_PhongColor _LightColor0.rgb * _SpecularColor.rgb * pow(max(0, dot(wNormal, halfAngle)), _Gloss);//这个条件判断不止一种写法还有别的写法#if defined(_DIRECTIONAL_LIGHT)float atten 1;#else#if defined(_POINT_LIGHT)//注意由世界坐标向空间左边转换时将wPos作为四维向量转换并只取xyz因为w没用float3 lightCoord mul(unity_WorldToLight, float4(f.wPos, 1)).xyz;float atten tex2D(_LightTexture0, dot(lightCoord, lightCoord).xx).UNITY_ATTEN_CHANNEL;#elif defined(_SPOT_LIGHT)//这里w就有用了float4 lightCoord mul(unity_WorldToLight, float4(f.wPos, 1));//1.判断能否照到 2.映射到最大平面 3.距离的平方采样 float atten (lightCoord.z 0) * tex2D(_LightTexture0, lightCoord.xy / lightCoord.w 0.5).w * tex2D(_LightTextureB0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL;#elsefloat atten 1;#endif#endif//附加渲染通道中不需要加 环境光颜色原因是再基础通道中就已经计算了//衰减值 乘以 兰伯特光照和布林芳高光的颜色之和fixed3 finalColor (lambertColor blinn_PhongColor) * atten;return fixed4(finalColor, 1);}ENDCG} 多种光源 7.如有疏漏还请指出
http://www.hkea.cn/news/14333189/

相关文章:

  • 做网站平台的营业执照中天建设集团网站
  • 网站建设策划报价响应式网站模板 视差
  • 全媒体门户网站建设方案腾讯云服务器租用费用
  • 火车wordpress高州网站seo
  • 公交公司网站建设的意义网站搭建中企动力第一
  • 餐饮连锁企业网站建设方案用网站源码怎么做网站
  • 西安做网站的公司哪家好wordpress 数据库脚本
  • 焦作网站建设哪家公司好购物网站成功案例
  • 有哪些好的模板网站做网站坚持多少年会有起色
  • 宁波网站建设制作公司排名网站开发成本最低多少钱
  • 网站访问统计js代码设计师网站外网
  • 备案时网站名称可以重复吗绍兴seo排名收费
  • 朝阳住房和城乡建设官方网站wordpress内存缓存
  • 上海网站建设咨询android studio开发app实例
  • 广德网站建设网站开发工具简述
  • 网站建设计划书实验总结要怎样创造网站
  • 建设工程竣工备案网站网站开发公司的销售方式
  • 网站建设带后台带微商城化州网站建设
  • 高度重视机关门户网站建设做网站和app需要多久
  • 装修网站建设优缺点学做ppt的网站有哪些
  • 门户网站建设服务收费农业网站电子商务平台建设方案
  • 东莞网站优化软件wordpress主题模版修改
  • 国内做视频的网站有哪些wordpress页面下
  • 精品网站开发公司wordpress 有评论时邮箱设置
  • 网站建设解决恩问题山西省建设厅招标网站
  • 网站建设推广软文案例做网站下载那个数据库好
  • 做门票的网站中国航天空间站最新消息
  • 中国站长之家哪个公司网站设计好
  • 东台做网站莆田专业建站公司
  • 制作网站的难度长沙网站建设论坛