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

카테고리

분류 전체보기 (2328)N
Unity3D (572)N
Programming (472)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (34)
3DS Max (3)
Game (12)
Utility (116)
Etc (92)
Link (31)
Portfolio (19)
Subject (90)
iOS,OSX (38)
Android (13)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (1)
Memories (19)
Interest (37)
Thinking (36)
한글 (26)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (2)
냥이 (9)
육아 (9)
Total1,346,224
Today30
Yesterday132
Statistics Graph

달력

« » 2019.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

공지사항

태그목록

This is an easy task with fontforge.


First, you want to open the font with the missing glyphs and select Element -> Merge Fonts. In this example, the glyphs for E and F are the ones missing. Element->Merge Fonts

Select the font from which you want to pull glyphs. You will be asked whether you want to keep the existing kerning; you most likely want to select No here, but if you get strange results close fontforge and try again with Yes.Kerning dialog

The missing glyphs should be added in a few moments:Result in main fontforge window

Finally, do File -> Generate Fonts and export your font to a desired location.



[출처] http://superuser.com/questions/490922/merging-two-fonts

Posted by blueasa
TAG FontForge

댓글을 달아 주세요

한글을 사용하는 프로그래머를 위한 폰트 라는 글을 포스팅 한적 있습니다.
여기서 Bitstream Vera Sans Mono 폰트와 맑은 고딕 폰트를 합친 폰트를 제작 해서 배포 했습니다.
하지만 저작권 문제를 배포를 중단하고 있습니다.
그래서 이번에는 제작하는 방법을 포스팅해 볼려고 합니다.


준비물

  • FontCreator
    • 최신 버전은 6.0인데, 이걸 받으면 저장이 되지 않습니다 ^^;;; 그래서 예전 버전을 올려 드리겠습니다.
    • 쉐어웨어 이지만 30일 사용할 수 있으니.. 폰트만 제작하고 지우시면 됩니다.

  • Bitstream Vera Sans Mono 폰트
    • 아래 사이트에 가셔서 다운 받으셔도 되고 공개 폰트 이므로 올려 놓겠습니다.
  • 맑은 고딕 폰트
    • Vista를 쓰신다면 윈도우에 기본으로 설치 되어 있습니다.
    • MS에서 다운로드 받으실 수도 있습니다.
    • 2번째 까지 여의치 않으시다면 구글이나 네이버 검색으로 받으실 수 있습니다 ^





FontCreator 설치
별거 없습니다. ^^;; 그냥 Next만 누르면 설치가 됩니다.
그리고 프로그램을 띄우면 인증하라고 나옵니다.

Use Evaluation Versiond을 클릭하시면 됩니다. 
그런데 이게 띄울때 마다 버튼의 위치가 바뀝니다 ^^;; 
잘 찾아서 눌러주세요.







폰트 편집하기
File > Open > Font File로 Bitstream Vera Sans Mono 폰트(이하 영문폰트)를 엽니다.
영문 폰트외에 사용하지 않을 폰트를 제거 합니다.
첫폰트를 선택하고 끝에서 Shift를 누르고 클릭하면 선택이 됩니다. Del키를 눌러서 삭제 합니다.

저같은 경우에는 물결글자(~) 이후 폰트를 제거 하고 나머지는 맑은고딕 폰트(한글폰트)를 사용하였습니다.

File > Open > Font File로 맑은고딕 폰트를 엽니다.

이 파일도 마찬가지로 물결글자(~)이후의 문자를 모두 선택합니다.
(팁으로 처음부터 물결까지 선택을 하신뒤 Ctrl+T를 누르면 전체가 선택이 됩니다.)
Edit > Copy를 선택해서 복사를 합니다.(단축키 : Ctrl + C)
(사양에 따라서 시간이 많이 걸릴 수도 있습니다. 반응이 없더라고 참고 기다리세요 ^^;)
그리고 밑에 있는 12649 glyphs selected를 잘 기억합니다.
복사된 폰트의 갯수 입니다.

그리고 다시 Ctrl+Tab키를 눌러서 열어 두었던 영문 폰트 창으로 이동 합니다.


