블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2847)
Unity3D (893)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (188)
협업 (64)
3DS Max (3)
Game (12)
Utility (141)
Etc (99)
Link (33)
Portfolio (19)
Subject (90)
iOS,OSX (52)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday



게시일: 2013. 8. 2.

Like most Unity developers, I've encountered the "Missing Script" issue dozens of times in Unity. I finally had enough of having to hand-edit each component to resolve the issue, and wrote an editor extension to help identify and resolve the issue. This video shows a little bit about how it's used.

You can read more about this utility and download the UnityPackage for free on my website at

http://daikonforge.com/forums/resources/fix-missing-scripts.3/



[file]


DaikonForge.MissingScriptResolver.unitypackage



출처 : http://www.youtube.com/watch?v=xz0wbAA3iW0


반응형
Posted by blueasa
, |

Extension Methods

Unity3D/Extensions / 2014. 8. 18. 02:30

Extension Methods

Posted by  on December 6th, 2013

Oftentimes you’ll find yourself using classes you can’t modify. Whether they’re basic data types or part of an existing framework, you’re stuck with the functions that are provided. That being said, C# provides a nifty trick to appending functions to classes! These are known as Extension Methods.

Extension methods are fairly simple to create and are frequently used as syntactic sugar. A practical example can be seen with Unity’s Transform class. Let’s say you want to set only the xvariable of Transform.position.

using UnityEngine;
using System.Collections;
 
public class Player : MonoBehaviour
{
    void Update ()
    {
        //Set new x position to 5
        transform.position = new Vector3(5f, transform.position.y, transform.position.z);
    }
}

In this case Transform.position gives you an error if you only try to assign its x member variable, so you have to assign the entire Vector3. An extension method such as SetPositionX() could be appended to the Transform class and help make this code more readable.

In order to create extension methods you have to create a static class. In addition, an extension method declaration must be declared static and have the first parameter be of the type that you’re writing the method for, preceded by the this keyword.

using UnityEngine;
using System.Collections;
 
//Must be in a static class
public static class Extensions
{
    //Function must be static
    //First parameter has "this" in front of type
    public static void SetPositionX(this Transform t, float newX)
    {
        t.position = new Vector3(newX, t.position.y, t.position.z);
    }
}

Now you can go back to your other script and replace our old code with the new extension method.

using UnityEngine;
using System.Collections;
 
public class Player : MonoBehaviour
{
    void Update ()
    {
        //Set new x position to 5
        transform.SetPositionX(5f);
    }
}
NOTE: Extension methods can only be called on an instance of a class, not on the class itself.

Here are a few more extension methods to get you started, as well as an example script that utilizes a few of them.

Extensions:

using UnityEngine;
using System.Collections;
 
public static class Extensions
{
    public static void SetPositionX(this Transform t, float newX)
    {
        t.position = new Vector3(newX, t.position.y, t.position.z);
    }
 
    public static void SetPositionY(this Transform t, float newY)
    {
        t.position = new Vector3(t.position.x, newY, t.position.z);
    }
 
    public static void SetPositionZ(this Transform t, float newZ)
    {
        t.position = new Vector3(t.position.x, t.position.y, newZ);
    }
 
    public static float GetPositionX(this Transform t)
    {
        return t.position.x;
    }
 
    public static float GetPositionY(this Transform t)
    {
        return t.position.y;
    }
 
    public static float GetPositionZ(this Transform t)
    {
        return t.position.z;
    }
 
    public static bool HasRigidbody(this GameObject gobj)
    {
        return (gobj.rigidbody != null);
    }
 
    public static bool HasAnimation(this GameObject gobj)
    {
        return (gobj.animation != null);
    }
 
    public static void SetSpeed(this Animation anim, float newSpeed)
    {
        anim[anim.clip.name].speed = newSpeed;
    }
}

Example Script:

using UnityEngine;
using System.Collections;
 
