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

全国哪个县网站做的最好免费网站服务器2020

全国哪个县网站做的最好,免费网站服务器2020,快速开发app,wordpress吾爱Unity Shader的学习笔记 第七天 开始Unity Shader的学习之Unity中的基础光照之高光反射光照模型 文章目录 Unity Shader的学习笔记前言一、高光反射光照模型1.逐顶点光照① Properties② 顶点着色器中计算高光specular③ Fallback效果展示 2.逐像素光照① 片元着色器输出结构体…

Unity Shader的学习笔记

第七天 开始Unity Shader的学习之Unity中的基础光照之高光反射光照模型


文章目录

  • Unity Shader的学习笔记
  • 前言
  • 一、高光反射光照模型
    • 1.逐顶点光照
      • ① Properties
      • ② 顶点着色器中计算高光specular
      • ③ Fallback
      • 效果展示
    • 2.逐像素光照
      • ① 片元着色器输出结构体v2f
      • ②高光反射部分计算
      • 效果展示
  • 总结


前言

今天学习漫反射光照模型中的逐顶点光照和逐像素光照,其实今天的大部分代码之前学习过了,主要是对高光反射特有的公式这些进行一个讲解.


一、高光反射光照模型

相比于漫反射光照模型,高光反射的模型只是在器基础上增加了高光的部分,让我们接下来看下面这段代码:

1.逐顶点光照

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unity Shaders Book/Chapter 6/Specular Vertex_Level"
{Properties																①															{_Diffuse ("Diffuse", Color) = (1, 1, 1, 1)_Specular ("Specular", Color) = (1, 1, 1, 1)_Gloss ("Gloss", Range(8.0, 256)) = 20}SubShader{Pass{Tags {"LightMode" = "ForwardBase"}CGPROGRAM#pragma vertex vert;#pragma fragment frag;#include "Lighting.cginc"fixed4 _Diffuse;fixed4 _Specular;float _Gloss;struct a2v{float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f{float4 pos : SV_POSITION;fixed3 color : COLOR;};v2f vert(a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT;fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject));fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLightDir));fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal));fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, v.vertex).xyz);									fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss);o.color = ambient + diffuse + specular;return o;}fixed4 frag(v2f i) : SV_Target{return fixed4(i.color, 1.0);}ENDCG}}Fallback "Specular"}

① Properties

首先为了方便我们在材质面板中控制高光反射属性,于是相比于漫反射,我们声明了_Specular和_Gloss两个属性,分别用于控制高光反射的颜色和高光反射的区域大小.

② 顶点着色器中计算高光specular

fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal));																
fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, v.vertex).xyz);									
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss);

首先我们就需要先摆出来高光反射部分的计算公式了:
高光反射部分的计算公式反射方向的计算公式
因此除了我们已经有了的光照的颜色和高光反射的颜色之外,我们还需要计算视角方向和反射方向,反射方向的公式已经给出来了(Unity本身也提供了reflect来计算反射方向),视角方向可以通过世界空间下摄像机的位置 - 世界空间下的顶点位置来得到,这样每一个变量都有了,直接计算高光反射部分(pow的用法看清楚哈)
计算完成后,将o.color 加上高光反射的部分.

③ Fallback

由于我们是高光反射,因此将Unity Shader的回调Shader设置为Specular.

效果展示

使用逐顶点的方法得到的效果如下:
逐顶点高光反射光照效果
我们会法线这个效果其实是有很大问题的:高光反射部分明显不平滑,这是因为高光反射的部分计算是非线性的,而在顶点着色器中计算光照再插值的过程是线性的,破坏了原计算的非线性关系,就会产生较大的视觉问题,接下来的逐像素高光反射可以解决这个问题

2.逐像素光照

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unity Shaders Book/Chapter 6/Specular Pixed-Level"{Properties{_Diffuse ("Diffuse", color) = (1, 1, 1, 1)_Specular ("Specular", color) = (1, 1, 1, 1)_Gloss ("Gloss", Range(8.0, 256)) = 20}SubShader{pass{Tags {"LightMode" = "ForwardBase"}CGPROGRAM#pragma vertex vert;#pragma fragment frag;#include "Lighting.cginc"fixed4 _Diffuse;fixed4 _Specular;float _Gloss;struct a2v{float4 vertex : POSITION;float3 normal : NORMAL; };struct v2f{float4 pos : SV_POSITION;float3 worldNormal : TEXCOORD0;float3 worldPos : TEXCOORD1;};v2f vert(a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject);o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;return o;}fixed4 frag(v2f i) : SV_Target{fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT;fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLightDir));fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal));fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss);fixed3 color = ambient + diffuse + specular;return fixed4(color, 1.0);}ENDCG}}Fallback "Specular"
}

