话不多说,直接上代码,具体区别我后边会补充上,

暂时委屈各位,先锻炼下自己的“找不同”的能力,哈哈:

Built-CG写法:

Shader "Unity Shaders Book/Chapter 10/Fresnel" {Properties {_Color("Color Tint", Color) = (1,1,1,1)_FresnelScale("Fresnel Scale", Range(0, 1)) = 0.5_Cubemap("Cube Map", Cube) = "_Skybox" {}}SubShader {Tags {"Queue"="Geometry" "RenderType"="Opaque"}Pass {CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdbase#include "Lighting.cginc"#include "AutoLight.cginc"fixed4 _Color;fixed _FresnelScale;samplerCUBE _Cubemap;struct a2v {float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f {float4 pos : SV_POSITION;float3 worldPos : TEXCOORD0;float3 worldNormal : TEXCOORD1;fixed3 worldViewDir : TEXCOORD2;fixed3 worldRefl : TEXCOORD3;SHADOW_COORDS(4)};v2f vert(a2v v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldPos = mul(unity_ObjectToWorld, v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldViewDir = UnityWorldSpaceViewDir(o.worldPos);o.worldRefl = reflect(-o.worldViewDir, o.worldNormal);TRANSFER_SHADOW(o);return o;}fixed4 frag(v2f i) :SV_Target {fixed3 worldNormal = normalize(i.worldNormal);fixed3 lightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 viewDir = normalize(i.worldViewDir);fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos);fixed3 reflection = texCUBE(_Cubemap, i.worldRefl).rgb;fixed fresnel = _FresnelScale + (1 - _FresnelScale) * pow(1 - dot(viewDir, worldNormal), 5);fixed3 diffuse = _LightColor0.rgb * _Color.rgb * saturate(dot(lightDir, worldNormal));fixed3 color = ambient + lerp(diffuse, reflection, saturate(fresnel)) * atten;return fixed4(color, 1.0);}ENDCG}}FallBack "Reflective/VertexLit"
}

URP+HLSL写法:

Shader "Unity Shaders Book/Chapter 10/Fresnel" {Properties {_Color("Color Tint", Color) = (1,1,1,1)_FresnelScale("Fresnel Scale", Range(0, 1)) = 0.5_Cubemap("Cube Map", Cube) = "_Skybox" {}}SubShader {Tags {"RenderPipeline"="UniversalPipeline""Queue"="Geometry" "RenderType"="Opaque"}Pass {HLSLPROGRAM#pragma vertex vert#pragma fragment frag// #pragma multi_compile_fwdbase#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"CBUFFER_START(UnityPerMaterial)half4 _Color;half _FresnelScale;
CBUFFER_ENDTEXTURECUBE(_Cubemap);SAMPLER(sampler_Cubemap);struct a2v {float4 vertex : POSITION;half3 normal : NORMAL;};struct v2f {float4 pos : SV_POSITION;half3 worldPos : TEXCOORD0;half3 worldNormal : TEXCOORD1;half3 worldViewDir : TEXCOORD2;half3 worldRefl : TEXCOORD3;// SHADOW_COORDS(4)};v2f vert(a2v v) {v2f o;o.pos = TransformObjectToHClip(v.vertex.xyz);o.worldPos = mul(UNITY_MATRIX_M, v.vertex).xyz;o.worldNormal = TransformObjectToWorldNormal(v.normal);o.worldViewDir = _WorldSpaceCameraPos.xyz - o.worldPos;o.worldRefl = reflect(-o.worldViewDir, o.worldNormal);// TRANSFER_SHADOW(o);return o;}half4 frag(v2f i) :SV_Target {half3 worldNormal = normalize(i.worldNormal);// half3 lightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));half3 viewDir = normalize(i.worldViewDir);float4 shadowCoord = TransformWorldToShadowCoord(i.worldPos);Light mainLight = GetMainLight(shadowCoord);half3 lightDir = normalize(mainLight.direction);half3 ambient = half3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w);half3 reflection = SAMPLE_TEXTURECUBE(_Cubemap, sampler_Cubemap, i.worldRefl).rgb;half fresnel = _FresnelScale + (1 - _FresnelScale) * pow(1 - dot(viewDir, worldNormal), 5);half3 diffuse = mainLight.color.rgb * _Color.rgb * saturate(dot(lightDir, worldNormal));half3 color = ambient + lerp(diffuse, reflection, saturate(fresnel));return half4(color, 1.0);}ENDHLSL}}FallBack "Reflective/VertexLit"
}

Built-in转URP Chapter10(3)-Fresnel 菲涅尔效果相关推荐

  1. unity shader 菲涅尔效果

    老样子,还是先上效果图: 菲涅尔效果的原理大家可以自己去百度看看,网上有很多,这里就不多说了,我们直接看如何实现这个效果 实现思路: 1.求得视角方向,法线方向(世界空间下) 2.根据菲涅尔效果的公式 ...

  2. 【技术美术】菲涅尔效果的实现

    菲涅尔效果可以直接使用,但是为了了解实现的原理,就直接自己手动实现一个

  3. Fresnel(菲涅尔)

    背景: 菲涅耳公式用来描述光在不同折射率的介质之间的行为.菲涅尔公式是光学中的重要公式,用它能解释反射光的强度.折射光的强度.相位与入射光的强度的关系. 1. 反射公式: fresnel = fres ...

  4. Unreal 4 Fresnel Material 菲涅尔材质

    1.Fresnel with normal map   菲涅尔效果与法线贴图 材质球: 注意点: 1)Blend Model改为Translucent,在Translucency面板下,更改Light ...

  5. 各种光照的算法原理 菲涅尔法则

    [译]各种光照的算法原理 Per Pixel Lighting Techniques          飘飘白云译  2008-03-22 原文链接:http://www.nitrogen.za.or ...

  6. 庄懂的TA笔记(九)<菲涅尔 + MatCap + CubeMap>

    庄懂的TA笔记(九)<菲涅尔 + MatCap + CubeMap> 课程内容: 1.菲涅尔 0.效果展示.公式: 菲涅尔现象:  Fresnel(菲涅尔) 用到的两个向量  NdirWS ...

  7. Unity Shader:实现菲涅尔+色散效果的环境映射以及相关原理解析

    文章目录 1,色散在光学中的原理 2,反射的数学计算方法以及用它实现环境映射 3,折射的原理以及色散的实现 4,菲涅尔效果 5,拥有菲涅尔与色散效果的环境映射 1,色散在光学中的原理 复色光 --现实 ...

  8. Unity Shader:实现菲涅尔+色散效果以及相关原理解析

    1,色散在光学中的原理  2,反射的原理以及环境映射的实现  3,折射的原理以及色散的实现  4,菲涅尔效果  5,将菲涅尔与色散效果增加到环境映射中 1,色散在光学中的原理 复色光  --现实生活中 ...

  9. Three.js MeshStandardMaterial菲涅尔实现

    前面两篇分别讲了Three.js的源码结构和Shader改写方法,本篇做一个基于Standard材质的菲涅尔. 如未读过前两篇的建议先读一下: Three.js Shader源码结构https://w ...

最新文章

  1. Oracle基础 动态SQL语句
  2. 数据分析及机器学习环境配置(docker极简入门指南)
  3. Angular——基本使用
  4. 双向滚动scrollview
  5. Spring属性占位符配置器–一些不太明显的选项
  6. vue、nuxt性能优化
  7. Python学习---入门导学篇
  8. 5G Next Generation of Communication
  9. 三菱5uplc伺服电机指令_实例 | PLC触摸屏控制伺服电机程序设计
  10. GdiPlus使用方法
  11. asp.net-DirectoryEntry基本操作入门
  12. 关于近日番茄花园洪磊被拘之事的一些个人看法
  13. 百度脑图(kityminder)优化
  14. 深圳大厂程序员自述:我37岁,年薪百万,等着被公司干掉!
  15. 【安全算法之概述】一文带你简要了解常见常用的安全算法(RT-Thread技术论坛优秀文章)
  16. 将台式机组成云服务器_如何用parsec软件搭建自己的云游戏平台 篇三:自己搭建云服务器,一次折腾,全家/全国收益...
  17. jquery遍历后台数据
  18. Class类的基本使用
  19. 安搭Share爱情人生
  20. 两个小妙招快速教会大家如何合并多个PDF到一个PDF!

热门文章

  1. matlab:使用4阶龙格库塔方法求微分方程组的值
  2. NOJ 练习题5,6季
  3. 语法练习:sleep_in
  4. python 上市公司 概念股_python多线程和多进程获取所有上市公司的实时数据
  5. 破解iTunes 登陆 PC授权 设备授权 购买安装协议。
  6. 无界鼠标~synergy~Ubuntu
  7. 斐波那契数列/黄金分割数列/“兔子数列”
  8. 阿里云短信验证码实现
  9. ITK入门教程(4)ITK图像读写
  10. 【Latex】Overleaf编译中文不显示