fullstack

'전체 글'에 해당되는 글 76건

  1. blender에서 3d nft random generate 하는 법
  2. [Unity] RequireComponent
  3. [Solidity] 함수제어자 modifier

blender에서 3d nft random generate 하는 법

Web3

FZRandomizer 3버전을 사용하여 blender에서 3d nft를 random generate 하는 법을 알아보겠습니다

 

우선 다음 링크에서 FZRandomizer 3를 무료로 다운받아줍니다

https://fruitzeus.gumroad.com/l/FZRandomizer

 

FZRandomizer 3

FZRandomizer is a blender addon which allows you to randomize characters & other mesh objects.READ ME:Terms & Conditions

fruitzeus.gumroad.com

그럼 FZRandomizer_3_0_3.py 와 같은 파이썬 파일을 하나 받게됩니다

 

 

그럼 이제 blender에서 Edit - Preferences 로 들어간 뒤, Add-ons 탭을 선택해 줍니다

다음으로 Install an add-on 버튼을 눌러 아까 받은 파일을 인스톨 해주면 됩니다

 

그럼 다음과 같이 FZRandomizer 가 추가된 것을 볼 수 있고,

체크박스가 표시되어 있어야 합니다

 

이제 blender 뷰포트의 오른쪽상단을 보면 다음과 같이 FZRandomizer 탭이 추가된 것을 볼 수 있습니다

 

먼저 Host Builder를 눌러줍니다

Host Builder를 이용하면 collection을 정의하여 자동으로 collection을 구성할 수 있습니다

먼저 Host Name을 입력후 Add Subcollection 버튼으로 추가하고 싶은 Subcollection을 추가해 줍니다

여기에서는 간단하게 head와 body만 추가해 보았습니다

 

그럼 다음과 같이 collection이 생성된것을 볼 수 있습니다

이제 여기에 각각 부위별 모델을 넣고 generate 하면 됩니다

 

이제 FZRandomizer 항목을 열어보겠습니다

뭔가 이것저것 많은데, 하나씩 설명해 보겠습니다

 

- unique 체크박스 표시

각각의 유니크한 결과물이 나오도록 표시해 줍니다

체크하면 중복된 결과물이 나오지 않습니다

 

- GENERATE 버튼

추출합니다

 

- Variants 조절

몇개를 추출할 것인지 값을 설정해 줍니다

 

- Calculate Possibilities 버튼

현재 나올 수 있는 조합갯수를 계산해 줍니다

 

- Rarity

카테고리안의 각각 오브젝트들의 확률을 조절합니다

 

- Rules

규칙을 도입하여 배치할 수 있습니다

예를들면, 특정오브젝트에는 어떤 특정오브젝트가 꼭 같이 나오도록 혹은 나오지않도록 설정할 수 있습니다

 

- Metadata

이미지와 같이 추출할 Metadata에 대한 설정을 할 수 있습니다

 

- Output

Output Path를 설정하고 렌더링을 진행합니다

 


그럼 이제 랜덤조합으로 모델을 추출해보고 렌더링 이미지에 해당 구성요소 정보를 포함하는 json까지 추출해 보는 과정을 해보겠습니다

 

여기서는 간단하게 큐브의 각도를 조절하여 body 2개와 head 3개로 조합으로 만들어 보겠습니다

 

그럼 Calculate Possibillities 버튼을 눌러보면 현재 나올수 있는 조합 갯수 2X3 이므로 6개로 표시됩니다

Varuants도 최대치인 6으로 설정하겠습니다

 

다음으로 Metadata 항목에서 Write To JSON을 체크하여 JSON파일을 뽑을수 있도록 합니다

Field 를 추가해 주어야 하는데 저는 name 과 attributes를 추가하였습니다

먼저 name에는 #1, #2, #3 이런식으로 순서번호가 이름으로 들어갈수 있게 하기위해 인덱스가 들어갈 위치에 __VAR를 추가해주면 됩니다

