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

四川做网站找谁石家庄公司网络推广

四川做网站找谁,石家庄公司网络推广,微信公众号文章发布,WordPress hitokoto文章目录 前言一、在开始之前做一些准备1、在上一篇文章的场景基础上#xff0c;增加一个Unity默认的球体作为对照组2、创建一个点光源#xff0c;用来看点光源的影响 对 Unity默认的Shader效果 和 我们实现的Shader效果 之间的不同 二、点光源的适配把上一篇文章中 ForwardB… 文章目录 前言一、在开始之前做一些准备1、在上一篇文章的场景基础上增加一个Unity默认的球体作为对照组2、创建一个点光源用来看点光源的影响 对 Unity默认的Shader效果 和 我们实现的Shader效果 之间的不同 二、点光源的适配把上一篇文章中 ForwardBase 的 Pass 复制粘贴 到 与 该Pass平行的程序块然后再对其做之后点光源的灯光适配因为点光源 和 聚光灯效果是在ForwordAdd中实现的按上面步骤修改后小球变的 受点光源的影响 又受 主平行光的影响 ![请添加图片描述](https://img-blog.csdnimg.cn/ffaccd6cfcea4830b694372b23d36a5a.gif) 三、不同灯光类型的支持与区分1、我们加入一个聚光灯2、使用内置的宏定义生成Shader变体来区分是什么类型的光照3、剔除无用的变体节省性能 最终测试代码 前言 Unity中Shader不同灯光类型的支持与区分 一、在开始之前做一些准备 1、在上一篇文章的场景基础上增加一个Unity默认的球体作为对照组 创建前 创建后 2、创建一个点光源用来看点光源的影响 对 Unity默认的Shader效果 和 我们实现的Shader效果 之间的不同 二、点光源的适配 把上一篇文章中 ForwardBase 的 Pass 复制粘贴 到 与 该Pass平行的程序块然后再对其做之后点光源的灯光适配因为点光源 和 聚光灯效果是在ForwordAdd中实现的 Shader MyShader/P1_5_4 {Properties{//光照系数_DiffuseIntensity(Diffuse Intensity,float) 1}SubShader{Tags { RenderTypeOpaque }Pass{Tags{LightModeForwardBase}CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cginc#include Lighting.cgincstruct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;//在应用程序阶段传入到顶点着色器中时加入顶点法向量信息half3 normal:NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;//定义一个3维向量用于接受世界坐标顶点法向量信息half3 worldNormal:TEXCOORD1;};half _DiffuseIntensity;v2f vert (appdata v){v2f o;o.vertex UnityObjectToClipPos(v.vertex);//把顶点法线本地坐标转化为世界坐标o.worldNormal UnityObjectToWorldNormal(v.normal);return o;}fixed4 frag (v2f i) : SV_Target{//Lambert光照模型的结果//Diffuse Ambient Kd * LightColor * max(0,dot(N,L))//使用 Unity 封装的参数 获取环境光色float Ambient unity_AmbientSky;//在属性面板定义一个 可调节的参数 用来作为光照系数调节效果的强弱half Kd _DiffuseIntensity;//获取主平行光的颜色fixed4 LightColor _LightColor0;//获取顶点法线坐标(让其归一化)fixed3 N normalize(i.worldNormal);//获取反射点指向光源的向量(因为内置了获取的方法所以不用向量减法来计算)fixed3 L _WorldSpaceLightPos0;//使用Lambert公式计算出光照//fixed4 Diffuse Ambient (Kd * LightColor * dot(N,L));//因为 当 顶点法线 与 反射点指向光源的向量 垂直 或成钝角时光照效果就该忽略不计//所以这里使用 max(a,b)函数来限制 点积的结果范围fixed4 Diffuse Ambient Kd * LightColor * max(0,dot(N,L));return Diffuse;}ENDCG}Pass{Tags{LightModeForwardAdd}CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cginc#include Lighting.cgincstruct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;//在应用程序阶段传入到顶点着色器中时加入顶点法向量信息half3 normal:NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;//定义一个3维向量用于接受世界坐标顶点法向量信息half3 worldNormal:TEXCOORD1;};half _DiffuseIntensity;v2f vert (appdata v){v2f o;o.vertex UnityObjectToClipPos(v.vertex);//把顶点法线本地坐标转化为世界坐标o.worldNormal UnityObjectToWorldNormal(v.normal);return o;}fixed4 frag (v2f i) : SV_Target{//Lambert光照模型的结果//Diffuse Ambient Kd * LightColor * max(0,dot(N,L))//使用 Unity 封装的参数 获取环境光色float Ambient unity_AmbientSky;//在属性面板定义一个 可调节的参数 用来作为光照系数调节效果的强弱half Kd _DiffuseIntensity;//获取主平行光的颜色fixed4 LightColor _LightColor0;//获取顶点法线坐标(让其归一化)fixed3 N normalize(i.worldNormal);//获取反射点指向光源的向量(因为内置了获取的方法所以不用向量减法来计算)fixed3 L _WorldSpaceLightPos0;//使用Lambert公式计算出光照//fixed4 Diffuse Ambient (Kd * LightColor * dot(N,L));//因为 当 顶点法线 与 反射点指向光源的向量 垂直 或成钝角时光照效果就该忽略不计//所以这里使用 max(a,b)函数来限制 点积的结果范围fixed4 Diffuse Ambient Kd * LightColor * max(0,dot(N,L));return Diffuse;}ENDCG}} } 把复制后的光照模式改为ForwardAdd Tags{“LightMode”“ForwardAdd”} 修改后点光源对我们的小球已经有了初步的影响 但是会发现不受主平行光的影响了所以需要进行修改 并且由于默认的混合模式为 Blend One Zero。 渲染时由于主平行光先渲染点光源后渲染所以颜色缓冲区会被后渲染的点光源覆盖。 所以修改ForwordAdd 的 Pass 中 混合模式为 Blend One One Blend One One 因为计算点光源时不需要考虑环境光所以在Lambert光照模型中删除环境光的影响 在ForwardAdd的Pass中的片元着色器中把最后的输出结果修改为如下 fixed4 Diffuse LightColor * max(0,dot(N,L)); 把片元着色器简化为 fixed4 frag (v2f i) : SV_Target{//获取主平行光的颜色fixed4 LightColor _LightColor0;//获取顶点法线坐标(让其归一化)fixed3 N normalize(i.worldNormal);//获取反射点指向光源的向量(因为内置了获取的方法所以不用向量减法来计算)fixed3 L _WorldSpaceLightPos0;//因为计算点光源时不需要考虑环境光所以在Lambert光照模型中删除环境光的影响fixed4 Diffuse LightColor * max(0,dot(N,L));return Diffuse;}按上面步骤修改后小球变的 受点光源的影响 又受 主平行光的影响 三、不同灯光类型的支持与区分 1、我们加入一个聚光灯 加入聚光灯后会发现小球只渲染了聚光灯的效果 原因是 目前场景只支持一盏逐像素灯在 聚光灯 和 点光源 之间谁的强度大谁就变成逐像素灯 2、使用内置的宏定义生成Shader变体来区分是什么类型的光照 #pragma multi_compile_fwdadd 定义在LightModeForwardAdd的Pass中在此Pass中用来计算其它的逐像素光照.而此指令的作用是一次性生成Unity在ForwardAdd中需要的各种内置宏. DIRECTIONAL DIRECTIONAL_COOKIE POINT POINT_COOKIE SPOT DIRECTIONAL :判断当前灯是否为平行灯.DIRECTIONAL_COOKIE :判断当前灯是否为Cookie平行灯.POINT :判断当前灯是否为点灯.POINT_COOKIE :判断当前灯是否为Cookie点灯.SPOT :判断当前灯是否为聚光灯. 在 ForwardAdd 的 Pass 中加入这条宏 #pragma multi_compile_fwdadd 然后我看可以看见该Shader生成了6个变体 我们在片元着色器中测试使用一下这些变体 1、当为点光源时返回绿色 fixed4 frag (v2f i) : SV_Target{#if POINTreturn fixed4(0,1,0,1);#endif//获取主平行光的颜色fixed4 LightColor _LightColor0;//获取顶点法线坐标(让其归一化)fixed3 N normalize(i.worldNormal);//获取反射点指向光源的向量(因为内置了获取的方法所以不用向量减法来计算)fixed3 L _WorldSpaceLightPos0;//因为计算点光源时不需要考虑环境光所以在Lambert光照模型中删除环境光的影响fixed4 Diffuse LightColor * max(0,dot(N,L));return Diffuse;}2、当为点光源时返回黑色 fixed4 frag (v2f i) : SV_Target{#if POINTreturn fixed4(0,1,0,1);#elif SPOTreturn 0;#endif//获取主平行光的颜色fixed4 LightColor _LightColor0;//获取顶点法线坐标(让其归一化)fixed3 N normalize(i.worldNormal);//获取反射点指向光源的向量(因为内置了获取的方法所以不用向量减法来计算)fixed3 L _WorldSpaceLightPos0;//因为计算点光源时不需要考虑环境光所以在Lambert光照模型中删除环境光的影响fixed4 Diffuse LightColor * max(0,dot(N,L));return Diffuse;}3、剔除无用的变体节省性能 因为Shader变体的数量是一般是倍数增加所以在设计时就要尽量减少Shader的变体数量 Shader变体的数量会直接影响 ShaderLab 的内存打包到手机会影响到 Native 内存 法一手动声明我们需要的变体 #pragma multi_compile POINT SPOT 法二剔除不需要的变体 #pragma skip_variants XXX01 XXX02... 剔除指定的变体可同时剔除多个#pragma skip_variants DIRECTIONAL POINT_COOKIE DIRECTIONAL_COOKIE 效果是一样的 最终测试代码 Shader MyShader/P1_5_4 {Properties{//光照系数_DiffuseIntensity(Diffuse Intensity,float) 1}SubShader{Tags { RenderTypeOpaque }Pass{Tags{LightModeForwardBase}CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cginc#include Lighting.cgincstruct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;//在应用程序阶段传入到顶点着色器中时加入顶点法向量信息half3 normal:NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;//定义一个3维向量用于接受世界坐标顶点法向量信息half3 worldNormal:TEXCOORD1;};half _DiffuseIntensity;v2f vert (appdata v){v2f o;o.vertex UnityObjectToClipPos(v.vertex);//把顶点法线本地坐标转化为世界坐标o.worldNormal UnityObjectToWorldNormal(v.normal);return o;}fixed4 frag (v2f i) : SV_Target{//Lambert光照模型的结果//Diffuse Ambient Kd * LightColor * max(0,dot(N,L))//使用 Unity 封装的参数 获取环境光色float Ambient unity_AmbientSky;//在属性面板定义一个 可调节的参数 用来作为光照系数调节效果的强弱half Kd _DiffuseIntensity;//获取主平行光的颜色fixed4 LightColor _LightColor0;//获取顶点法线坐标(让其归一化)fixed3 N normalize(i.worldNormal);//获取反射点指向光源的向量(因为内置了获取的方法所以不用向量减法来计算)fixed3 L _WorldSpaceLightPos0;//使用Lambert公式计算出光照//fixed4 Diffuse Ambient (Kd * LightColor * dot(N,L));//因为 当 顶点法线 与 反射点指向光源的向量 垂直 或成钝角时光照效果就该忽略不计//所以这里使用 max(a,b)函数来限制 点积的结果范围fixed4 Diffuse Ambient Kd * LightColor * max(0,dot(N,L));return Diffuse;}ENDCG}Pass{Tags{LightModeForwardAdd}Blend One OneCGPROGRAM#pragma vertex vert#pragma fragment frag//加入Unity自带的宏用于区分不同的光照//只声明我们需要的变体//#pragma multi_compile POINT SPOT#pragma multi_compile_fwdadd//剔除我们不需要的变体#pragma skip_variants DIRECTIONAL POINT_COOKIE DIRECTIONAL_COOKIE#include UnityCG.cginc#include Lighting.cgincstruct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;//在应用程序阶段传入到顶点着色器中时加入顶点法向量信息half3 normal:NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;//定义一个3维向量用于接受世界坐标顶点法向量信息half3 worldNormal:TEXCOORD1;};half _DiffuseIntensity;v2f vert (appdata v){v2f o;o.vertex UnityObjectToClipPos(v.vertex);//把顶点法线本地坐标转化为世界坐标o.worldNormal UnityObjectToWorldNormal(v.normal);return o;}fixed4 frag (v2f i) : SV_Target{#if POINTreturn fixed4(0,1,0,1);#elif SPOTreturn 0;#endif//获取主平行光的颜色fixed4 LightColor _LightColor0;//获取顶点法线坐标(让其归一化)fixed3 N normalize(i.worldNormal);//获取反射点指向光源的向量(因为内置了获取的方法所以不用向量减法来计算)fixed3 L _WorldSpaceLightPos0;//因为计算点光源时不需要考虑环境光所以在Lambert光照模型中删除环境光的影响fixed4 Diffuse LightColor * max(0,dot(N,L));return Diffuse;}ENDCG}} }
http://www.pierceye.com/news/761783/

