Unity3D培训
美国上市Unity3D培训机构

400-111-8989

VR培训

Unity3D脚本:Unity3D 车身与玻璃材质

  • 发布:Unity3D培训
  • 来源:Unity3D教程
  • 时间:2016-01-25 17:17

玻璃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/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 << faceToRender;
UpdateCubemap (faceMask);
}
else
{
UpdateCubemap (63); // all six faces
}
}

function UpdateCubemap (faceMask : int)
{
if (!cam)
{
var go = new GameObject ("CubemapCamera", Camera);
go.hideFlags = HideFlags.HideAndDontSave;
go.transform.position = transform.position;
go.transform.rotation = Quaternion.identity;
cam = go.camera;
cam.farClipPlane = 100; // don't render very far into cubemap
cam.enabled = false;
}

if (!rtex)
{
rtex = new RenderTexture (cubemapSize, cubemapSize, 16);
rtex.isPowerOfTwo = true;
rtex.isCubemap = true;
rtex.hideFlags = HideFlags.HideAndDontSave;
renderer.sharedMaterial.SetTexture ("_Cube", rtex);
}

cam.transform.position = transform.position;
cam.RenderToCubemap (rtex, faceMask);
}

function OnDisable ()
{
DestroyImmediate (cam);
DestroyImmediate (rtex);
}

 

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:Unity3D角色换装实现原理及步骤
下一篇:Unity3D脚本:Unity3D使用LitJson解析服务器上的JSON
Unity|超级兔子

Unity|超级兔子

Unity超级角色控制器物理API分析与功能实现

Unity超级角色控制器物理API分析与功能实现

教程:让Unity中物理效果更加逼真

教程:让Unity中物理效果更加逼真

Unity3D 软件下载

Unity3D 软件下载

选择城市和中心
贵州省

广西省

海南省