public class Player : MonoBehaviour
{
    void Update ()
    {
        //move x position 5 units
        float currentX = transform.GetPositionX();
        transform.SetPositionX(currentX + 5f);
 
        if(gameObject.HasRigidbody())
        {
            //Do something with physics!
        }
 
        if(gameObject.HasAnimation())
        {
            //Double the animation speed!
            gameObject.animation.SetSpeed(2f);
        }
    }
}
NOTE: Static classes do NOT extend MonoBehaviour.
ANOTHER NOTE: If you define your extension methods inside of a namespace, you have to declare the use of that namespace in order to bring them into scope.


출처 : http://unitypatterns.com/extension-methods/

반응형
Posted by blueasa
, |

Nullable Types

Unity3D/Extensions / 2014. 8. 18. 02:29

Nullable Types

Posted by  on January 14th, 2014

Sometimes you have variables that have important information but only after certain game events occur. For example: A character in your game may be idle until they’re told to go to an assigned destination.

public class Character : MonoBehaviour
{
    Vector3 targetPosition;
 
    void MoveTowardsTargetPosition()
    {
        if(targetPosition != Vector3.zero)
        {
            //Move towards the target position!
        }
    }
 
    public void SetTargetPosition(Vector3 newPosition)
    {
        targetPosition = newPosition;
    }
}

In this case, we want the character to move towards the target position only if it’s been assigned. In the code above, we do this by just checking if targetPosition is not equal to its default value (0, 0, 0).  But now we have an issue: what if you want your character to move to (0, 0, 0)? You don’t want to discredit the possibility of that value being used because it might come up sometime during the game!

Luckily, there’s a trick to help avoid comparing arbitrary values for confirming that a variable has been initialized: Nullable Types.

Using Nullable Types

To make a nullable type, just add a “?” after the type declaration of any variable that is a Value Type (eg. Vector3, Rect, int, float).

public class Character : MonoBehaviour
{
    //Notice the added "?"
    Vector3? targetPosition;
 
    void MoveTowardsTargetPosition()
    {
        if (targetPosition.HasValue)
        {
            //Move towards the target position!
            //use targetPosition.Value for the actual value
        }
    }
 
    public void SetTargetPosition(Vector3 newPosition)
    {
        targetPosition = newPosition;
    }
}

Seen here, nullable types have two properties we can use: HasValue (true if the variable has been assigned, false otherwise), and Value (the actual assigned value of the variable).

//First, check if the variable has been assigned a value
if (targetPosition.HasValue)
{
    //move towards targetPosition.Value
}
else
{
    //targetPosition.Value is invalid! Don't use it!
}

Usage Notes

  • To revert a nullable type to having “no value”, set it to null
  • You can NOT create nullable types from classes, or reference types (they can already be set to null)

As usual, if you have any questions or tips to add, do so in the comments below!



출처 : http://unitypatterns.com/nullable-types/

반응형

'Unity3D > Extensions' 카테고리의 다른 글

일괄적으로 Texture Import Setting 변경  (0) 2015.01.30
Extension Methods  (0) 2014.08.18
ObjectPool  (0) 2014.04.22
인스펙터 상의 GUI를 비활성화 시키고 싶을 때..  (0) 2014.04.02
Save Scene while on play mode  (0) 2014.01.12
Posted by blueasa
, |

Link : https://github.com/RyanNielson/awesome-unity



Awesome Unity

A curated list of awesome Unity assets, projects, and resources.

Inspired by awesome-rubyawesome-php, and awesome-python.

2D

  • 2d Toolkit - An efficient & flexible 2D sprite, collider set-up, text, tilemap and UI system.
  • Ferr2D Terrain Tool - Quickly create handcrafted 2D landscapes and levels.
  • SmoothMoves - A skeletal animation editor.
  • Spine - A skeletal animation editor with a Unity library.

AI

  • A* Pathfinding Project (Free and paid) - Lightning fast pathfinding with heavily optimized algorithms and a large feature set.
  • Rain (Free) - A toolset that provides integrated AI rigging, a visual behavior tree editor, pathfinding, automatic nav grid generation, and more.

Camera

  • UFPS - Provides camera, controllers, and other effects for use in FPS games.

Character Controllers

Frameworks

  • uFrame - Create maintainable games faster, better, more stable, and consistent than ever before.

Input

  • InControl (Free) - An input manager that tames makes handler cross-platform. controller input easy.
  • TouchKit (Free) - Makes it easy to recognize gestures and other touch input.

