Built-in转URP Chapter10(3)-Fresnel 菲涅尔效果
话不多说,直接上代码,具体区别我后边会补充上,
暂时委屈各位,先锻炼下自己的“找不同”的能力,哈哈:
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 菲涅尔效果相关推荐
- unity shader 菲涅尔效果
老样子,还是先上效果图: 菲涅尔效果的原理大家可以自己去百度看看,网上有很多,这里就不多说了,我们直接看如何实现这个效果 实现思路: 1.求得视角方向,法线方向(世界空间下) 2.根据菲涅尔效果的公式 ...
- 【技术美术】菲涅尔效果的实现
菲涅尔效果可以直接使用,但是为了了解实现的原理,就直接自己手动实现一个
- Fresnel(菲涅尔)
背景: 菲涅耳公式用来描述光在不同折射率的介质之间的行为.菲涅尔公式是光学中的重要公式,用它能解释反射光的强度.折射光的强度.相位与入射光的强度的关系. 1. 反射公式: fresnel = fres ...
- Unreal 4 Fresnel Material 菲涅尔材质
1.Fresnel with normal map 菲涅尔效果与法线贴图 材质球: 注意点: 1)Blend Model改为Translucent,在Translucency面板下,更改Light ...
- 各种光照的算法原理 菲涅尔法则
[译]各种光照的算法原理 Per Pixel Lighting Techniques 飘飘白云译 2008-03-22 原文链接:http://www.nitrogen.za.or ...
- 庄懂的TA笔记(九)<菲涅尔 + MatCap + CubeMap>
庄懂的TA笔记(九)<菲涅尔 + MatCap + CubeMap> 课程内容: 1.菲涅尔 0.效果展示.公式: 菲涅尔现象: Fresnel(菲涅尔) 用到的两个向量 NdirWS ...
- Unity Shader:实现菲涅尔+色散效果的环境映射以及相关原理解析
文章目录 1,色散在光学中的原理 2,反射的数学计算方法以及用它实现环境映射 3,折射的原理以及色散的实现 4,菲涅尔效果 5,拥有菲涅尔与色散效果的环境映射 1,色散在光学中的原理 复色光 --现实 ...
- Unity Shader:实现菲涅尔+色散效果以及相关原理解析
1,色散在光学中的原理 2,反射的原理以及环境映射的实现 3,折射的原理以及色散的实现 4,菲涅尔效果 5,将菲涅尔与色散效果增加到环境映射中 1,色散在光学中的原理 复色光 --现实生活中 ...
- Three.js MeshStandardMaterial菲涅尔实现
前面两篇分别讲了Three.js的源码结构和Shader改写方法,本篇做一个基于Standard材质的菲涅尔. 如未读过前两篇的建议先读一下: Three.js Shader源码结构https://w ...
最新文章
- Oracle基础 动态SQL语句
- 数据分析及机器学习环境配置(docker极简入门指南)
- Angular——基本使用
- 双向滚动scrollview
- Spring属性占位符配置器–一些不太明显的选项
- vue、nuxt性能优化
- Python学习---入门导学篇
- 5G Next Generation of Communication
- 三菱5uplc伺服电机指令_实例 | PLC触摸屏控制伺服电机程序设计
- GdiPlus使用方法
- asp.net-DirectoryEntry基本操作入门
- 关于近日番茄花园洪磊被拘之事的一些个人看法
- 百度脑图(kityminder)优化
- 深圳大厂程序员自述:我37岁,年薪百万,等着被公司干掉!
- 【安全算法之概述】一文带你简要了解常见常用的安全算法(RT-Thread技术论坛优秀文章)
- 将台式机组成云服务器_如何用parsec软件搭建自己的云游戏平台 篇三:自己搭建云服务器,一次折腾,全家/全国收益...
- jquery遍历后台数据
- Class类的基本使用
- 安搭Share爱情人生
- 两个小妙招快速教会大家如何合并多个PDF到一个PDF!