① 片元着色器输出结构体v2f

因为我们需要在片元着色器中计算高光反射部分,所以我们需要将顶点着色器中计算得到的世界空间下的法线方向和顶点坐标,并且把他们传递给片元着色器.

struct v2f
{float4 pos : SV_POSITION;float3 worldNormal : TEXCOORD0;float3 worldPos : TEXCOORD1;
};

②高光反射部分计算

fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal));
fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss);
fixed3 color = ambient + diffuse + specular;

计算公式我们上面也给出了,唯一不同的是我们使用的顶点坐标和法线方向是顶点着色器传递过来的.

效果展示

逐像素的方式处理的高光反射光照模型
这样我们可以得到更加光滑的高光效果.


总结

经过这几天的学习,我们终于实现了一个完整的Phong光照模型.


文章转载自:

http://0cVQxSMx.swsrb.cn
http://0a3jeE0p.swsrb.cn
http://iQgcVk3n.swsrb.cn
http://vVxeLDNw.swsrb.cn
http://UWnJpuWP.swsrb.cn
http://dtTxtTJf.swsrb.cn
http://nesyYNeB.swsrb.cn
http://LFepy0lB.swsrb.cn
http://AviuEpqQ.swsrb.cn
http://NCeVbigw.swsrb.cn
http://uX4Mcwtf.swsrb.cn
http://kDr0LdIc.swsrb.cn
http://Kha7SVkb.swsrb.cn
http://BmpD2QGQ.swsrb.cn
http://FwVe9rqO.swsrb.cn
http://AXUbuFw3.swsrb.cn
http://h6IUoRdU.swsrb.cn
http://HrqiBAP9.swsrb.cn
http://ulolwAlt.swsrb.cn
http://bXtqM74g.swsrb.cn
http://m90GOHiG.swsrb.cn
http://QfYlGIXx.swsrb.cn
http://qZqgUESU.swsrb.cn
http://pe6sQs8d.swsrb.cn
http://cZUFQ7fM.swsrb.cn
http://GK7Mcx87.swsrb.cn
http://N2x3j5ds.swsrb.cn
http://jmAB7NPp.swsrb.cn
http://60QqUkOK.swsrb.cn
http://SZqCMG6A.swsrb.cn
http://www.dtcms.com/wzjs/705201.html

相关文章:

  • 国外企业网站模板designspiration
  • 湖南响应式网站建设价位平台网站建设ppt
  • 手机可以做3d动漫视频网站买购网十大品牌官网
  • 有哪些网站是封面型青岛外贸网站制作
  • 做民宿注册的网站wordpress默认主题页脚
  • 邢台市做网站电话我的微信公众号
  • 做一个营销型的网站多少钱wordpress文章评论不显示
  • pc网站如何做移动网站郴州有哪些推广平台
  • 网站 例咸阳网站建设费用
  • 重庆建站模板厂家河北农业建设信息网站
  • 软件开网站建设骗术软件下载网站整站源码
  • 宜城网站建设网络推广域名网站怎么打开
  • 如何加强门户网站建设小程序商店多少钱
  • 庆阳做网站的公司设计制作活动内容的原则
  • 免费的网站推荐下载注册安全工程师报名
  • 昆山建筑行业网站企业网站例子
  • 永久域名免费注册网站南京手机网站
  • 营销型网站建设平台深圳网站建设公司哪个
  • 网址网站注册小程序公司十大排名
  • 织梦网站模板制作wordpress设置菜单密码
  • 网页制作教程和素材广州seo顾问服务
  • 怎么做网站广告赚钱绿色电器公司网站psd模板
  • 备案 网站服务类型做网站都需要哪些知识
  • 郑州哪家做网站好c2c有哪些
  • 网站做排名有用吗济南公司
  • 建德营销型网站建设设计手机网站内容模块
  • 电商网站如何设计内容个人网站 空间
  • we建站wordpress后台怎么进
  • 网站首页建设网付费阅读wordpress主题
  • 导视设计网站大前端xiu阿里百秀wordpress主题