그리고 attributes 라고 추가를 하면 값에 [attributes] 라고 들어가게 되는데 여기엔 조합된 속성 정보가 자동으로 들어가게 됩니다

 

위 설정으로 추출된 JSON 예시입니다

{
    "name": "#1",
    "attributes": [
        {
            "trait_type": "body",
            "value": "body2"
        },
        {
            "trait_type": "head",
            "value": "head2"
        }
    ]
}

 

Rarity 나 Rules에 대한 자세한 설명은 생략하겠습니다

이제 설정이 완료되었다면 GENERATE 버튼을 눌러줍니다

 

그럼 Variants라는 collection이 생성이되고

아래 키프레임을 움직이면 생성된 모델들을 볼 수 있습니다

 

또한, 설정된 경로에 metadata라는 폴더가 생성되고 json파일들도 생성된것을 확인해 볼 수 있습니다

 

이제 Output에서 Path를 설정해 주고 Still Images를 선택합니다

그리고 Render Variants를 눌러주면 렌더링을 시작합니다

렌더링할 모델이 많을 경우 굉장히 오래걸릴 수 있으니, 콘솔창을 띄우고 진행상황을 확인하는것을 추천합니다

 

이제 설정된 경로의 폴더를 보면 모델들이 잘 렌더링 된 것을 확인해 볼 수 있습니다

 

[Unity] RequireComponent

Unity

RequireComponent는 게임 오브젝트에 꼭 필요한 컴포넌트를 스크립트로 작성하여 추가하는 것 입니다

[RequireComponent (typeof (Rigidbody))]

이렇게 작성을 하면 Rigidbody 컴포넌트가 해당 스크립트를 가진 게임 오브젝트에 자동으로 추가됩니다

 

다음은 예제 코드입니다

using UnityEngine;

// PlayerScript requires the GameObject to have a Rigidbody component
[RequireComponent (typeof (Rigidbody))]
public class PlayerScript : MonoBehaviour {
	Rigidbody rb;
	
	void Start() {
		rb = GetComponent<Rigidbody>();
	}
	void FixedUpdate()  {
		rb.AddForce(Vector3.up);
	}
}

 

이제 게임 오브젝트에 위 스크립트를 추가하면, Rigidbody 컴포넌트가 자동으로 추가되는 것을 볼 수 있습니다

이 게임 오브젝트의 Rigidbody 컴포넌트를 Remove Component 하려고 하면 다음과 같이 경고창이 나오는 것을 볼 수 있습니다

 

 

[Solidity] 함수제어자 modifier

Web3/Solidity

contract의 소유자만 호출할 수 있는 함수를 만들고 싶다고 가정해봅시다

함수의 첫 줄에 require문을 넣어 처리할 수도 있지만 더욱 좋은 방법은 함수제어자를 사용하는 것 입니다

 

함수제어자는 다음과 같이 만들 수 있습니다

modifier onlyOwner() {
  require(msg.sender == owner);
  _;
}

함수제어자는 위와같이 function 키워드 대신 modifier 키워드를 사용합니다

그리고 require 등으로 실행조건을 체크하고, 마지막에는 _; 으로 끝나야 합니다

 

그럼 함수에서 함수제어자를 사용해 보겠습니다

function withdraw() external onlyOwner {
  owner.transfer(this.balance);
}

위에서 만든 함수제어자 onlyOwner를 함수에 붙여주었습니다

그럼 이제 withdraw 함수가 호출되면 함수제어자 onlyOwner가 실행되고,

함수제어자 내부의 _; 부분에서 함수로 되돌아와 함수가 실행되게 됩니다

이제 이 함수는 contract의 소유자만이 호출할 수 있는 함수가 되었습니다

 

함수제어자를 이용하면 이처럼 특정조건에 부합할때만 함수가 실행되도록 간편하게 설정할 수 있습니다