그리고 메뉴에서 Insert Glyphs를 선택합니다.
좀 전에 기억해 두었던 숫자를 Insert glyph(s)에 입력합니다.
그리고 체크 박스는 After last glyph로 선택하고 OK를 누릅니다.
(다음을 진행하기 전에 꼭 빈공간이 선택되어 있어야 합니다. 위 다이얼로그에서 진행하고 나면 자동으로 빈공간이 선택되어 있어서 그냥 진행합니다.)
그리고 메뉴에서 Edit > Paste Special을 선택합니다.


다음과 같은 다이얼로그가 나오면 Items는 전체를 다 선택해 주시고 Add mappings를 선택하고 OK를 누릅니다.
그러면 이번에는 정말 소식없이 기다립니다 -_-;;
사양에 따라서 다르지만, 저 같은 경우에는 1분 정도 기다리는거 같습니다.
폰트의 갯수가 많아 질 수록 더 기다리고요 ^^;
죽은거 아니니까 참고 기다리세요.

기다리고 나면 기본 폰트가 완성 된겁니다.

그리고 약간의 손을 봐 줘야 합니다.

메뉴에서 Font > Settings를 선택합니다.

Unicode Character Ranges에서 Calculate를 누르시고 Code Page Character Ranges에서는 Edit를 누르시면 됩니다.


위와 같은 화면에서 Korean Wansung(949)를 추가해 주시면 됩니다.
Code Page Character Ranges에서는 Calculate를 누르지 마세요. 언어 선택할 때 귀찮아 지고, 코드가 많이 추가 되는데, 폰트를 사용할 때 원하는 대로 안 되는 경우가 있습니다.

여기 까지 하시면 폰트를 합치는 작업은 완료가 됩니다.

메뉴에서 File > Save As하셔서 저장하고 사용하시면 됩니다 ^^*


[인증 스샷~ ^ ^*]


추가사항

  1. 맑은 고딕만 합치게 되면 일본어나 한자 폰트가 나오지 않습니다. 일본어나 한자 폰트가 필요하신 분은 Arial Unicode MS폰트의 일본어와 한자 폰트를 위와 같은 방법으로 합치시면 됩니다. 굴림이나 돋음 폰트에서도 합칠 수 있는데, 거기는 한자가 좀 모자르더군요.
  2. 한글폰트를 기본으로 영문폰트를 합칠 수도 있습니다. 하지만, 이렇게 할 경우에는 폰트의 폭이나 설정이 있어서.. 영문에다가 한글을 합치는게 조금 쉽습니다.
  3. 폰트를 완성했는데... 이름을 바꾸고 싶으신 분도 계시죠? 그런 분들은 메뉴에서 Format > naming에 가셔서 이름을 바꿔서 사용하시면 됩니다.




다른 프로그램

  • fontforge라는 프로그램도 있습니다. 무료에 공개 입니다. 모든 플랫폼을 지원한다고 되어 있기는 한데 -_-, 리눅스 용입니다. 윈도우에서는 cgwin을 사용해서 실행합니다. 사용하기는 좀 복잡하지만, 스크립트를 사용하면 좀 더 우아하게 폰트를 합칠 수 있습니다.



[출처] http://gyuha.tistory.com/245

Posted by blueasa

댓글을 달아 주세요


[링크] https://brunch.co.kr/@brunchgulb/10



[경량화 프로그램 링크] http://opentype.jp/subsetfontmk.htm


[경량화 방법 정리] https://spoqa.github.io/2015/10/14/making-spoqa-han-sans.html


[각 언어별 필수 글자들 모음]

jp.txt

kr.txt

sc_간체(중국본토).txt

tc_번체(대만).txt

kr_jp_간체_번체.txt



Posted by blueasa

댓글을 달아 주세요

유니티를 기반으로 모바일 게임을 만들고, 다른 나라로 Localizing 작업을 할 때 여러가지 최적화를 할 것이다.

여러가지 최적화 기법중 우리가 가장 애먹는게 아마도 용량이 아닐까 생각한다.

텍스쳐 용량은 그런대로 줄였다고 하자. 문제가 되는 것은 두번째의 폰트용량이다.

