본문 바로가기

Shader

스크립트에서 쉐이더에 변수 전달하기.

.shader



Shader "MyShader"

{

Properties

{

....

}


SubShader

{

            int A;    // 전달받을 변수

            float B;    // 전달받을 변수

            sampler2D C;    // 전달받을 변수

            sampler3D D;    // 전달받을 변수

}


※ SubShader 에다 변수를 선언하고....



using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class MyClass: MonoBehaviour {


private Material myMaterial;    // 쉐이더에 접근할 머트리얼

private myMaterial= new Material(MyShader);    // MyShader를 적용



// 넘길 데이터

int intData;

float floatData;

Texture2D Texture2DData;

Texture3D Texture3DData;


void Update()

{


///// 변수 적용, 변수 넘기기

      myMaterial.SetInt("A", intData);


      myMaterial.SetFloat("B", floatData);


      myMaterial.SetTexture("C", Texture2DData);


      myMaterial.SetTexture("D", Texture3DData);


.......


///// 변수 적용, 변수 받아오기

      Debug.Log(myMaterial.GetInt("A"));


      Debug.Log(myMaterial.GetFloat("B"));


      Debug.Log(myMaterial.GetTexture("C"));


      Debug.Log(myMaterial.GetTexture("D"));

}

}



int, float, texture 이외에도 많은 자료형을 지원함.