钢铁侠Unlit光照Shader,三种效果变化

返回目录

大家好,我是阿赵,这里是钢铁侠材质制作的第三部分,基础光照模型实现。

这一个过程我不太想多说了,因为都是套用之前的光照模型而已,不过这次有具体的模型,也可以顺便看看各个过程对模型实际显示效果产生的影响。
在这里使用的光照模型,都是可以自己选择的,比如漫反射模型我是选择了HalfLambert,高光模型我是选择了BlinnPhong。这不是固定的,也可以换成自己喜欢的其他光照模型来实现。
最后的计算结果,还是环境光颜色+漫反射颜色+高光颜色。

1、漫反射贴图

这个过程只用采样了模型的漫反射贴图,并显示出来。

2、使用HalfLambert漫反射光照模型

可以看出这个过程模型产生了一些亮面和暗面的差异,模型有了一些立体感。

3、使用BlinnPhong高光模型

加上高光之后,模型就更立体了,不过有点油腻

4、加上高光遮罩贴图:


加上高光遮罩贴图之后,可以控制模型不同位置产生高光的强度不一样,这样模型看起来没那么油腻。不过这张高光贴图是我下载模型的时候自带的,我个人感觉它似乎只是拿漫反射贴图直接转的,高光的变化太均匀,效果并不是很理想。这里我只是演示一下怎样去使用遮罩图,所以我也没有再去修整这张图片了。

5、加上法线贴图

加上法线贴图后,可以为光照效果增加很多细节,看起来更细腻。

需要注意的是,我在Shader里面自己做了UnpackScaleNormal的操作,所以法线贴图的导入选项里面,就不需要选择Normal了,正常的贴图格式就行。不然重复的Unpack,效果反而不对。

6、完整Shader:

Shader "azhao/IronManBodyCode"
{Properties{_RimBias("RimBias", Float) = 1_RimPow("RimlPow", Float) = 2_RimlCol("RimCol", Color) = (0,0,0,0)_NoiseMap("NoiseMap",2D) = "black"{}_NoiseTiling("NoiseTiling",Vector) = (1,1,0,0)_NoiseSpeed("NoiseSpeed",float) = 0_AmbientStength("AmbientStength",float) = 1_MainTex("BaseCol",2D) = "white"{}_NormalMap("NormalMap",2D) = "black"{}_NormalScale("NormalScale",float) = 1_SpecCol("SpecCol",Color) = (1,1,1,1)_Shininess("_Shininess",float) = 1_SpecStength("SpecStength",float) = 1_SpecMask("SpecMask",2D) = "white"{}}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"//简化版的转换法线并缩放的方法half3 UnpackScaleNormal(half4 packednormal, half bumpScale){half3 normal;//由于法线贴图代表的颜色是0到1,而法线向量的范围是-1到1//所以通过*2-1,把色值范围转换到-1到1normal = packednormal * 2 - 1;//对法线进行缩放normal.xy *= bumpScale;//向量标准化normal = normalize(normal);return normal;}//获取HalfLambert漫反射值float GetHalfLambertDiffuse(float3 worldPos, float3 worldNormal){float3 lightDir = UnityWorldSpaceLightDir(worldPos);float NDotL = saturate(dot(worldNormal, lightDir));float halfVal = NDotL * 0.5 + 0.5;return halfVal;}//获取BlinnPhong高光float GetBlinnPhongSpec(float3 worldPos, float3 worldNormal,float shininess){float3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos));float3 halfDir = normalize((viewDir + _WorldSpaceLightPos0.xyz));float specDir = max(dot(normalize(worldNormal), halfDir),0);float specVal = pow(specDir, shininess);return specVal;}struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;float4 tangent : TANGENT;};struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;float3 worldPos :TEXCOORD1;float3 worldNormal : TEXCOORD2;float3 worldTangent :TEXCOORD3;float3 worldBitangent : TEXCOORD4;};float _RimBias;float _RimPow;float4 _RimlCol;sampler2D _NoiseMap;float4 _NoiseTiling;float _NoiseSpeed;sampler2D _MainTex;sampler2D _NormalMap;float _NormalScale;float _AmbientStength;float4 _SpecCol;float _Shininess;float _SpecStength;sampler2D _SpecMask;v2f vert (appdata v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.uv = v.uv;o.worldPos = mul(unity_ObjectToWorld, v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldTangent = UnityObjectToWorldDir(v.tangent);o.worldBitangent = cross(o.worldNormal, o.worldTangent);return o;}half4 frag (v2f i) : SV_Target{/*光线轮廓暂时先屏蔽掉float3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));float NdotV = dot(i.worldNormal, worldViewDir);float fresnelVal = pow((1 - NdotV)*_RimBias, _RimPow);float2 noiseUV = i.worldPos.xy *_NoiseTiling.xy + _NoiseTiling.zw;noiseUV.y += frac(_Time.y)*_NoiseSpeed;float4 noiseCol = tex2D(_NoiseMap, noiseUV);half4 RimRGBA = _RimlCol * (fresnelVal+noiseCol.r);*/half4 baseCol = tex2D(_MainTex,i.uv);half4 normalCol = tex2D(_NormalMap, i.uv);//得到切线空间的法线方向half3 normalVal = UnpackScaleNormal(normalCol, _NormalScale).rgb;//构建TBN矩阵float3 tanToWorld0 = float3(i.worldTangent.x, i.worldBitangent.x, i.worldNormal.x);float3 tanToWorld1 = float3(i.worldTangent.y, i.worldBitangent.y, i.worldNormal.y);float3 tanToWorld2 = float3(i.worldTangent.z, i.worldBitangent.z, i.worldNormal.z);//通过切线空间的法线方向和TBN矩阵,得出法线贴图代表的物体世界空间的法线方向float3 worldNormal = float3(dot(tanToWorld0, normalVal), dot(tanToWorld1, normalVal), dot(tanToWorld2, normalVal));float diffuseVal = GetHalfLambertDiffuse(i.worldPos, worldNormal);float4 specMaskVal = tex2D(_SpecMask, i.uv).r;float specVal = GetBlinnPhongSpec(i.worldPos, worldNormal, _Shininess)*specMaskVal*_SpecStength;half3 finalRGB = UNITY_LIGHTMODEL_AMBIENT * _AmbientStength + baseCol.rgb*diffuseVal+ _SpecCol.rgb*specVal;return half4(finalRGB,1);}ENDCG}}
}