Networking

  • Bolt - Build networked games without having to know the details of networking or write any complex networking code.
  • Photon Unity Networking (Free) - Plug and play cloud networking that also works for local hosting. Free for up to 20 concurrent users.

Textures

Tweening

  • GoKit (Free) - An open source, lightweight tween library aimed at making tweening objects dead simple.
  • HOTween (Free) - Tween any numeric property or field (including Vectors, Rectangles, etc.), plus some non-numeric ones (like strings).
  • iTween (Free) - A simple, and easy to use animation system.
  • LeanTween (Free) - FOSS, and also the most lightweight tweening library for Unity. Allows you to tween any value you have access to via the .value() method.

UI

  • Daikon Forge - A user interface library that provides deep editor integration, data/event binding, and much more.
  • NGUI - A powerful UI system and event notification framework.

Visual Scripting

  • Playmaker - Quickly make gameplay prototypes, A.I. behaviors, animation graphs, interactive objects, and more using finite state machines.
  • Shader Forge - A node-based shader editor giving you the artistic freedom of shader creation, with no need to code.

Projects

A list of awesome projects made using Unity.

Resources

Tutorials

  • Catlike Coding - Tutorials designed for learning the C# scripting side of Unity.
  • Official Video Tutorials - The official tutorials for scripting, animation, audio, and almost anything Unity related.
  • Unity Patterns - Software pattern tutorials and free tools for Unity.

Contributing

Please see CONTRIBUTING for details.

반응형

'Unity3D > Link' 카테고리의 다른 글

unity3d grid  (0) 2014.12.19
Tree Pack(FBX)  (0) 2014.09.03
유니티 짱(Unity Chan)  (0) 2014.04.11
모바일 게임 버전 관리 정책  (0) 2014.02.25
유니티 C# 관련 사이트  (0) 2012.10.24
Posted by blueasa
, |


UIJoystick.cs


Reference : https://gist.github.com/shori0917/6094473



Link : http://blog.kanotype.net/?p=695



반응형
Posted by blueasa
, |

원문 링크 : http://unityvs.com/news/



MS를 통해서 나오고 Free로 풀렸네요.


예상보다 상당히 빠르네요.

이미 사서 쓰고 있지만, Free로 풀린거 보니 좋네요. =ㅅ=;;

아래는 원문..

29 Jul 2014

permalink

The team is proud to announce the 1.9 release of Visual Studio Tools for Unity, formerly known as UnityVS, our fist release since we've been acquired by Microsoft.

Please see the annoucement on the Visual Studio blog. To know exactly what changed, you can go directly to the ChangeLog.

Visual Studio Tools for Unity is now directly available from the Visual Studio Gallery, for each of the Visual Studio version we support:

UnityVS 1.8 to VSTU 1.9 migration

If you are migrating an existing UnityVS 1.8 solution, we recommend that you:

  • Delete the UnityVS .sln and .*proj files from the root folder of your Unity project.
  • Import the new Visual Studio Tools for Unity package into your Unity project as shown in the documentation.
Your new solution will be automatically generated.


반응형

'Unity3D > UnityVS' 카테고리의 다른 글

[UnityVS] Script opening with Unity 4.2  (0) 2013.08.06
Posted by blueasa
, |

Visual Studio 10 또는 12에서 Shader Syntax Highlighting하기


1. http://nshader.codeplex.com/ 에서 가서 nShader를 다운을 받고 플러그인 설치.


2. NShader.pkgdef 파일 메모장 또는 기타 에디터로 열기. (2012의 경우)

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\(NShader 폴더 : 컴퓨터마다 폴더명이 다르다. )


3. Unity3d .shader 확장자를 위해 "CodeBase"="$PackageFolder$\NShader.dll" 코드 아래에 다음을 추가한다.

[$RootKey$\Languages\File Extensions\.shader]

@="{4c554917-0eb7-3742-9f6b-f2f529fc6729}"

[$RootKey$\Languages\File Extensions\.cginc]

@="{4c554917-0eb7-3742-9f6b-f2f529fc6729}"


4. 레지스트리에서 아래 경로 삭제

- HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\FontAndColors\Cache 

- HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config 



출처 : http://workspage.net/37

반응형

'Unity3D > Shader' 카테고리의 다른 글

Unity3d Shader Syntax Highlighting(Visual Studio 2010/2012/2013)  (0) 2015.03.24
[NGUI] Unlit - Transparent Colored Additive  (4) 2015.01.27
Unity Shader 공부  (0) 2014.07.16
Shader Code  (0) 2014.07.16
유니티 셰이더의 기초  (0) 2014.06.28
Posted by blueasa
, |


링크 : http://wlhermit.blog.me/220061141482


원본 링크 : http://darkgenesis.zenithmoon.com/so-you-want-to-be-a-unity3d-game-developer/



So you want to be a Unity3D game developer?

UnityDeveloper

Unity3D has been making great strides of late, it’s has been one of the big go-to middleware engines for budding iOS and Android game developers and even expanded its reach to Web, Windows desktop and other platforms.

It’s recent Microsoft partnerships have also been making big waves and have spurred on its adoption, introducing both the Windows Phone 8 and Windows 8 platforms and more recently with the announcement of Xbox One support, best of all it’s completely free for all Microsoft platforms.

Unity3D comes in three flavours:

 Unity3D Trial

When you first download Unity3D and setup a new account you get access to all of Unities tools and accessories that are included in the Pro version for 30 days, after that it will revert to the Free version or you can pay for Pro.

 Unity3D Free

As it says on the box, this is the default Free tier for Unity, you get access to the editor and all the basic features, however some advanced performance, profiling and graphics features are disabled.  You can still make one heck of a game if you do it right and it’s perfect while you are learning Unity.  But once your game gets beyond a certain size you may find the lack of the pro features limiting.

 Unity3D Pro

Basically every tool and feature of Unity at your disposal including LOD support, texture batching, asset streaming, custom splash screens, 3D textures and HDR, the list goes on – see Unity Pro detail page for more details and a comparison of the Pro vs Free features.


So how to get started?

As with my Monster links post, I’ve compiled an extensive list of resources at your disposable on your Unity3D journey, split up in to sections to allow you to target what you need.

Beginner tutorials

Intermediate tutorials

2D specific tutorials

Project based training – learn by doing

Video based tutorials

Unity3D component tutorials

Unity3D master sites – Unity training is just their thing

Unity3D paid for training

Scripting links and help

Design or 3D modelling help

Shader help and tutorials

Performance and architecture

Platform specific

Animation and Mecanim

Generic Tips and Tricks

Multiplayer tutorials

Music and Audio

Unity addons and engines

Cloud and backend systems

Help and forums

Sample Projects

Resources

Other things to check


On with the show

If you know of any other stella resources out there that will help out a new comer to Unity3D or a set of advanced tutorials and resources then be sure to comment below and I’ll add them in.

Like the other “Monster Set of Resources” post, I try to keep these up to date with new additions as I find them.

Party on.


반응형
Posted by blueasa
, |

Unity Shader 공부

Unity3D/Shader / 2014. 7. 16. 13:54

Link : Unity Shader 공부

반응형

'Unity3D > Shader' 카테고리의 다른 글

[NGUI] Unlit - Transparent Colored Additive  (4) 2015.01.27
Unity3d Shader Syntax Highlighting(Visual Studio 2010 또는 2012)  (0) 2014.07.21
Shader Code  (0) 2014.07.16
유니티 셰이더의 기초  (0) 2014.06.28
Unity Shader Reference  (0) 2014.06.24
Posted by blueasa
, |

Shader Code

Unity3D/Shader / 2014. 7. 16. 10:21

출처 : http://wiki.unity3d.com/index.php/Shader_Code#Built-In


Shader Code

DISCLAIMER: This page is written by Unity users and is built around their knowledge. Some users may be more knowledgeable than others, so the information contained within may not be entirely complete or accurate.

