UnityShader---光照(衰减和阴影))(内置渲染管线)---10
光照衰减:
// Upgrade NOTE: replaced '_LightMatrix0' with 'unity_WorldToLight'Shader "Unlit/15"
{Properties{_Diffuse("Diffuse",Color) = (1,1,1,1)_Specular("Specular",Color) = (1,1,1,1)_Gloss("Gloss",Range(1,256)) = 10}SubShader{Pass{Tags{"LightMode" = "ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag//添加#pragma multi_compile_fwdbase#include "UnityCG.cginc"#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 = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex);return o;}fixed4 frag(v2f i) :SV_Target{fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldLight = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 worldView = normalize(UnityWorldSpaceViewDir(i.worldPos));fixed3 halfDir = normalize(worldLight + worldView);fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal,worldLight));//Blinn-Phong高光公式:光顔色 * 高光反射顔色 * pow(saturate(dot(法线,半角方向)),高光系数)fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(worldNormal,halfDir)),_Gloss);fixed atten = 1;return fixed4((ambient + diffuse + specular) * atten,1.0);}ENDCG}Pass{Tags{"LightMode" = "ForwardAdd"}//设置混合模式Blend One OneCGPROGRAM#pragma vertex vert#pragma fragment frag//添加#pragma multi_compile_fwdadd#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.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 = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex);return o;}fixed4 frag(v2f i) :SV_Target{fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldLight = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 worldView = normalize(UnityWorldSpaceViewDir(i.worldPos));fixed3 halfDir = normalize(worldLight + worldView); fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal,worldLight));//Blinn-Phong高光公式:光顔色 * 高光反射顔色 * pow(saturate(dot(法线,半角方向)),高光系数)fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(worldNormal,halfDir)),_Gloss);#ifdef USING_DIRECTIONAL_LIGHTfixed atten = 1;
#elsefloat3 lightCoord = mul(unity_WorldToLight, float4(i.worldPos, 1)).xyz;fixed atten = tex2D(_LightTexture0,dot(lightCoord,lightCoord).rr).UNITY_ATTEN_CHANNEL;
#endifreturn fixed4((diffuse + specular) * atten,1.0);}ENDCG}}Fallback "Specular"
}
光照阴影:
// Upgrade NOTE: replaced '_LightMatrix0' with 'unity_WorldToLight'Shader "Unlit/16"
{Properties{_Diffuse("Diffuse",Color) = (1,1,1,1)_Specular("Specular",Color) = (1,1,1,1)_Gloss("Gloss",Range(1,256)) = 10}SubShader{Pass{Tags{"LightMode" = "ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag//添加#pragma multi_compile_fwdbase#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.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;SHADOW_COORDS(2)};v2f vert(a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex);TRANSFER_SHADOW(o);return o;}fixed4 frag(v2f i) :SV_Target{fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldLight = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 worldView = normalize(UnityWorldSpaceViewDir(i.worldPos));fixed3 halfDir = normalize(worldLight + worldView);fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal,worldLight));//Blinn-Phong高光公式:光顔色 * 高光反射顔色 * pow(saturate(dot(法线,半角方向)),高光系数)fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(worldNormal,halfDir)),_Gloss);//fixed atten = 1;//fixed shadow = SHADOW_ATTENUATION(i);//统一计算衰减和阴影UNITY_LIGHT_ATTENUATION(atten,i,i.worldPos);return fixed4((ambient + diffuse + specular) * atten,1.0);}ENDCG}Pass{Tags{"LightMode" = "ForwardAdd"}//设置混合模式Blend One OneCGPROGRAM#pragma vertex vert#pragma fragment frag//添加//#pragma multi_compile_fwdadd#pragma multi_compile_fwdadd_fullshadows#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.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;//SHADOW_COORDS(2)};v2f vert(a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex);//TRANSFER_SHADOW(o);return o;}fixed4 frag(v2f i) :SV_Target{fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldLight = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 worldView = normalize(UnityWorldSpaceViewDir(i.worldPos));fixed3 halfDir = normalize(worldLight + worldView); fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal,worldLight));//Blinn-Phong高光公式:光顔色 * 高光反射顔色 * pow(saturate(dot(法线,半角方向)),高光系数)fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(worldNormal,halfDir)),_Gloss);//1.计算衰减
//#ifdef USING_DIRECTIONAL_LIGHT
// fixed atten = 1;
//#else
// float3 lightCoord = mul(unity_WorldToLight, float4(i.worldPos, 1)).xyz;
// fixed atten = tex2D(_LightTexture0,dot(lightCoord,lightCoord).rr).UNITY_ATTEN_CHANNEL;
//#endif//2.计算衰减和阴影UNITY_LIGHT_ATTENUATION(atten,i,i.worldPos);return fixed4((diffuse + specular) * atten,1.0);}ENDCG}}Fallback "Specular"
}
UnityShader---光照(衰减和阴影))(内置渲染管线)---10相关推荐
- 制作RPG独立游戏练习(二)内置渲染管线中实现风格化PBR效果
游戏的研发大概有3个月了,都是业余时间边学边做,还是觉得在项目里面实操学得扎实牢靠. 目标平台是手机....(优化后,目前测试的是中高端机型) 目前是在unity里面实时光的效果打包到手机里的实机画面 ...
- 【工具篇】Unity内置渲染管线和URP以及HDRP轮廓外发光边缘光高亮显示演示
目录 一.内置渲染管线(Built_IN) 一. 效果展示 二.使用教学 Quick Outline 二.URP渲染管线
- 你知道吗,Flutter内置了10多种Button控件
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Flutter内置了10多种Button(按钮)类控件供我 ...
- Vue.js 内置了10个过滤器,下面简单介绍它们的功能和用法。
Vue.js 内置了10个过滤器,下面简单介绍它们 的功能和用法. ①capitalize:字符串首字符转化成大 写 ②uppercase:字符串转化成大写 ③lowercase :字符串转化成小写 ...
- UnityShader---高级纹理(反射、折射、菲涅尔反射、镜子\玻璃效果)(内置渲染管线)---11
反射:代码里有阴影和衰减计算 Shader "Unlit/17" {Properties{_Color("Color",Color)=(1,1,1,1)_Ref ...
- 【内置渲染管线】Unity标准Shader解析(渲染模式,贴图类型)
目录 一.标准Shader之四大渲染模式 1.Opaque(不透明) 2.Cutout(镂空) 3.Fade(隐现) 4.Transparent(透明) 二.标准Shader之十种贴图类型 1.标准 ...
- 【内置渲染管线】Built_IN水面效果Shader
1.水面波动UV动画 Shader "Hsj/Whater" {Properties{_MainTex("MainTex",2D) = "white& ...
- python中chr函数的用法_【转】Python内置函数(10)——chr
英文文档: chr(i) Return the string representing a character whose Unicode code point is the integeri. Fo ...
- 【图形学】31 Unity 的光源衰减和阴影
来源:<UNITY SHADER入门精要> 文章目录 1.用于光照的衰减纹理 2.阴影的产生 ①传统的阴影映射纹理 ②屏幕空间的阴影映射技术(Screenspace Shadow Map) ...
最新文章
- [原]变参函数原理详解
- jenkins2 groovy语法
- 建立一个成功的OpenStack组
- Ubuntu18.04安装opencv出现的一系列问题解决方法(持续更新~)
- C++socket编程(三):3.4 listen监听
- uniapp 乘法结果保留了很多小数_苏教版五年级数学上册5.9循环小数和商的近似值微课视频 | 练习...
- 工具分享:xampp-windows-x64-7.3.2-1-VC15-installer.exe 请自行下载(附下载链接)
- iPhone史上最全的使用教程
- 【PC工具】可能是最好用的下载工具:IDM特点及功能汇总,IDM破解版下载,PC好用的迅雷下载版本合集...
- SVN常用命令集合_艾孜尔江撰
- 移动端布局三种视口_移动H5的meta视口标签、弹性布局原则和背景图片适配
- 鸿蒙系统敏感应用,鸿蒙系统特性“揭晓”!一次开发灵活使用,生态构建难题被解决?...
- 36氪专访融云CEO董晗:8年企服,6年出海,现计划成为「沙特最大科技企业」
- 通过ip反查域名信息
- Java 老矣,尚能饭否?
- C和指针_第16章_标准数函数库_学习笔记
- python爬虫登录12306失败_使用python爬虫模拟12306登录方法
- Easypoi模版导出excel
- 全新的红巨人粒子特效套装插件:TrapCode Suite Mac版
- 北大操作系统陈向群第七章知识点