钢铁侠材质制作——3、基础光照模型实现相关推荐

  1. 钢铁侠材质制作——2、线条轮廓部分的制作

    钢铁侠Unlit光照Shader,三种效果变化 返回目录 大家好,我是阿赵,这里是钢铁侠材质制作第二部分,线条轮廓部分的制作 为了实现这个效果,可以把细节拆分成以下几个部分: 1.轮廓光 1.效果分析 ...

  2. c4d插件Arnold 阿诺德真实材质制作渲染视频教程

    c4d插件Arnold 阿诺德真实材质制作渲染视频教程 大小解压后:4.6G 含课程文件 1920X1080 mp4 时长:9小时50分钟 英语+中文字幕 (人工校对) 课程目录: [福利]GSG灰猩 ...

  3. Blender材质和着色基础视频教程 CGCookie – Fundamentals of Blender Materials and Shading

    Blender材质和着色基础视频教程 CGCookie – Fundamentals of Blender Materials and Shading Blender材质和着色基础视频教程 CGCoo ...

  4. 钢铁侠头盔制作图纸下载_如何在10分钟内制作头盔图

    钢铁侠头盔制作图纸下载 我每天的大部分时间都涉及创建,修改和部署Helm图表以管理应用程序的部署. Helm是Kubernetes的应用程序包管理器,负责协调应用程序的下载,安装和部署. Helm图表 ...

  5. Substance Painter 服饰材质制作 衣服 腰带

    承接:Substance Painter 服饰材质制作 裤子 1.基础颜色: 2.基础底色2: 3.添加布料效果: 4.边缘破损: 5 腰带:

  6. ue4怎么用虚幻商城场景_【更新】UE4虚幻引擎野外场景制作零基础入门教程

    原标题:[更新]UE4虚幻引擎野外场景制作零基础入门教程 作为一套零基础入门教程,可以帮助虚幻4引擎的新手了解到环境制作流程和相关软件的配合.本教学适合零基础入门用户,不适合有一定经验的UE使用者. ...

  7. 【TA-霜狼_may-《百人计划》】美术2.6 PBR材质制作流程

    [TA-霜狼_may-<百人计划>]美术2.6 PBR材质制作流程 @[TOC]([TA-霜狼_may-<百人计划>]美术2.6 PBR材质制作流程 2.6 PBR材质流程流水 ...

  8. SubstanceDesigner制作PBR材质制作并且同步到Unity小尝试

    SubstanceDesigner制作PBR材质制作并且同步到Unity小尝试 1.下载安装SubstanceDesigner,网址:https://zixue.3d66.com/softhtml/d ...

  9. 计算机基础做表格,表格的制作计算机基础.doc

    表格的制作计算机基础 Word表格的制作 实验目的和要求: 1.掌握表格的创建方法 2.掌握表格的编辑 3.掌握表格的排版 4.掌握表格与文本的转换 5.掌握表格的跨页设置 注意:本实验要求熟悉[表格 ...

最新文章

  1. Ceres非线性优库入门介绍
  2. PHP版本VC6与VC9/VC11/VC14、Thread Safe与None-Thread Safe等的区别
  3. Eclipse安装Svn无法连接问题
  4. 史上最全的分词算法与工具介绍
  5. android判断点击次数_Android应用统计-使用时长及次数统计(一)
  6. html中写meta会乱码,BeautifulSoup+Unicode,该死的html乱码,尽管在meta标记中指定了字符集...
  7. 社区团购如今进行得如火如荼
  8. 华为2288H V5服务器安装win_server_2016问题解决过程
  9. Java-经典排序算法(二)——快速排序
  10. 盘点,腾讯手机管家的那些你不知道的小功能。
  11. 真解决EasyUi的 select 使用 class=“easyui-combobox“ 样式绑定onSelect/onChange事件
  12. [经验教程]拼多多购物车在哪里怎么加入购物车合并一起付款?
  13. desktop window manager
  14. 自然基金项目爬虫测试(已失效)
  15. 威锋十年:叫一声「果粉」,你还敢答应吗?
  16. php cms 公文,POSCMS文件信息查看
  17. 2021-09-27 网安实验-取证分析-计算机取证之Xplico
  18. 威斯康星乳腺癌良性预测
  19. 前端技术的发展与演变
  20. 整理空间权重矩阵和杜宾模型案例数据及分析(stata代码)

热门文章

  1. 【扫描PDF】如何将颜色淡的扫描PDF颜色变深,便于阅读??PDF中文字太淡怎么加深?汇总网上已有的方法,一波小结
  2. java公路车的气嘴_自行车气嘴的分类、特性和打气的方法
  3. 完数什么意思_数学上角的定义是什么
  4. 千粉缔造760w播放!B站“新人”UP主在B站怎么加速上位?
  5. 小程序+动易SF制作随手拍实例全景式操作(3)
  6. Java面试之场景题汇总
  7. 自动化1121和1122班学生链接
  8. 什么是NFT?你不会还不知道吧!
  9. 20款免费的WordPress企业站主题下载
  10. GBase 8s 产品简介