Unity3d 车身、玻璃材质
Unity3d 车身、玻璃材质玻璃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:纯文本查看 复制代码<font color="#333333"><font face="Arial">// 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);}</font></font>
感谢楼主的无私分享!{:soso__11402694654016840197_7:} 很不错 楼主是超人 顶顶多好 难得一见的好帖 不错不错 很不错 顶顶多好 真心顶
页:
[1]