각각의 나라에 맞춘 폰트는 용량이 비대하게 늘어나기 시작할 것이며, 50M를 넘는일이 빈번하게 될 것이다.

여기서 쉬운 방법은 첫째 라이브 서버를 구축하므로써 서버로 데이터를 받던가.

두번째는 50M를 넘어서 그냥 올리는 방법일 것이다.


하지만 Packed Fonts 방법을 이용하면 폰트의 최적화가 가능해진다.


먼저 링크를 공유한다.


Youtube Link : https://www.youtube.com/watch?v=dY6jQ7d2ius


위 링크에서는 Packed Fonts 를 만드는 방법을 자세하게 서술하고 있다.


링크를 보지 않은 사람들을 위해 글로 정리를 하자면


1. R G B A의 각각 채널에 문자를 저장하는 방법이다.

2. R G B A 각각 채널에 문자를 저장하므로써 기존 2048 * 2048의 문자 텍스쳐가 4개가 있었다면 한개로 정리가 되므로 약 70M를 줄일 수 있게된다.


하지만 이런 장점에도 단점이 있으니..


1. 각각 RGBA 채널에 저장하므로 그림자등 고퀄리티의 효과를 사용할 수 없다.

2. 알파블랜딩이 불가능해진다.

3. NGUI Atlas 사용이 불가능하다.


여러모로 계륵같은 기능이지만. 폰트가 엄청 많고 그만한 대가를 수반할때는 사용이 가능할 듯 싶다.



[출처]

http://vallista.tistory.com/entry/Unity-Packed-Fonts-%ED%8F%B0%ED%8A%B8-%EC%B5%9C%EC%A0%81%ED%99%94

Posted by blueasa

댓글을 달아 주세요

유니티를 해보면서 느낀점이라면 여러가지 이겠지만 , 역시 여타 다른 게임 엔진들과 같은 불편 사항을 가지고 있다.

그것은 바로 텍스트 렌더링 이다. Adobe flash 나 Microsoft WPF , Silverlight 등 과 같은 플랫폼들은 쉽게 텍스트를 렌더링 하고 그것을 변형 과 업데이트가 가능지만 , 유니티를 비롯한 여러 엔진들은 편리한 텍스트 렌더링을 지원하지 않는다. 그래서 대부분 비트맵 폰트의 형태를 만들어서 사용을 하지만 폰트의 크기나 문자수에 따라 부하가 걸리기 마련이다. xna 시절에 WPF 나 윈폼의 텍스트박스 컴포넌트를 비트맵으로 가져와 랜더링 하는 아이디어를 착안하여 유니티의 GUIText 를 통하여 문자열을 실시간으로 불러 와 보겠다.




1) 먼저 GUIText 하나를 만들어 본다.




2) GUIText 가 무사히 나오고 있다.





3) 별도의 텍스쳐를 렌더링할 카메라를 생성한다. 


* 추가로 오디오 리스너를 꺼주어야한다





4) 기존 메인 카메라와 햇갈리지 않도록 이름을 지정 하고 

뎁스를 기존 메인 카메라보다 뒤로 미루어 렌더링우선순위를 뒤로 미룬다.





5) 텍스트가 찍힌 텍스쳐를 입혀볼 큐브를 만든다. 



6) 간단히 빛을 추가하자




7) 다시 GUIText 로 돌아와서 레이어를 이동시키자.


* 추가로 TextLayer 를 만든다.



8) 텍스트를 랜더링할 카메라를 선택하여 컬링마스크의 레이어를 TextLayer 만 선택되도록 한다.




9) 메인 카메라의 컬링 마크스 는 TextLayer 가 랜더링 되지 않도록 한다.



10) GUIText도 텍스트레이어로 이동 시킨다.




11) 그러면 일단 화면에서 텍스트는 사라졌다.



12) 이제 렌더 텍스쳐 하나를 만들자 , 렌더타겟과 비슷한 개념이다. 


* 이름을 간단히 지정했다.



13) 텍스쳐 카메라 의 TextureTarget 을 방금 만든 렌더텍스쳐로 지정한다.




