unity2019 buildin实时折射反射shader
时间: 2023-06-27 13:07:58 浏览: 151
在Unity 2019中,有一些内置的shader可以用于实现实时折射和反射效果。下面是一些常用的内置shader:
1. Standard Shader:这是Unity中最常用的shader之一,它可以实现基本的反射和折射效果。
2. Reflective Shader:这个shader可以实现镜面反射效果,但不支持折射。
3. Refractive Shader:这个shader可以实现折射效果,但不支持反射。
4. Glass Shader:这个shader可以实现玻璃材质的折射和反射效果。
5. Water Shader:这个shader可以实现水面的折射和反射效果。
使用这些内置shader可以快速实现实时折射和反射效果,但也可以根据自己的需求编写自定义shader来实现更高级的效果。
相关问题
unity2019 内置管线实时折射反射shader
Unity2019内置管线(Universal Render Pipeline)提供了可以实现实时折射和反射的Shader。
在URP中,可以使用内置的Lit Shader来实现实时折射和反射。下面是一个简单的示例:
```
Shader "Custom/LitRefractionReflection" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_NormalMap ("Normal Map", 2D) = "bump" {}
_Metallic ("Metallic", Range(0,1)) = 0.0
_Smoothness ("Smoothness", Range(0,1)) = 0.5
_Color ("Color", Color) = (1,1,1,1)
_RefractiveIndex ("Refractive Index", Range(1.0, 2.0)) = 1.5
}
SubShader {
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard
struct Input {
float3 worldPos;
float3 worldNormal;
float3 worldRefl;
float3 worldViewDir;
float2 uv_MainTex;
};
sampler2D _MainTex;
sampler2D _NormalMap;
float _Metallic;
float _Smoothness;
fixed4 _Color;
float _RefractiveIndex;
void surf (Input IN, inout SurfaceOutputStandard o) {
// Diffuse
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color.rgb;
// Metallic
o.Metallic = _Metallic;
// Smoothness
o.Smoothness = _Smoothness;
// Normal Map
o.Normal = UnpackNormal (tex2D (_NormalMap, IN.uv_MainTex));
// Refraction
float3 refractionVector = refract(IN.worldViewDir, IN.worldNormal, _RefractiveIndex);
o.Refraction = tex2D(_MainTex, IN.uv_MainTex + refractionVector.xy * 0.1).rgb;
// Reflection
o.Metallic = 1.0;
o.Smoothness = 1.0;
o.Reflectivity = 1.0;
o.Normal = IN.worldNormal;
o.Alpha = 0.0;
}
ENDCG
}
FallBack "Diffuse"
}
```
这个Shader实现了基本的漫反射、法线贴图、金属度、光滑度,以及折射和反射效果。可以通过调整_RefractiveIndex来修改材质的折射率,从而改变折射效果。
需要注意的是,在URP中实现实时折射和反射需要使用屏幕空间技术,因此需要在摄像机上添加一个反射探针(Reflection Probe)组件来捕获场景中的反射信息。
unity2019 实时折射shader
以下是一个简单的实时折射 Shader 示例,可以在 Unity 2019 中使用:
```shader
Shader "Custom/Refraction" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_BumpMap ("Bump Map", 2D) = "bump" {}
_Refraction ("Refraction", Range(0.0, 1.0)) = 0.5
_Distortion ("Distortion", Range(0.0, 1.0)) = 0.2
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 100
CGPROGRAM
#pragma surface surf Standard
sampler2D _MainTex;
sampler2D _BumpMap;
float _Refraction;
float _Distortion;
struct Input {
float2 uv_MainTex;
float3 worldPos;
float3 worldNormal;
float3 worldViewDir;
};
void surf (Input IN, inout SurfaceOutputStandard o) {
o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
o.Metallic = 0.0;
o.Smoothness = 0.5;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
float3 worldView = normalize(IN.worldViewDir);
float3 worldNormal = normalize(IN.worldNormal);
float3 worldPos = IN.worldPos + worldNormal * _Distortion;
float3 refractVec = refract(-worldView, worldNormal, _Refraction);
o.Emission = tex2D(_MainTex, IN.uv_MainTex + refractVec.xy * 0.03).rgb;
o.Alpha = 1.0;
}
ENDCG
}
FallBack "Diffuse"
}
```
这个 Shader 接受一个主纹理和一个凹凸贴图,可以在材质中使用“Refraction”和“Distortion”属性来控制折射的程度和扭曲的程度。在 “surf” 函数中,我们使用“refract”函数计算折射向量,并使用该向量采样主纹理以获得折射的颜色。