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

400-111-8989

VR培训

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

  • 发布:Unity3D培训
  • 来源:Unity3D教程
  • 时间:2015-12-29 16:08

玻璃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脚本:RPG的镜头跟随脚本
下一篇:Unity3D脚本:Unity3D闪烁灯光脚本
选择城市和中心
贵州省

广西省

海南省