unity3D中要怎样制作表现玻璃和镜面材质?

来源:学生作业帮助网 编辑:作业帮 时间:2024/06/04 12:31:15
unity3D中要怎样制作表现玻璃和镜面材质?
xXmoV+w&9S)0-[4YdI ӾDMbplN!"T( Ueb`h:fy'kl'MӲRm_{s}. tZw}N{;~ؿû?~1BGԌ*fuN)`;b;;/7{/w~ޫ΋6 u\!7nwn7W?lnݽiG gg?w=kAYmqIU$eMhhFĪʡ+!C(GePM w}JIY)%,Hx5f?6BBʶ.EL"'7P]*3d߃02mZ'.~I".5\ҰTDdeOT9YXrG͈Y0# d<r69B:_*nfʲL+a;Ԑ?P e,) WX!2s=4$yM + LGYf O y#Xd*Sr@ybN#ތ5*e=/2+akcJ4Jf,Hh<1I.͛9 am W ]y%!`Nfh3 ` y;0I, 7cfٲZ",:b#6xIT2㟑*1,6r\PsZAe/{ŋ;rǔҤ#qC͎>5:&/:)E.a,迥@?#ȏgyr<>sۙx(3Hof(Cg2G_"-+r#LM)IПKF*cx1or81!8c`XǷK-b61dg_c^z?>Pw7ڻn*ם[[:7>n~<:"3:3i\GZ]PZ1B[}ձtf:Fn( /b 5ٯ~d}ioN4 Wc#/ k{ w??@N4Q4e,bQu B&%`1 -Yi"- .Z0|ICNy4dfB *b2(*£SfATPE/CyqiQ6F2T3ReIYt5Q[eV%4&c? W

unity3D中要怎样制作表现玻璃和镜面材质?
unity3D中要怎样制作表现玻璃和镜面材质?

unity3D中要怎样制作表现玻璃和镜面材质?
透明玻璃材质和镜面反射材质都是需要光影技术(Shader)配合的,属于特效材质.
转给你个车身、玻璃材质的shader:
Shader "Reflective/Glass" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
_Shininess ("Shininess", Range (0.01, 1)) = 0.078125
_ReflectColor ("Reflect Strength", Color) = (1,1,1,0.5)
_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
_Parallax ("Height", Range (0.005, 0.08)) = 0.02
_Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect }
}
SubShader
{
LOD 300
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
Blend one OneMinusDstColor
ZWrite Off

// First pass does reflection cubemap
Pass
{
Name "BASE"
Tags {"LightMode" = "Always"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_fog_exp2
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"

struct v2f {
V2F_POS_FOG;
float2 uv : TEXCOORD0;
float3 I : TEXCOORD1;
};

uniform float4 _MainTex_ST;

v2f vert(appdata_tan v)
{
v2f o;
PositionFog( v.vertex, o.pos, o.fog );
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);

// calculate object space reflection vector
float3 viewDir = ObjSpaceViewDir( v.vertex );
float3 I = reflect( -viewDir, v.normal );

// transform to world space reflection vector
o.I = mul( (float3x3)_Object2World, I );

return o;
}

uniform sampler2D _MainTex;
uniform samplerCUBE _Cube;
uniform float4 _ReflectColor;

half4 frag (v2f i) : COLOR
{
half4 texcol = tex2D (_MainTex, i.uv);
half4 reflcol = texCUBE( _Cube, i.I );
reflcol *= texcol.a;
return reflcol * _ReflectColor;
}
ENDCG
}

UsePass "Parallax Specular/PPL"

}
FallBack "Reflective/VertexLit", 1
}
Shader "Reflective/Glass" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
_Shininess ("Shininess", Range (0.01, 1)) = 0.078125
_ReflectColor ("Reflect Strength", Color) = (1,1,1,0.5)
_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
_Parallax ("Height", Range (0.005, 0.08)) = 0.02
_Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect }
}
SubShader
{
LOD 300
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
Blend one OneMinusDstColor
ZWrite Off

// First pass does reflection cubemap
Pass
{
Name "BASE"
Tags {"LightMode" = "Always"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_fog_exp2
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
struct v2f {
V2F_POS_FOG;
float2 uv : TEXCOORD0;
float3 I : TEXCOORD1;
};
uniform float4 _MainTex_ST;
v2f vert(appdata_tan v)
{
v2f o;
PositionFog( v.vertex, o.pos, o.fog );
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
// calculate object space reflection vector
float3 viewDir = ObjSpaceViewDir( v.vertex );
float3 I = reflect( -viewDir, v.normal );

// transform to world space reflection vector
o.I = mul( (float3x3)_Object2World, I );

return o;
}
uniform sampler2D _MainTex;
uniform samplerCUBE _Cube;
uniform float4 _ReflectColor;
half4 frag (v2f i) : COLOR
{
half4 texcol = tex2D (_MainTex, i.uv);
half4 reflcol = texCUBE( _Cube, i.I );
reflcol *= texcol.a;
return reflcol * _ReflectColor;
}
ENDCG
}
UsePass "Parallax Specular/PPL"
}
FallBack "Reflective/VertexLit", 1
}
车身shader用Reflective/Specular中的一种
然后加入以下脚本:
RenderToCubemap.js:
// Attach this script to an object that uses a Reflective shader.
// Realtime reflective cubemaps!
@script ExecuteInEditMode

var cubemapSize = 128;
var oneFacePerFrame = false;
private var cam : Camera;
private var rtex : RenderTexture;

function Start ()
{
// render all six faces at startup
UpdateCubemap( 63 );
}

function LateUpdate ()
{
if (oneFacePerFrame)
{
var faceToRender = Time.frameCount % 6;
var faceMask = 1