Contents

 [hide

Structures

Unity's shaders use structures to pass information down the rendering pipeline.

Application to Vertex Shader Structure (appdata)

The first structure passes raw information about the geometry being rendered to the vertex shader. To create your own appdata structure, they must conform to the formatting and limitations outlined below. See the built-in appdata structures below for an example.

Format

 Structure:
 struct [Name]
 {
     [One or more Fields]
 };
 
 Field:
 [Type] [Name] : [Tag];

Acceptable Fields

The following fields can be written in the structure in any order.

Type(s)NameTagNotes
float4vertexPOSITIONThe position of the vertex in local space (model space)
float3normalNORMALThe normal of the vertex
float4texcoordTEXCOORD0The UV coordinate for that vertex. Mesh being rendered must have at least one texture coordinate. The third and fourth floats in the vector represent a 3rd UV dimension and a scale factor, and are rarely if ever used.
float4texcoord1TEXCOORD1A second set of UV coordinates for the vertex. (Only two are supported.) Always present, but often not used.
float4tangentTANGENTAll meshes have either calculated or imported tangents.
float4colorCOLORThe color value of this vertex specifically. Mesh must have colors defined, otherwise they default to <TODO>.

<TODO: Complete this list>

Built-In

Base structure, contains the least amount of data that most shaders will use.

 struct appdata_base
 {
     float4 vertex   : POSITION;  // The vertex position in model space.
     float3 normal   : NORMAL;    // The vertex normal in model space.
     float4 texcoord : TEXCOORD0; // The first UV coordinate.
 };

Tangents included - tangents are used to rotate the normals of normal maps when the normal maps are also rotated. Use this structure if you wish to intervene in their calculation process and manipulate them. If you do not want to manipulate tangents you may use the base structure instead since they will be calculated anyway. <TODO: Determine if the tangents need to be transformed if they are manipulated here, or if they can be left in model space.>

 struct appdata_tan
 {
     float4 vertex   : POSITION;  // The vertex position in model space.
     float3 normal   : NORMAL;    // The vertex normal in model space.
     float4 texcoord : TEXCOORD0; // The first UV coordinate.
     float4 tangent  : TANGENT;   // The tangent vector in model space (used for normal mapping).
 };

All the possible fields you can derive from a mesh about to be rendered are in this structure.

 struct appdata_full
 {
     float4 vertex    : POSITION;  // The vertex position in model space.
     float3 normal    : NORMAL;    // The vertex normal in model space.
     float4 texcoord  : TEXCOORD0; // The first UV coordinate.
     float4 texcoord1 : TEXCOORD1; // The second UV coordinate.
     float4 tangent   : TANGENT;   // The tangent vector in Model Space (used for normal mapping).
     float4 color     : COLOR;     // Per-vertex color
 };

Vertex Shader to Fragment Shader Structure (v2f)

The second structure contains information generated by the vertex shader which is passed to the fragment shader. The vertex shader calculates and returns these values on a per-vertex basis. An interpolator then then calculates these same values on a per-pixel basis when the connected polygons are rasterized. The interpolated values are then used by the fragment shader. To create your own v2f structure, they must conform to the formatting and limitations outlined below. See the built-in v2f structures below for an example.

Format

 Structure:
 struct [Name]
 {
     [One or more Fields]
 };
 
 Field:
 [Type] [Name] : [Tag];
 or
 [Type] [Name];

Acceptable Fields

The following fields can be written in the structure in any order.

Type(s)NameTagDescriptionNotes
float4posSV_POSITIONThe position of the vertex after being transformed into projection space.Structure must contain exactly one field tagged SV_POSITION.
float3NORMALThe normal of the vertex after being transformed into view space.Structure must contain exactly one field tagged with NORMAL if the subsequent surface or fragment shader uses normals. <TODO: Verify>
float4uvTEXCOORD0First texture coordinate, or UV.
float4TEXCOORD1Second texture coordinate, or UV.Currently only two UV coordinates are supported per vertex, but you may bypass this by defining custom fields which act as additional UV coordinates.
float4TANGENTTangents are used to correct normal maps when they are viewed from different angles. Normal maps have incorrect values when they are rotated without processing from tangents.
float4, fixed4diffCOLOR0Vertex color, interpolated across the triangle. This value could correspond to anything depending on how the fragment shader interprets it.
float4, fixed4specCOLOR1Vertex color, interpolated across the triangle. This value could correspond to anything depending on how the fragment shader interprets it.
AnyAnyUser-defined fields which can be assigned any value.Custom fields can have any type and any name, but may not have a tag. The upper limit on the number of custom fields is not known. <TODO: Research>

<TODO: Complete this list>

Built-In

This structure is designed specifically for implementing image effects. See also vert_img.

 struct v2f_img 
 {
    float4 pos : SV_POSITION;
    half2 uv   : TEXCOORD0;
 };
 struct v2f_vertex_lit 
 {
   float2 uv	: TEXCOORD0;
   fixed4 diff	: COLOR0;
   fixed4 spec	: COLOR1;
 };  

<TODO: Complete list.>

Surface/Fragment Shader to Lighting Shader Structure (SurfaceOutput)

The third and final structure contains pixel values returned by either a surface or fragment shader. They are read as input to a lighting shader (such as Lambert, BlinnPhong or a custom lighting model) which then returns a single RGBA color value.

Format

 Structure:
 struct [Name]
 {
     [One or more Fields]
 };
 
 Field:
 [Type] [Name];

Note that tags are not used in SurfaceOutput structures.

Acceptable Fields

The following fields can be written in the structure in any order.

Type(s)NameDescriptionNotes
float3, fixed3, half3AlbedoThe reflectance color and intensity of diffuse lighting. Diffuse lighting approximates the appearance of rough surfaces. Diffuse lighting calculations are multiplied with this value.
float3, fixed3, half3NormalA vector representing the direction the surface is facing in screen space.
float3, fixed3, half3EmissionThe color and intensity of emissive lighting. The emissive color will appear even in a completely black scene with no lights. Emissive lighting appears as though light is being created from the surface itself and is generally the most apparent in the absence of light. Glow-in-the-dark objects and computer instruments are examples of surfaces which might use emissive lighting.
float, fixed, halfSpecularThe reflectance color and intensity of specular lighting. Specular lighting approximates the appearance of shiny surfaces. Specular lighting calculations are multiplied with this value.
float, fixed, halfGlossThe sharpness of specular lighting. The higher this value is, the smaller the specular highlights will be. The range is 0-1, where 1 creates a pin-point highlight, and 0 is broad/flat. <TODO: Determine the exponent values this range uses.>
float, fixed, halfAlphaUsed for transparency, if render states are set up for alpha blending and the lighting shader interprets it as transparency (and it does by default).
AnyAnyUser-defined fields which can be assigned any value.Custom fields can have any type and any name, but may not have a tag. The upper limit on the number of custom fields is not known. <TODO: Research>

<TODO: Can different types be used other than the ones listed? Example, Albedo using float4 instead of float3.>

Built-In

Default structure; must be used unless you have implemented your own custom lighting shader.

 struct SurfaceOutput
 {
     half3 Albedo;
     half3 Normal;
     half3 Emission;
     half Specular;
     half Gloss;
     half Alpha;
 };


Surface Shader input structure (Input)

The input structure Input generally has any texture coordinates needed by the shader. Texture coordinates must be named "uv" followed by texture name (or start it with "uv2" to use second texture coordinate set).

Additional values that can be put into Input structure:

  • float3 viewDir - will contain view direction, for computing Parallax effects, rim lighting etc.
  • float4 with COLOR semantic - will contain interpolated per-vertex color.
  • float4 screenPos - will contain screen space position for reflection effects. Used by WetStreet shader in Dark Unity for example.
  • float3 worldPos - will contain world space position.
  • float3 worldRefl - will contain world reflection vector if surface shader does not write to o.Normal. See Reflect-Diffuse shader for example.
  • float3 worldNormal - will contain world normal vector if surface shader does not write to o.Normal.
  • float3 worldRefl; INTERNAL_DATA - will contain world reflection vector if surface shader writes to o.Normal. To get the reflection vector based on per-pixel normal map, use WorldReflectionVector (IN, o.Normal). See Reflect-Bumped shader for example.
  • float3 worldNormal; INTERNAL_DATA - will contain world normal vector if surface shader writes to o.Normal. To get the normal vector based on per-pixel normal map, use WorldNormalVector (IN, o.Normal).

Functions

ShaderLab comes packaged with built-in, or "intrinsic" functions. Many of them are based on the intrinsic functions provided by shader languages like CG, GLSL and HLSL, while others are unique to ShaderLab.

<TODO: Complete this section.>

See Also

Preprocessor Directives

Preprocessor directives are special statements which tell the compiler specifically how to handle the code. They are similar to tags and render states. Below is a list of different directives:

Preprocessor DirectiveOptionArgumentDescriptionNotes
#include(Path of filename in quotations)Includes code written in another file with the extension .cginc. For example,#include "UnityCG.cginc"is commonly used and contains several helper functions. You may write your own CGINC files as well. SeeBuilt-In CGINC files for a list of include files already provided by Unity.
#pragmatarget2.0 or defaultCompiles the shader under shader model 2. Model 2 has more limitations than 3 but is more compatible. Uses shader model 1.1 for vertex shaders.Vertex: 128 instruction limit. Fragment: 96 instruction limit (32 texture + 64 arithmetic), 16 temporary registers and 4 texture indirections.
3.0Compiles the shader under shader model 3. Model 3 is more powerful and flexible than 2 but is less compatible.Vertex: no instruction limit. Fragment: 1024 instruction limit (512 texture + 512 arithmetic), 32 temporary registers and 4 texture indirections. It is possible to override these limits using#pragma profileoptiondirective. For example, #pragma profileoption MaxTexIndirections=256raises texture indirections limit to 256. See #pragma profileoption for more information. Note that some shader model 3.0 features, like derivative instructions, aren't supported by vertex or fragment shaders. You can use #pragma glsl to translate to GLSL instead which has fewer restrictions. See#pragma glsl for more information.
surface(Name of surface shader)Tells the compiler which function is meant to be used as a surface shader.When writing custom surface shaders, this option MUST be written, and it MUST be written first.
(Name of lighting shader, minus the "Lighting" prefix. For example "LightingCookTorrence()" would be supplied here as "CookTorrence".)Tells the compiler which function is meant to be used as a lighting model. See Built-In lighting modelsfor a list of lighting models already provided by Unity. You may write your own lighting models as well.When writing custom surface shaders, this option MUST be written, and it MUST be written second.
alphaTest:(Property Name)Similar to therender stateAlphaTest, except it only culls alpha values less than or equal to the provided value.Both the alpha test render state and preprocessor directive can be used together although their interaction is unclear. Unlike AphaTest, you may only use properties (like _Cutoff) and not constants (like 0.5).
vertex(Name of vertex shader)Tells the compiler which function is meant to be used as a vertex shader.When writing custom vertex or fragment shaders with #pragma target 3.0 the compiler MUST know which vertex shader to use. You may provide your own vertex shader but if not you may use one of Unity's built in vertex shaders.
fragment(Name of fragment shader)Tells the compiler which function is meant to be used as a fragment shader.When writing custom vertex or fragment shaders with #pragma target 3.0 this directive MUST be written. This option MUST be written first with any shader model. You may provide your own fragment shader but if not you may use one of Unity's built in fragment shaders.
vertex:(Name of vertex shader)Tells the compiler which function is meant to be used as a vertex shader.When writing custom vertex or fragment shaders with #pragma target 3.0 the compiler MUST know which vertex shader to use. You may provide your own vertex shader but if not you may use one of Unity's built in vertex shaders.
fragmentoption<TODO: Add option here.><TODO: Add description here.><TODO: Add option notes here.>This directive has no effect on vertex programs or programs that are compiled to non-OpenGL targets.
<TODO: Add option here.><TODO: Add description here.><TODO: Add option notes here.>
only_renderers
exclude_renderers
glsl
profileoption

See Also


반응형

'Unity3D > Shader' 카테고리의 다른 글

Unity3d Shader Syntax Highlighting(Visual Studio 2010 또는 2012)  (0) 2014.07.21
Unity Shader 공부  (0) 2014.07.16
유니티 셰이더의 기초  (0) 2014.06.28
Unity Shader Reference  (0) 2014.06.24
Rendering Order - Queue tag  (0) 2014.06.24
Posted by blueasa
, |