相关文章:

  • wordpress 下载站模板高清免费观看电视网站
  • 网站后期维护怎么做招c1驾驶员300元一天
  • 番禺区移动端网站制作山西省两学一做网站
  • 网上销售 网站建设浙江创都建设有限公司网站
  • 网站商城的公司运营结构html5 app开发工具
  • 酒类网站建设方案案中山网站建设公司排名
  • wordpress怎么做子页面如何刷seo关键词排名
  • 网站怎样做免费优化有效果成都十大好的装修公司
  • 网站外链分析工具新闻发布会主持词
  • 网站开发哪个工具学做网站需要懂什么
  • 一般做推广网站的客户需求仕什么赣州市城乡建设局官方网站
  • 中山网站搜索引擎优化婚庆策划公司的商业模式
  • 百度云主机做网站天津展示型网站建设外包
  • 做公司网站利润营销型企业网站系统模板下载
  • 怎样在绍兴e网做网站衡水网站优化
  • 网站建设现在还有没有市场优秀网站建设报价
  • 兰州网站维护公司网站规划有哪些内容
  • 简单展示网站模板电脑网页打不开
  • 陕西省建设局网站手把手教 个人网站开发
  • 重庆网站制作网站后台上传缩略图
  • 红谷滩园林建设集团有限公司 网站大气网络公司网站模板
  • 淮安市网站东莞关键词排名seo
  • 网站建设制作设计seo优化湖南个人信用信息服务平台
  • 运营网站wordpress改了固定链接
  • 咸阳市住房和城乡建设局网站网站建设外包必须注意几点
  • 沭阳三剑客做网站小熊代刷推广网站
  • 手机网站怎么建设网站快速设计
  • 上海高端网站建设有关网站设计与制作的论文
  • wps2016怎么做网站企业主题展厅设计公司
  • 网页设计与网站建设实训目的wordpress 别名插件