1. Å¥ºê¸Ê »ý¼º- Å¥ºê¸Ê »ý¼º ½ºÅ©¸³Æ® ÀÛ¼º ½ºÅ©¸³Æ®¸¦ ¸¸µé¾î Assets/Editor Æú´õ¿¡ ³Ö´Â´Ù. using UnityEngine;
using UnityEditor; using System.Collections; public class RenderCubemapWizard : ScriptableWizard { public Transform renderFromPosition; public Cubemap cubemap; void OnWizardUpdate () { helpString = "Select transform to render from and cubemap to render into"; isValid = (renderFromPosition != null) && (cubemap != null); } void OnWizardCreate () { // create temporary camera for rendering GameObject go = new GameObject( "CubemapCamera"); go.AddComponent<Camera>(); // place it on the object go.transform.position = renderFromPosition.position; go.transform.rotation = Quaternion.identity; // render into cubemap go.GetComponent<Camera>().RenderToCubemap( cubemap ); // destroy temporary camera DestroyImmediate( go ); } [MenuItem("GameObject/Render into Cubemap")] static void RenderCubemap () { ScriptableWizard.DisplayWizard<RenderCubemapWizard>( "Render cubemap", "Render!"); } } - Å¥ºê¸Ê ¿ÀºêÁ§Æ® »ý¼º ¸Þ´º > Assets > Create > Legacy > Cubemap - Å¥ºê¸Ê »ý¼º ½ºÅ©¸³Æ® ½ÇÇà ¸Þ´º > GameObject > "Render into Cubemap" ½ÇÇà À§Ä¡¿Í ÀúÀåÇÒ Å¥ºê¸ÊÀ» ¼³Á¤ÇÑ´Ù. - Å¥ºê¸Ê »ý¼º °á°ú È®ÀΠťºê¸ÊÀ» »ý¼ºÈÄ °á°ú¸¦ È®ÀÎ ÇÒ·Á¸é ÀνºÆåÆ®ºä°¡ ÀÚµ¿ ¾÷µ¥ÀÌÆ®°¡ ¾ÈµÈ´Ù. ÀνºÆåÆ®ºä¿¡ ´Ù¸¥ ¼Ó¼ºÀ» º¸¿©ÁØÈÄ¿¡ ´Ù½Ã »ý¼ºµÈ Å¥ºê¸ÊÀ» Ŭ¸¯ÇÑ´Ù. 2. Å¥ºê¸Ê ·»´õ¸µ- Å¥ºê¸ÊÀ» ·ÎµùÇÏ°í ¹Ý»ç·®À» Á¶Á¤ÇÏ´Â _Cubemap, _ReflAmount¸¦ Ãß°¡ÇÑ´Ù. Properties
{ _MainTint ("Diffuse Tint", Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _Cubemap ("CubeMap", CUBE) = ""{} _ReflAmount ("Reflection Amount", Range(0.01, 1)) = 0.5 } sampler2D _MainTex; samplerCUBE _Cubemap; float4 _MainTint; float _ReflAmount; - ÀÔ·Â ±¸Á¶Ã¼¿¡ ¿ùµå¹Ý»çº¤Å͸¦ ³Ñ°ÜÁØ´Ù. ¿ùµå¹Ý»çº¤ÅÍ´Â À¯´ÏƼ ³»ºÎ¿¡¼ Á¦°øÇÏ´Â ±â´ÉÀÌ´Ù. struct Input
{ float2 uv_MainTex; float3 worldRefl; }; - Å¥ºê¸ÊÀ» ·ÎµùÇÏ°í ¹Ý»çÄ«¿îÆ®¸¦ ¹Ý»ç·®À» °öÇÑ´Ù. ¿ùµå¹Ý»çº¤ÅÍ·Î ÅؽºÃÄ Á¤º¸¸¦ ±¸ÇÑ´Ù. void surf (Input IN, inout SurfaceOutput o)
{ half4 c = tex2D (_MainTex, IN.uv_MainTex) * _MainTint; o.Emission = texCUBE(_Cubemap, IN.worldRefl).rgb * _ReflAmount; o.Albedo = c.rgb; o.Alpha = c.a; } - ¼ÎÀÌ´õ Àüü ¼Ò½º´Â ´ÙÀ½°ú °°´Ù. Shader "Custom/SimpleReflection" { Properties { _MainTint ("Diffuse Tint", Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _Cubemap ("CubeMap", CUBE) = ""{} _ReflAmount ("Reflection Amount", Range(0.01, 1)) = 0.5 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; samplerCUBE _Cubemap; float4 _MainTint; float _ReflAmount; struct Input { float2 uv_MainTex; float3 worldRefl; }; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex) * _MainTint; o.Emission = texCUBE(_Cubemap, IN.worldRefl).rgb * _ReflAmount; o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } 3. Å¥ºê¸Ê ¸¶½ºÅ·Å¥ºê¸ÊÀ» ¸¶½ºÅ· ÇÒ·Á¸é ¸¶½ºÅ·¿ë Å¥ºê¸ÊÀ» Ãß°¡ÇØ¾ß ÇÑ´Ù.texCUBE·Î ¸¶½ºÅ·¿ë Å¥ºê¸ÊÀ» ·ÎµùÈÄ ±âÁ¸ o.Emission °ª¿¡ °öÇÏ¸é µÈ´Ù. Âü°í) À¯´ÏƼ Shader¿Í Effect Á¦ÀÛ (¿¡ÀÌÄÜ ÃâÆÇ»ç) http://docs.unity3d.com/ScriptReference/Camera.RenderToCubemap.html https://gist.github.com/robinkruyt/55701f2129f203a473e3 < ¸®Ç÷º¼Ç º¤ÅÍ °è»ê > |