결과 , 큐브에 추가 된다.




14) 이제 배경을 지울 차례이다. 내장 쉐이더의 Bumped Diffuse 를 선택한다.



* 배경이 사라졌다.



좀더 명확히 해보았다.




이제 이 렌더된 텍스트를 실제로 사용하기위해 바이트배열로 저장해보겠다.

여타 다른 엔진들의 렌더타겟 사용법과 비슷하다. 렌더텍스쳐를 액티브 시키고 , 그 영역만큼 텍스쳐로 픽셀을 넣는다.

또한 주의할점은 TextCamera를 업데이트 시키고 그다음 이루어져야 한다. 안그러면 한프레임 전의 화면이 출력된다.


큐브에 사용한 스크립트는 아래와 같다

using UnityEngine;
using System.Collections;
using System.IO;
public class TexControl : MonoBehaviour {

	public GUIText text ;
	public Camera textCamera;
	void Start () {
		
	}
	
	
	int c = 0 ;
	public void capture()
	{
		text.text = (++c) + "STR";
		
		textCamera.Render();
		RenderTexture rt = gameObject.renderer.material.mainTexture as RenderTexture;
		Texture2D capturedText = GetRenderTexturePixels(rt);
		
		byte[]data = capturedText.EncodeToPNG();
		FileStream fs = new FileStream("/Users/superSc1/Desktop/test.png" , FileMode.OpenOrCreate );
		fs.Write(data , 0 , data.Length);
		fs.Close();
		
		Texture2D.DestroyImmediate(capturedText , true); // destory texture2d
		
		
		print("Capture");
	}
	
	
	public Texture2D GetRenderTexturePixels(RenderTexture tex)
	{
		RenderTexture.active = tex;
		
		Texture2D tempTex = new Texture2D(tex.width , tex.height );
		tempTex.ReadPixels( new Rect(0,0,tex.width , tex.height) , 0 , 0);
		tempTex.Apply();
		
		return tempTex;
	}
	
	void Update () {
		if(Input.GetKeyDown(KeyCode.C))
		{
			capture();
		}
	}
}




출처 : http://yamecoder.tistory.com/235

Posted by blueasa

댓글을 달아 주세요


'3D Text'를 사용하려고 화면에 올려 놨더니....

 

 

위 스크릿 샷을 보면 같은위치에 있는 3d text를 다른 방향에서 보았을때 항상 다른 오브젝트를 무시하고 화면에 텍스트가 출력되는걸 볼 수 있습니다.

이것만 봐서는 '3D Text'의 기본 동작이 게임 오브젝트(Game Object)가 아니라 'UI'인것 같습니다.

 

우리가 원하는건 '3d text'가 다른 오브젝트들 처럼 다른 오브젝트 뒤로 가면 뒤로 간 부분은 보이지 않았으면 하는 것인데 말이죠.

 

이렇게 말이죠.

 

 

1. 해결방법

검색을 해보니 '3D Text'의 기본 쉐이더는 'GUIText'라고 합니다.

어쩐지 -_-;;

 

결국 새로운 쉐어더를 만들어야 하나 봅니다.

 

다행히 이것을 설명한 자료를 찾았습니다.

참고 : 유니티3D 위키 - 3DText

 

여기의 설명에 따르면 쉐이더를 만들고 폰트 텍스쳐를 지정하면 된다고 합니다.

 

 

1-1. 쉐이더(Shader) 만들기

Project > Create > Shader

을 선택하여 새로운 쉐이더를 만듭니다.

 

전 'My3DText'로 만들었습니다.

 

쉐이더코드는 다음과 같이 넣습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Shader "Custom/My3DText"
{
    Properties {
       _MainTex ("Font Texture", 2D) = "white" {}
       _Color ("Text Color", Color) = (1,1,1,1)
    }
 
    SubShader {
       Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
       Lighting Off Cull Off ZWrite Off Fog { Mode Off }
       Blend SrcAlpha OneMinusSrcAlpha
       Pass {
          Color [_Color]
          SetTexture [_MainTex] {
             combine primary, texture * primary
          }
       }
    }
     
}

 

 

 

 

 

 

