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

有人情味的网站公司网络推广方法

有人情味的网站,公司网络推广方法,重庆装修公司排行榜一览表,澳门网站后缀在Unity前向渲染路径中有3种处理光照的方式:逐顶点,逐像素处理,球谐函数。 前向渲染 前向渲染也叫正向渲染,它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体&…

在Unity前向渲染路径中有3种处理光照的方式:逐顶点,逐像素处理,球谐函数。

前向渲染

前向渲染也叫正向渲染,它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常容易理解,也很容易实现.
当光源设置为Important时,是逐像素光源,最重要的平行光是逐像素光源,一个场景中逐像素光源的数一般可以设置。在Project Settings里面可以进行设置
在这里插入图片描述
当光源为auto的时候,如果没有逐像素光源的数量没有达到Pixel Light Count的限制,此时光源类型就是逐像素光源. 个数超过pixel light count ,那么按光源对物体影响重要程度排序后,前pixel light count个数的光源为逐像素光源。一般情况下,unity默认要求逐顶点光源不超过4个,超过的按SH光源处理.

前向渲染有两种: Base PassAdditional Pass
Base Pass可实现的光照效果有:平行光,逐顶点光源,SH光源处理,阴影,光照纹理,环境光,自发光
Additional Pass可实现的光照有:非平行光的逐像素光源。
此外我们通常要在Additional Pass中开启混合模式,如果不开启就会替换之前的渲染。通常使用Blend One One.

前向渲染一般会定义一个Base Pass以及一个Additional Pass一个Base Pass仅会执行一次,而一个Additional Pass会根据影响该物体的其他逐像素光源数目被多次调用,即每个逐像素光源会执行一次Additional Pass.

同时注意:ForwardAdd这个Pass需要和ForwardBase一起使用,在新版本里面,如果没有ForwardBase,渲染会有问题。
下面是一个实现前向渲染的Shader:

Shader "Forward"
{Properties{_Diffuse("Diffuse",Color) = (1,1,1,1)_Specular("Specular",Color) = (1,1,1,1)_Gloss("Gloss",Range(8.0,256)) = 8.0}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{Tags{"LightMode" = "ForwardBase"}CGPROGRAM#pragma multi_compile_fwdbase #pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"fixed4 _Diffuse;fixed4 _Specular;fixed _Gloss;struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal:NORMAL;};struct v2f{float4 vertex : SV_POSITION;float3 worldNormal : TEXCOORD0;float3 worldPos:TEXCOORD1;float3 vertexLight : TEXCOORD2;};sampler2D _MainTex;float4 _MainTex_ST;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;#ifdef LIGHTMAP_OFFfloat shLight = ShadeSH9(float4(v.normal,1.0));o.vertexLight = shLight;#ifdef VERTEXLIGHT_ONfloat3 vertexLight = Shade4PointLights(unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0,unity_LightColor[0].rgb,unity_LightColor[1].rgb,unity_LightColor[2].rgb,unity_LightColor[3].rgb,unity_4LightAtten0,o.worldPos,o.worldNormal);o.vertexLight += vertexLight;#endif#endifreturn o;}fixed4 frag (v2f i) : SV_Target{fixed3 worldNormal  = normalize(i.worldNormal);fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;fixed3 halfLambert = dot(worldNormal , worldLightDir) * 0.5 + 0.5;fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * halfLambert;fixed3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));fixed3 halfDir = normalize(worldLightDir + viewDir);fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0,dot(worldNormal,halfDir)),_Gloss);return fixed4(ambient + diffuse + specular + i.vertexLight, 1.0);}ENDCG}Pass{Tags{"LightMode" = "ForwardAdd"}Blend One OneCGPROGRAM#pragma multi_compile_fwdadd#pragma vertex vert#pragma fragment frag#include "Lighting.cginc"#include "AutoLight.cginc"fixed4 _Diffuse;fixed4 _Specular;fixed _Gloss;struct a2v{float4 vertex:POSITION;float3 normal:NORMAL;};struct v2f{float4 pos:SV_POSITION;float3 worldNormal:TEXCOORD0;float3 worldPos: TEXCOORD1;LIGHTING_COORDS(2,3)};v2f vert(a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;TRANSFER_VERTEX_TO_FRAGMENT(o);return o;}fixed4 frag(v2f i):SV_Target{fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 halfLambert = dot(worldNormal,worldLightDir) *0.5 + 0.5;fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb *halfLambert;fixed3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));fixed3 halfDir = normalize(worldLightDir + viewDir);fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0,dot(viewDir,halfDir)),_Gloss);fixed3 atten = LIGHT_ATTENUATION(i);return fixed4((diffuse + specular)*atten,1.0);}ENDCG}}
}

可以看到,我们定义两个Pass通道 一个ForwardBase,一个ForwardAdd.

ForwardBase中,我们主要计算了球谐函数SH、逐顶点光源、平行光。
ForwardAdd中,我们开启了Blend One One主要计算了额外的逐像素光源,并且LIGHTING_COORDS指令定义了对阴影贴图和光照贴图采样所需的参数。
下一步是顶点着色器。光有这些参数还不够,我们还得提供正确的数据。Untiy提供了另一个指令以便在正确的情况下填充正确的数据 TRANSFER_VERTEX_TO_FRAGMENT。这个指令必须在返回 v2f 结构体之前定义。
最后我们使用了LIGHT_ATTENUATION指令对阴影贴图采样并且返回数据来计算.

最后的效果如下:
在这里插入图片描述

http://www.lbrq.cn/news/2662687.html

相关文章:

  • 昆明疫情最新消息今日新增seo也成搜索引擎优化
  • 服装网站欣赏深圳高端网站制作公司
  • 綦江网站建设公司广告接单网站
  • 网站的时间对齐应该怎么做企业网络推广平台
  • 公司如何登录网站做就业登记网站站长
  • 网站的链接优化做销售记住这十句口诀
  • 山东网站开发制作网易疫情实时最新数据
  • 无锡个人网站建设热狗seo外包
  • 网站地址正能量产品营销推广
  • 苏州做管网gis的网站百度上搜索关键词如何在首页
  • 长沙 外贸网站建设公司企业推广网络营销外包服务
  • 网站建设bannerseo专员很难吗
  • 合肥网站建设服务平台网络营销事件
  • ui网站设计模板最近一周新闻大事摘抄2022年
  • 绍兴企业网站推广seo下拉优化
  • 外贸php网站源码seo内容优化心得
  • 青岛网站建设公司怎么选优化网络搜索引擎
  • wordpress收不到网站搜索引擎优化实训心得
  • 怎么做二手房网站站长工具是什么意思
  • 浙江网站建设前十的公司bt磁力
  • 网站怎么备案百度seo关键词排名优化教程
  • 企业网站改版建议百度手机版网址
  • 电商行业网站建设及维护城市更新论坛破圈
  • 张店政府网站建设哪家好360优化大师官方下载最新版
  • phpcms建站教程搜狗搜索引擎推广
  • 提供网站建设小程序制作网络营销管理
  • 怎么看网站有没有做竞价今天高清视频免费播放
  • 响应式网站开发遇到的问题如何开发软件app
  • 网站建设基本范例百度排行榜
  • 北海做网站哪家好外链群发
  • Kotlin初体验
  • Leetcode-19. 删除链表的倒数第 N 个结点
  • cross-env dotenv
  • Vue3环境搭建+Mybatis-plus的使用
  • 【JAVA EE初阶】多线程(进阶)
  • MCU中的晶振(Crystal Oscillator)