1-2. 메트리얼(Material) 만들기

Project > Create > Material

을 선택하여 새로운 텍스쳐를 만듭니다.

여기서도 'My3DText'로 이름을 만들었습니다 ㅎㅎㅎ

 

 

(1) 쉐이더를 'My3DText'로 선택 합니다.

 

 

 

(2) 폰트를 추가 합니다.

프로젝트에 폰트를 추가 합니다.

전 나눔폰트를 추가 했습니다.

 

 

폰트를 추가한후 폰트 텍스쳐(Font Texture)가 생성되었는지 확인 합니다.

만약 생성이 되지 않았다면 다른 폰트 파일을 써야 할듯 하네요.

 

추가한 폰트는 '3D Text'에 지정해주셔야 합니다.

여기서 주의 해야 할것이 폰트를 먼저 바꿔주지 않으면 메트리얼이 적용되지 않는 경우가 있습니다.

(버그인듯 하네요)

먼저 폰트를 적용한후 매트리얼을 적용해 주세요.

 

 

(3) 텍스쳐 지정하기

 

아까만든 메트리얼에 폰트 텍스쳐를 지정합니다.

 

드래그를 해서 넣어도 됩니다.

 

 

1-3. 메트리얼 적용

이제 '1-2.'에서 만든 메트리얼을 '3D Text'에 적용 합니다.

 

 

 

2. 테스트

이제 매트리얼을 '3D Text'에 적용하고 테스트를 해봅시다.

마우스로 클릭한 상태로 카메라를 움직여 보세요.

(오른쪽 클릭도 가능합니다.)

마무리

그런데 이게 문제가 폰트칼라가 먹질 않습니다 ㅡ.-;;

매트리얼에 폰트칼라를 줬다가는 모두다 같은 색이 되죠 ㅎㅎㅎㅎ

이건 좀 생각 해봐야 할것 같네요.



출처 : http://blog.danggun.net/2256

Posted by blueasa
TAG 3d text

댓글을 달아 주세요

Font fallBack

Unity3D/Font / 2016. 1. 5. 09:37

1.     Unity Font fallBack 기능
현재 폰트에 표현하지 못하는 글자가 있을 때다른 폰트를 참조할 수 있도록 검색할 폰트리스트를 적어둔다.
http://forum.unity3d.com/threads/text-characters-not-visible-in-the-built-game-app.225594/

2.     예를 들어 현재 폰트가 Thai Bold폰트일 때 Thai어는 bold효과가 있지만다른 기본글자(영문자)는 효과가 없이 나온다.

따라서, fallBack기능과 더불어 사용할 때에는 우선순위를 잘 정해야 모두 Bold효과가 나올 수 있다.

3.     Unity freeType 라이브러리를 사용한다.
http://www.soen.kr/lecture/library/freetype/ft1.htm
폰트 타입에 상관없이 모든 폰트를 다루며글자마다 폰트에 있는 글자인지 판단하기 때문에
여러 글자가 섞여 있어도 fallBack List의 폰트를 가져오게 된다.

4.     지금까지의 테스트로는 Noto Sans CJK를 기본으로 Noto Sans Thai fallBack List에 추가를 하여 사용하는 것이 
가장 좋은 것 같다.

 

Noto Sans : 영문자스페인어 지원 / 한글중국어는 기본 텍스트 또는 안나올지도

Noto Sans CJK : 중국일본한국어영문자스페인어 타이어 안나옴

Noto Sans Thai : 타이어 / 한글영문자 기본 텍스트 또는 안나올지도







Noto Sans CJK와 Noto Sans Thai를 assetBundle로 구성하여 패치로 다운 받게 했더니 fallBack 기능이 안되었다.

용량이 작은 Noto Sans Thai를 apk에 포함 시킨 채 , Noto Sans CJK만 assetBundle로 구성하였더니 되는 듯..


단, Noto Sans CJK를 assetBundle로 load할 때 fontNames를 설정 해야 한다.




출처 : http://jenemia.tistory.com/315

Posted by blueasa
TAG fallback, font

댓글을 달아 주세요