ヘキサ日記 Blog

 

  • 2017年8月23日

    溶接とかやってみる

               

    こんにちはkayanuma.です。

    みなさんは溶接にご興味がおありでしょうか。
    たぶん無いと思います。
    今日は溶接の話です。

     

    ・ロマン

    金属と金属をくっつける溶接。半田付けなどという穏やかなものではなくバチッと火花を飛ばしてくっつけるあれ。
    あれをマスターすればなんでも作れる(気がする)。ロマンですよね。

    でもあれは簡単にはできなさそうだし大掛かりでちょっと恐い感じ。

     

     

    ・スポット溶接
    スポット溶接といわれるものをやってみます。
    自動車工場でロボットが火花を散らして溶接を行っているのを見たことがあると思います。

    こんなの(youtube:新型ノートも製作中…日産自動車九州で見た生産ライン)

    こんな大掛かりな組み立てにも使われる技術ですが、
    小規模で低電圧なものは比較的安全に作業がおこなえるので
    卓上で作業ができちゃったりします。

     

    ・今回はこんな感じ

    blog20170821_03

    いにしえのバッテリーバックアップつきのファミコンカセットを分解したことがあるでしょうか?

    写真のように金属板がついている電池が組み込まれていたりします。

    がっちり付いていて取り替えたりはできません。

    これもスポット溶接です。

    半田付けでよいのでは?と思ってしまいますが、
    半田付けだと熱で電池が痛むので、瞬間的に作業ができる溶接でくっつけてしまうのです。
    ★昔からこれがやりたかった。★

     

    ・作ってみた

    blog20170821_01
    作ってみたスポット溶接マシン。
    ”スポット溶接 DIY”でググると先人の知恵がいっぱい出て来ます。
    電子レンジから取り出したトランスを改造したり、自動車のバッテリーを何個もつないだりする本気な人の方法が出てきますが、
    恐ろしすぎるので比較的安全な”コンデンサ充電方式”でやってみました。

    馬鹿でかいコンデンサがついていますが、こいつにエネルギーを蓄えてから一気に放出させる仕組みです。
    金属を溶かしてくっつけるにはそれなりの大きな電流が必要ですが、充電させるACアダプタはそこらへんにある汎用の小さなものでOKです。

    電圧も30V以下でおこなえるので感電の危険性も低いのです。
    コンデンサは瞬間的に放電させる性能が高いのでこのような用途に適しています。

    blog20170821_08

    このような経路で電極棒から対象の金属板に電気が流れ、抵抗の大きい部分で発熱し、解けてくっ付くという理屈です。
    金属といえど接触部分でわずかな抵抗ができるのです。

    ★なぜ溶接棒と素材が溶接されないかというと
    溶接棒は銅など放熱性の高い金属で作られているため溶けるほど温度が上がらない・・ということらしいです。
    裏を返せばそのような金属への溶接は難しいということですね。

     

    ・やってみる

    blog20170821_02

    自作の電極。これは東急ハンズで売っていた銅でできた釘を流用しました。
    銅釘といっても純度何%なのか良くわからないですけど・・使えているのでいいかな。

     

    blog20170821_05
    二つのニッケル版を溶接してみます。
    ショートさせないようビニールテープを巻いています。

    blog20170821_04ついたかな?

    blog20170821_06ひっぱってみる。
    確かにくっついた! 
    でもすこし弱いかな。 電極をもっとちゃんとしたものにしたり、エネルギーを大きくするとか改良の余地がありそうです。


  • 2017年8月22日

    32とか16とかその7

               

    こんにちは。

     

    シュンスケです

     

    前回でGAの処理が確認出来たので、いよいよ減色に取り入れて、

    誤差拡散を超えてみようと思います

     

    まずは、前回も記載した方針の通り、修正を行っていきます。

    .使用する色を1チャンネル16色に制限する

    .現在開始画像が完全にランダムな絵だったのを、誤差拡散等で

     既にキレイな状態を出発点にする

    .評価式にPSNRを使用しているのを、SSIMに変更する

    .今までの突然変異だと変化が大きすぎて細やかな改善に向かないので、

     ごく一部の変異に修正

    .改善画像出力機能の作成

     

    評価式SSIMは、PSNRよりも人間の認識に近い画像評価方法として出てきたもので、

    画像の性質次第では事前にガウシアンフィルタによるノイズ除去を行うようです

    が、減色の性質や今回のテスト画像の性質から無しで行ってみようと思います。

    また、今回はチャンネル単位でSSIMを算出してその平均を画像の評価としています

    が、横1ライン毎の各チャンネルで算出したものの平均にするなど、細かく分ける

    のも有効そうです

     

    では、実行結果。

    まずはツールの様子

    20170823_ga_window

     

    そして、作成された画像

    20170823_ga_org

    20170823_ga_new

    上が誤差拡散、下がそれを元に改善した画像

     

    変わっ……った

     

    確かに数値は上がっているのですが、元が良いのもあり正直わかりません

     

    わかりやすいように、差分画像を作成しました。

    (差分0を0xffとしてわかりやすくしています)

     

    20170823_ga_diff

     

    こう見ると、まばらにでも思ったより多くの箇所が改善されている結果、

    評価値の向上に繋がっているようです

    後は、どういった画像に使用するのか、使える時間はどのくらいかで

    調整をしていけば、少なくとも SSIM基準による画質向上は見込めそうですが、

    なかなか実感できる程を目指すのは難しいようです。

    誤差拡散のお手軽さを考えると、この一線を超えるかは、 どこまでこだわるか

    との相談になりそうですね

     

    というわけで長きに渡って減色について続けてきたシリーズですが、

    ここで一旦の区切りとします。

     

    最後に今回のソースコードを貼っておきます。

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Windows.Forms;
    using System.IO;
    using System.Runtime.InteropServices;
    
    namespace Pic32bitTo16bitGA
    {
    	class Program : Form
    	{
    		struct Gene
    		{
    			// 2点交叉
    			public static void cross(ref Gene a, ref Gene b)
    			{
    				if( a.buf == null || b.buf == null ) return;
    
    				var len = a.buf.Length;
    				var r = new Random();
    				var index1 = r.Next(0, len);
    				var index2 = index1;
    				if( index1 > len / 2 ) {
    					index1 = r.Next(0, index2);
    				}
    				else {
    					index2 = r.Next(index1 + 1, len);
    				}
    				for( int i = index1; i <= index2; ++i ) {
    					var tmp = a.buf[i];
    					a.buf[i] = b.buf[i];
    					b.buf[i] = tmp;
    				}
    			}
    
    			// SSIM算出
    			private static double calcSSIM(byte[] x, byte[] y, int start, int end, int offset)
    			{
    				if( x == null || y == null || x.Length != y.Length || x.Length == 0 ) return 0;
    
    				// 事前計算
    				double c1 = (0.01 * 255) * (0.01 * 255);
    				double c2 = (0.03 * 255) * (0.03 * 255);
    				double avgX = 0, avgY = 0;	//!< 平均
    				double sdX = 0, sdY = 0;	//!< 標準偏差
    				double cov = 0;				//!< 共分散
    				double len = 0;
    				for( int i = start; i < end; i += offset, ++len ) {
    					avgX += x[i];
    					avgY += y[i];
    				}
    				avgX /= len;
    				avgY /= len;
    				len = 0;
    				for( int i = start; i < end; i += offset, ++len ) {
    					double dX = x[i] - avgX;
    					double dY = y[i] - avgY;
    					sdX += dX * dX;
    					sdY += dY * dY;
    					cov += dX * dY;
    				}
    				sdX = Math.Sqrt(sdX / len);
    				sdY = Math.Sqrt(sdY / len);
    				cov /= len;
    
    				// SSIM算出
    				return ((2 * avgX * avgY + c1) * (2 * cov + c2)) / ((avgX * avgX + avgY * avgY + c1) * (sdX * sdX + sdY * sdY + c2));
    			}
    
    			// コンストラクタ
    			public Gene(int w, int h)
    			{
    				buf = new byte[w * h * PIXEL_BYTES];
    				ssim = 0;
    			}
    
    			// 白で埋める
    			public void fillWhite()
    			{
    				if( buf == null ) return;
    
    				// 白色を埋める
    				for( int i = 0; i < buf.Length; ++i ) {
    					buf[i] = 0xff;
    				}
    			}
    
    			// SSIM算出
    			public void calcSSIM(byte[] org)
    			{
    				ssim = 0;
    				if( org == null || buf == null || org.Length != buf.Length || org.Length == 0 ) return;
    
    				var ssimR = calcSSIM(org, buf, 0, org.Length, 4);
    				var ssimG = calcSSIM(org, buf, 1, org.Length, 4);
    				var ssimB = calcSSIM(org, buf, 2, org.Length, 4);
    				var ssimA = calcSSIM(org, buf, 3, org.Length, 4);
    
    				// SSIM算出
    				ssim = (ssimR + ssimG + ssimB + ssimA) / 4.0;
    			}
    
    			// 突然変異
    			public void mutation()
    			{
    				if( buf == null ) return;
    
    				var r = new Random();
    				var index = r.Next(0, buf.Length);
    				var c = r.Next(0, RGBA4444_COLORS.Length);
    				buf[index] = RGBA4444_COLORS[c];
    			}
    
    			// 値を設定
    			public void set(Gene g)
    			{
    				set(g.buf);
    				ssim = g.ssim;
    			}
    
    			// バッファを元に値を設定
    			public void set(byte[] src)
    			{
    				if( src == null ) return;
    
    				if( buf == null || buf.Length != src.Length ) {
    					buf = new byte[src.Length];
    				}
    
    				Array.Copy(src, buf, buf.Length);
    			}
    
    			public byte[]	buf;
    			public double	ssim;
    		}
    
    		// 16bitカラーテーブル
    		private static readonly byte[] RGBA4444_COLORS = new byte[] {
    			0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
    		};
    		private const int PIXEL_BYTES				= 4;								//!< 1ピクセルあたりのバイト数
    
    		// エントリポイント
    		static void Main(string[] args)
    		{
    			// 元画像パス入力受付
    			Console.WriteLine("please input org picture path...");
    			var orgPath = Console.ReadLine();
    
    			// ファイル存在確認
    			if( !File.Exists(orgPath) ) {
    				Console.WriteLine("file not exists.");
    				return;
    			}
    
    			// 画像読み込み
    			byte[] orgBuf;
    			int orgW;
    			int orgH;
    			if( readImg(out orgBuf, out orgW, out orgH, orgPath) ) {
    				Console.WriteLine("org picture load failed.");
    				return;
    			}
    
    			// 開始画像パス入力受付
    			Console.WriteLine("please input start picture path...");
    			var startPath = Console.ReadLine();
    
    			// ファイル存在確認
    			if( !File.Exists(startPath) ) {
    				Console.WriteLine("file not exists.");
    				return;
    			}
    
    			// 画像読み込み
    			byte[] startBuf;
    			int startW;
    			int startH;
    			if( readImg(out startBuf, out startW, out startH, startPath) ) {
    				Console.WriteLine("start picture load failed.");
    				return;
    			}
    
    			// サイズ確認
    			if( orgW != startW ||
    				orgH != startH ||
    				orgBuf.Length != startBuf.Length ) {
    				Console.WriteLine("org picture size and start picture size are different.");
    				return;
    			}
    
    			// 出力先パスを作成
    			var dstPath = orgPath.Substring(0, orgPath.Length - Path.GetFileName(orgPath).Length) + Path.GetFileNameWithoutExtension(orgPath) + "_new" + Path.GetExtension(orgPath);
    
    			// フォーム開始
    			Application.Run(new Program(orgBuf, startBuf, orgW, orgH, dstPath));
    		}
    
    		// 画像読み込み
    		static bool readImg(out byte[] dst, out int width, out int height, string srcPath)
    		{
    			dst = null;
    			width = 0;
    			height = 0;
    			using( var img = Image.FromFile(srcPath, true) as Bitmap ) {
    				if( img == null ) {
    					Console.WriteLine("file type is not support.");
    					return true;
    				}
    				// メモリに保持
    				var dat = img.LockBits(new Rectangle(Point.Empty, img.Size), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
    				width = img.Width;
    				height = img.Height;
    				dst = new byte[width * height * PIXEL_BYTES];
    				Marshal.Copy(dat.Scan0, dst, 0, dst.Length);
    
    				// 解放
    				img.UnlockBits(dat);
    			}
    			return false;
    		}
    
    		// コンストラクタ
    		public Program(byte[] org, byte[] start, int w, int h, string dstPath)
    		{
    			if( org == null || start == null || dstPath == null ) return;
    
    			_org = org;
    			_start = start;
    			_img = new Bitmap(w, h);
    			_dstPath = dstPath;
    
    			// 第1世代生成
    			_startGen.set(_start);
    			_startGen.calcSSIM(_org);
    			for( int i = 0; i < _curGen.Length; ++i ) {
    				_curGen[i] = new Gene(w, h);
    				_curGen[i].set(_startGen);
    			}
    
    			// フォームのサイズ設定
    			ClientSize = new Size(w, h * 2);
    
    			// フォント作成
    			_font = new Font(Font.Name, 10);
    			_fontBrush = new SolidBrush(ForeColor);
    
    			// 出力ボタン作成、登録
    			_outBtn = new Button();
    			_outBtn.Location = new Point(300, 0);
    			_outBtn.Size = new Size(50, 20);
    			_outBtn.Text = "出力";
    			_outBtn.Click += new EventHandler(onClickOutBtn);
    			Controls.Add(_outBtn);
    
    			// 描画更新開始
    			_sec = 0;
    			_refreshTimer.Interval = 1000;
    			_refreshTimer.Tick += new EventHandler(refresh);
    			_refreshTimer.Start();
    
    			// 処理更新開始
    			_updateTimer.Interval = 1;
    			_updateTimer.Tick += new EventHandler(update);
    			_updateTimer.Start();
    		}
    
    		// 描画時処理
    		protected override void OnPaint(PaintEventArgs e)
    		{
    			base.OnPaint(e);
    			if( _img == null ) return;
    
    			// 元画像描画
    			if( _org != null ) {
    				var newDat = _img.LockBits(new Rectangle(Point.Empty, _img.Size), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
    				Marshal.Copy(_org, 0, newDat.Scan0, _org.Length);
    				_img.UnlockBits(newDat);
    				e.Graphics.DrawImage(_img, 0, 0);
    			}
    
    			// 生成画像描画
    			if( _topGen.buf != null ) {
    				var newDat = _img.LockBits(new Rectangle(Point.Empty, _img.Size), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
    				Marshal.Copy(_topGen.buf, 0, newDat.Scan0, _topGen.buf.Length);
    				_img.UnlockBits(newDat);
    				e.Graphics.DrawImage(_img, 0, _img.Size.Height);
    			}
    
    			// フレーム数表示
    			e.Graphics.DrawString("sec : " + _sec, _font, _fontBrush, 0, 0);
    
    			// 世代数表示
    			e.Graphics.DrawString("gen : " + _genCnt, _font, _fontBrush, 0, 10);
    
    			// SSIM表示
    			e.Graphics.DrawString("start ssim : " + _startGen.ssim, _font, _fontBrush, 100, 0);
    			e.Graphics.DrawString("top   ssim : " + _topGen.ssim, _font, _fontBrush, 100, 10);
    		}
    
    		// 描画更新
    		private void refresh(object sender, EventArgs e)
    		{
    			// 画面をリフレッシュ
    			++_sec;
    			Invalidate();
    		}
    
    		// 出力ボタン押下時処理
    		private void onClickOutBtn(object sender, EventArgs e)
    		{
    			if( _img == null || _dstPath == null ) return;
    
    			// トップの画像を書き出し
    			// 出力画像作成
    			var newImg = new Bitmap(_img.Width, _img.Height);
    			var newDat = newImg.LockBits(new Rectangle(Point.Empty, newImg.Size), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
    			Marshal.Copy(_topGen.buf, 0, newDat.Scan0, _topGen.buf.Length);
    			newImg.UnlockBits(newDat);
    			newDat = null;
    
    			// 保存
    			newImg.Save(_dstPath);
    			newImg.Dispose();
    			newImg = null;
    		}
    
    		// 処理更新
    		private void update(object sender, EventArgs e)
    		{
    			// 次世代初期化
    			for( int i = 0; i < _nextGen.Length; ++i ) {
    				_nextGen[i].fillWhite();
    			}
    
    			// 評価値算出
    			for( int i = 0; i < _curGen.Length; ++i ) {
    				_curGen[i].calcSSIM(_org);
    			}
    
    			// 評価値でソート
    			Array.Sort(_curGen, (a, b) => {
    				if( a.ssim == b.ssim ) return 0;
    
    				return (b.ssim > a.ssim) ? 1 : -1;
    			});
    
    			// 1位を保持
    			_topGen.set(_curGen[0]);
    
    			// 上位いくつかはそのまま残す
    			var newIndex = 0;
    			for( int i = 0; i < 2 && i < _nextGen.Length; ++newIndex, ++i ) {
    				_nextGen[newIndex].set(_curGen[i]);
    			}
    
    			while( newIndex < _nextGen.Length ) {
    				// 交叉対象1を選出(上位が選ばれやすいように)
    				_cross1Buf.set(_curGen[0]);
    				for( int i = 1; i < _curGen.Length; ++i ) {
    					var rate = _selectRnd.Next(0, 100);
    					if( rate < 10 ) {
    						_cross1Buf.set(_curGen[i]);
    						break;
    					}
    				}
    
    				// 交叉対象2を選出(上位が選ばれやすいように)
    				_cross2Buf.set(_curGen[1]);
    				for( int i = 2; i < _curGen.Length; ++i ) {
    					var rate = _selectRnd.Next(0, 100);
    					if( rate < 10 ) {
    						_cross2Buf.set(_curGen[i]);
    						break;
    					}
    				}
    
    				// 交叉
    				Gene.cross(ref _cross1Buf, ref _cross2Buf);
    				_nextGen[newIndex].set(_cross1Buf);
    				++newIndex;
    				if( _nextGen.Length <= newIndex ) break;
    
    				_nextGen[newIndex].set(_cross2Buf);
    				++newIndex;
    				if( _nextGen.Length <= newIndex ) break;
    
    				// 突然変異対象を選出
    				var mutIndex = _selectRnd.Next(0, _curGen.Length);
    				_nextGen[newIndex].set(_curGen[mutIndex]);
    				_nextGen[newIndex].mutation();
    				++newIndex;
    				if( _nextGen.Length <= newIndex ) break;
    
    				// そのままコピー
    				var copyIndex = _selectRnd.Next(0, _curGen.Length);
    				_nextGen[newIndex].set(_curGen[copyIndex]);
    				++newIndex;
    				if( _nextGen.Length <= newIndex ) break;
    			}
    
    			// 次世代を現世代に移す
    			for( int i = 0; i < _nextGen.Length; ++i ) {
    				_curGen[i].set(_nextGen[i]);
    			}
    			++_genCnt;
    		}
    
    		private Bitmap	_img			= null;
    		private byte[]	_org			= null;
    		private byte[]	_start			= null;
    		private string	_dstPath		= null;
    
    		private Timer	_refreshTimer	= new Timer();
    		private Timer	_updateTimer	= new Timer();
    		private Button	_outBtn			= null;
    		private Font	_font			= null;
    		private Brush	_fontBrush		= null;
    		private int		_sec			= 0;
    		private int		_genCnt			= 0;
    
    		private Gene[]	_curGen			= new Gene[128];
    		private Gene[]	_nextGen		= new Gene[128];
    		private Random	_selectRnd		= new Random();
    		private Gene	_cross1Buf		= new Gene();
    		private Gene	_cross2Buf		= new Gene();
    		private Gene	_topGen			= new Gene();
    		private Gene	_startGen		= new Gene();
    	}
    }
    

     

    では


  •            

    オッス!オラ「オクダ」

    まだまだ暑い日が続きますね~

    そして各地で大雨も多いです

    自然災害とともに体調にも気をつけたいですね

     

    夏休みどうでした?

    (学生さんはまだ続いてますね、、、うらやましい、、、)

    私は例によってキャンプと帰省で充実した日々をすごしていました

    20170821_1

    キャンプいいですね~

    20170821_2

    BBQしたり、燻製したり

    20170821_3

    夜は焚火!癒されます

     

     帰省は片道約600kmのロングドライブ

    その甲斐あって日本海の美しい海を毎日堪能できました

    20170821_4

    おかげでコンガリ焼けました

     

    さて、私の話はコレくらいで、、、

    ヘキサドライブでは大きな発表も目白押しでした

    先月末、中国で行われたゲームイベント「ChinaJoy2017」で

    『西遊記之大聖帰来(MONKEYKING HERO IS BACK THE GAME)』(仮称)が発表されました!

    20170818_1

    このタイトルの制作をヘキサドライブが担当しています!

    (トレーラー映像にもヘキサドライブのロゴが出てます)

    会場にはVR映像を体験できるブースを出展していたのですが、大盛況でした!

    リリースはまだ先ですが、ご期待ください!

    そして、スタッフ募集もしています!!(切実w)

     

    更に、新作ゲームもリリースしました!

    魔法パスワード1111

    Ficustone project第二弾!『魔法パスワード1111』です!

    若手ががんばって作ったタイトルです。

    是非プレイしてください!

    わかってますよね!是非プレイしてください!!

     

    そしてこの季節がやってきます、、、

    CEDEC2017

    もちろん皆さんも参加しますよね?

    今年から『タイムシフト配信』もスタートします

    都合がつかない人や遠方の方もコレで参加しやすくなりますね

    そして今回、講演をさせていただくことになりました!

    「若手小規模プロジェクト」のススメ

    ~昨今の業界における若手育成の問題点とその解決方法の提案~

     

    ハイエンドや運営向けのセッションが多いCEDECですが、今回は「若者」「教育」にスポットを当てた内容を話します。

    面白い話になるようにがんばりますので是非聴きにきてください

    (タイムシフト配信もされます)

     

    おっと、まだスライドが途中だった、、、、、、

     


  • 2017年8月18日

    節目

               

    こんにちは。さいやん、こと齊藤です。
    先日ついに40歳になりました。40歳は今までの節目とは違うなーと感じます。
    39歳も40歳も年齢としては1つしか違わないのですが、会話のなかで「いやまだ30代ですから」
    というようなまだ若者のはしくれであることを装うことも、もうできません。
    またユーザー登録やアンケート等で40代と回答することになり、
    もう30代とは違うのだということをはっきりと突きつけられたりします。
    正真正銘おっさんの仲間入りです。(世の40代以上の方スミマセン)

     

     

    そんな節目の歳を迎えたわけですが、今年は色々とイベントが盛りだくさんです。
    CEDEC2017も間もなく今月末に開催されます。
    運営委員に名を連ねるようになってから6年目、今年は副委員長を拝命し、
    スポンサー様のセッションを除くセッション全体のとりまとめを担当させて頂きました。
    現時点では全てのセッションの情報公開が完了し、本番に向けて最終調整を残すのみとなり、
    少しホッとしています。(あとは本番頑張ります!)
    ゲーム開発者の皆様のたくさんのご来場と、お会いできることを楽しみにしています。

     

    個人的には今年のCEDECは任天堂さんの『ゼルダの伝説 ブレス オブ ザ ワイルド』の開発事例が
    各分野(なんと8セッション!)で聞けるということが楽しみでなりません。
    私もプレイヤーとして200時間近くハイラルを冒険し、その世界の完成度がとても高いことに感心しきりでした。
    ずっとこの世界に居たいと思わせるワクワク感は他に形容しがたいものがあります。
    なかなか入手できないとの声も多いNintendo Switchですが、入手できた方は是非遊んでみてほしいと思います。
    作る側としてはあの世界がどう作られたのかを聞くことができるこのチャンス、見逃せません。

     

     

    また、先月のChinaJoy2017では弊社で制作が進行中の
    『MONKEYKING HERO IS BACK THE GAME(仮称)』
    発表となりました。
    20170818_1
    これは西遊記をモチーフとした中国の国民的アニメ「西遊記之大聖帰来」をゲーム化するもので、
    中国メディアで公開されたトレーラーが2日間で200万PVを記録するというほどの反響を頂きました。
    日本語字幕のトレーラーもこちらから見ることができます。
    https://www.youtube.com/watch?v=ZClhJCmAb40&feature=youtu.be
    大型プロジェクトということもあり、スタッフ(正社員)募集の専用サイトもオープンしていますので、
    ご興味のある方は是非こちらもご覧ください。
    http://hexadrive.jp/recruit/career_n/

     

     

    そして今週の月曜日にはblogでも紹介させて頂きましたが、
    弊社の若手チームが手掛ける『魔法パスワード1111』
    iOS/Androidの各ストアにてリリースされました。
    20170818_2
    基本無料でエンディングまで遊べるゆるっと切ない魔法と旅するRPGを是非お手に取ってもらえると嬉しいです。
    詳細はこちらをご覧ください。
    http://ficustone.com/mahoupassword1111/

     

     

    今年はヘキサドライブも10周年を迎え、私も40歳の節目を迎えましたが、
    まだまだチャレンジを続ける中で成長していきたいと思いますので、
    今後ともご指導ご鞭撻のほどよろしくお願い致します。

     

     

    また、一緒にチャレンジして頂ける方も募集していますので、
    仲間になりたそうに こちらを見ている!
    という方は是非ともご連絡下さい!


  •            

    こんにちわ、社内IT担当のShigeです。
    初投稿になりますが、よろしくお願いします。

     

    皆さん、いかがお過ごしでしょうか。
    今年の夏は、地域によっては大雨だったり、気温が低かったりといつもと様子が違いますね。
    環境の変化が激しいので、体調にお気をつけください。

     

    さて、皆さんは初めて自転車に乗れたときの感動を覚えていますでしょうか?
    足で走るよりずっと速く、少ない時間で遠くまで行けることに興奮し胸踊らせたのでは無いでしょうか。
    私もそうでした。
    免許を取るまでは、「自転車さえあればどこだって行けるっ
    そんなふうに思っていました。

     

    免許がとれる年になると中型・大型二輪、そして四輪とエンジンつきの乗り物に夢中になっていました。
    その辺も色々とエピソードはありますが、またの機会とさせていただきます。

     

    今日紹介したいのは、私のなかで今最もHotな乗り物です

     

    それとは30歳を過ぎた頃出会いました。

     

    それは、走るために必要なものだけで構成され、己の体力のみを糧とし、前へ進む機械。
    屋根もエンジンも無く、もちろん荷物も積めません。
    一切の無駄を取り除き、ただ走るためだけの存在。

     

    当時、日本で取扱いがなかったため、海外から取り寄せました。
    毎度思いますが、税関とは厄介ですね。
    自分専用の物を手に入れてからは、楽しくて毎晩乗りました。
    初めて一人で進み出せた時、あの忘れていた感動と興奮が甦えりました

     

     

     

    紹介いたしましょう。
    私の相棒、『マウンテン ユニサイクル』です。
    20170817_img00
    ユニサイクルの神様 Kris Holm氏の立ち上げたブランドの『KH29』をベースに自分のスタイルに合わせてカスタマイズしています。
    簡単に言うと、オフロード用の一輪車ですね。

     

    ハブ直結のクランクは休憩を許さず、一瞬でも気を抜けば360度全方位にこける。
    このストイックでスリリングな乗り物は、ちょっとした非日常を味わうことができます。
    普段何気なく散歩している公園の階段もクレイジーでクールなコースに変わります
    副産物として、体幹が鍛えられます。
    スピードレンジも二輪車に比べて低いため、安全
    だと思う…

     

    子供の頃、一輪車に乗ってたいたという方も多いでしょう。

     

    放課後、空き地や公園で練習したり、
    https://youtu.be/BavoJ0VbNFQ
    注:イメージです

     

    友達と競いあったことでしょう。
    https://youtu.be/cRackWl4kBc
    注:イメージです

     

    海外は盛んで楽しそうですね
    動画を見たあなたはもう始めたいと思っているはず
    さぁいらっしゃい!
    補助輪無しで走り出せた感動をまた味わうことができますよ。
    文字通り駆動輪しかありませんが・・・

     

    今回、前々から考えていた計画を実行に移すことにしました。

     

     ビワイチ

     

    自転車乗りの中ではそこそこ知名度のあるチャレンジではないでしょうか。
    ご存じ無い方のために簡単に説明すると、
    日本一の湖『琵琶湖』約200kmをぐるっと回るチャレンジです。

     

    以前、ヘキサ自転車部でもやっていますね。
    http://hexadrive.jp/hexablog/日記/10719/

     

    ものがものなので、ずっと公道を走るわけにもいかないので、波打ち際や湖岸の岩場なんかも走行することになりそうです。
    道なき道を行くのもマウンテンユニサイクルの醍醐味です。

     

    草津市にある琵琶湖博物館をスタートし、
    20170817_img01

    湖岸の公園を走ります。
    20170817_img02

    琵琶湖大橋です。
    20170817_img03
    あそこでワールドレコードのブラックバスが上がったんですよねぇ
    釣りがしたい・・・

     

    気を取り直して進みます。

     

    途中、夏らしい景色があったので1枚。
    20170817_img04
    あまりの暑さでひまわりもだれてますね。

     

    今回はここまでです。

     

    残り、190km まだまだ楽しめそうです。

     

    ヘキサドライブでは個性豊かなメンバーが日々楽しんでゲームを製作しています。
    興味をもたれた方は採用ページをのぞいてみてください。
    http://hexadrive.jp/recruit/

     

    それではまた


  •            

    ヘキサ日記をご覧の皆さん、こんにちは。
    今回で二回目のブログ当番になります、とむです
    いやー、毎日暑いですね!
    初老の身には出社するだけで一仕事終わったように感じられる今日この頃です…

                                                                                            

    これだけ暑いと誰でも海洋生物のことを思い浮かべるかと思うのですが(ホンマカ?)、自分の場合は大海原をたゆたうマンボウのことが頭から離れなくなりググってみることにしました。

    すると…、出るわ出るわマンボウ最弱伝説
    最近生命力がめっきり衰えた自分としては異様な親近感を覚えます
                                                     
    ・まっすぐしか泳げないから岩に直撃して死亡
    ・水中に潜って凍死
    ・朝日が強過ぎて死亡
    ・日にあたってたら鳥に突かれて死亡
    ・寝てたら陸に打ち上げられて死亡
    ・寄生虫殺すためにジャンプして水面に当たって死亡
    ・食べた魚の骨が喉に詰まって死亡
    ・食べたエビやカニの殻が内蔵に刺さって死亡
    ・水中の泡が目に入ったストレスで死亡
    ・海水の塩分が肌に染みたショックで死亡
    ・前から来たウミガメとぶつかる事を予感したストレスで死亡
    ・近くに居た仲間が死亡したショックで死亡
    ・よく水面で横たわっていて、そこを漁師にみつかり捕獲されて死亡
    ・皮膚が弱すぎて触っただけで痕が付く、さらにその傷が原因で死亡
    ・小魚や甲殻類の骨が喉に詰まって死亡

                                                                            

                                                                             

                                                                                                                                                                                                                                                                                                                                                                                                                              

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

                                                                                                                                                                                  

    まぁ、全部ウソらしいのですが…
    でも、これだけ伝説が生まれるというのはマンボウがみんなに愛されているからこそですよね!

    それに一番上の「まっすぐしか泳げないから岩に直撃して死亡」と言うのはまんざらウソでもないらしく、水流に逆らって泳げないという意味でマンボウはプランクトンに分類されるという説もあるそうですよ!
    *生物学的には水中を漂っているのをプランクトン、シャキシャキ泳いでいるのをネクトン、地べたを這ってるのをベントスというそうです。)

                                

    体長が3メートルもあるのにプランクトン呼ばわりされるマンボウ、何か深いことを考えていそうで実は流されて生きているマンボウ…
    自分もマンボウのように大きな流れに身を任せなんとなく世の中渡っていけますように、と願わずにはいられません

                                     

    最後に、この一枚が皆様にひとときの涼をお届けすることを祈りつつ筆を置きたいと思います。
    かしこ

                                                                                   

    20170816_manbo


  •            

     

    車もしばらく空を走る予定もなさそうさ

    今日もお暑いですね大阪デザイナーの大宮です。

    アニメ版GTOのオープニングでこのような歌詞があったのを覚えています 。

    確かに車は空を飛ぶのはだいぶ先のようです

    しかし、今現在カメラは空を飛ぶ時代になっているんです

    どういうことかと言いますとこちらです。

    20170815_01

    ご存知の方も多いと思いますが、一時期世間を騒がせたドローンです。 首相官邸にドローンが落下した事件などで、今では飛行区域の規制が厳しくなっています

    ラジコンが好きな私は規制前の2014年頃、注意を払いながらよく飛ばさせて頂いていたのですが 今ではすっかりご無沙汰です

    そしてこちらが規制前に撮影した動画になります

    動画URL https://www.youtube.com/watch?v=SEweZ4mW0-o&feature=youtu.be

     

    20170815_02

    知り合いのお寺さんの協力のもと撮影したものです。 慣れてくると対象物を中心に飛行することもできます。 私だけかもしれませんが、この感覚ってバトルフィールドのヘリコプターで陣地を占領する時に似ている気がします

     

     20170815_03

    こちらも知り合いの神社さんを撮影したときのものです。 運よく少し曇りで、桜のピンクが映えました

     

    20170815_04

    イベントの撮影依頼を受けて撮影させて頂いたものです。 撮影のため貸切にして頂きました。現在、夜間飛行は承認がないと行うことができません。

     

     20170815_05

    熊本の自然を撮りに行ったときのものです。 緑が目に優しいですね

     

     

    これら撮影させて頂いた映像は、事前に許可を取り 撮影時は周りの人々に飛行することをお声かけしながら 行いました。規制後の現在ではそれでも禁止されている 区域、事項が多いため、飛ばす際は地方航空局長の許可を得る必要があります。

    ●現在飛行禁止とされる区域

    ・空港等の周辺

    ・人口集中地区の上空

    ・高度150m以上の高さの空域

    ●ドローンの飛行方法

    ・日中(日出から日没まで)に飛行させること

    ・目視(直接肉眼による)範囲内で無人航空機とその周囲を常時監視して飛行させること

    ・人(第三者)又は物件(第三者の建物、自動車など)との間に30m以上の距離を保って飛行させること

    ・祭礼、縁日など多数の人が集まる催しの上空で飛行させないこと

    ・爆発物など危険物を輸送しないこと

    ・無人航空機から物を投下しないこと

    国土交通省のホームページより引用させて頂きました。 http://www.mlit.go.jp/koku/koku_tk10_000003.html

     

    以上のルールをしっかり守ってみなさんもドローンを飛ばしてみてくださいね


  •            

    こんにちは。テララです

     

    暑い時期が続いております。夏休みですね
    みなさまどのようにお過ごしでしょうか。

     

    さて、まさに、この夏の休暇中に
    プレイしてくれといわんばかりのタイミングで
    アプリをリリースいたしました。
    この流れは覚えがありますね。
    なぜ毎回狙ったように長期休暇時期にリリースできるのでしょう。ラッキー。
    ……あ、いえ、狙ってます、狙ってましたとも。計画通りです。

     

    そんなわけで、
    ヘキサドライブオリジナルブランド
    Ficustone project第二弾!
    その名も

    タイトル

    「魔法パスワード1111」
    ヤッター!タイトルが短いぞ!

     

     

    簡単に言えば、
    魔法のテンションと好感度を制御して
    敵を撃破していくゲーム。
    それが「魔法パスワード1111(まほぱす)です!

     

    魔法と名が付くだけあって
    お話も
    個性豊かな魔法たちに
    好かれたり嫌われたりしながら
    魔法使いの滅んだ世界を旅する
    魔法使いの弟子のお話です。

     

    詳しくはHPへ。

     

    ちなみに、アイ経とまほぱすの
    お話の舞台は同じですよ~!

     

    アイ経とは?
    Ficustone project第一弾
    「アイテム代は経費で落ちない」の略称。
    アイテムだけで戦う平社員ファンタジーRPGです。

     

    アイ経をプレイしていなくても
    まほぱすのお話は理解できます。が、
    アイ経をプレイしていると、まほぱすがより楽しめるはずです!

     

    まほぱすもアイ経も、
    エンディングまで基本無料でプレイできますよ。
    夏休みの友にいかがでしょうか?……宿題みたいですね。

     

    それでは!テララでした


  • 2017年8月10日

    夏といえば、、、

               

    こんにちは!大阪スタジオマネージャーのたぐっちゃんです

     

    いつの間にやら8月ですね~

    8月といえばあれしかないですよね。

    さぁみなさんご一緒に!せーの!

     

    KCS福岡情報専門学校のオープンキャンパス

     

    あ、はい、告知です。

    8/20(日) KCS福岡情報専門学校でのオープンキャンパスにてゲーム業界を目指す人たちに向けて講演させていただきます。

    http://www.kcs-f.ac.jp/opencampus/campus

     

    そんなオープンキャンパスもありますが、のゲーム業界の大きなカンファレンスと言えば、

    せーの!

     

    せでっくぅぅぅ

     

    そう、と言えば  CEDEC2017 ですよね

    今年は、8/30(水) ~ 9/1(金) にパシフィコ横浜で開催します。

    ヘキサドライブは、ゲーム業界への貢献を通じて日本のゲーム業界をもっと盛り上げたい想いもあり、さまざまなカンファレンスに関わっています。CEDEC に関しても運営委員会に弊社の齊藤康幸が副委員長、わたくしもプロダクションセッション担当として関わっています。

    http://cedec.cesa.or.jp/2017/outline/board.html

     

     

    そして今年は公募セッションでヘキサドライブから3セッションも講演させていただきます

     

    • 「若手小規模プロジェクト」のススメ ~昨今の業界における若手育成の問題点とその解決方法の提案~

    http://cedec.cesa.or.jp/2017/session/PRD/s58dcfc972cbff/

     

    • 若手テクニカルアーティストの業務効率改善への貢献、育成について話すラウンドテーブル

    http://cedec.cesa.or.jp/2017/session/VA/s58da6294d3416/

     

    • プロダクションラウンドテーブル

    http://cedec.cesa.or.jp/2017/session/PRD/s58dcdecf129fe/

     

    ちなみにCEDECの公募セッションは、運営委員会のメンバーが所属している組織からの応募であろうと関係無く、すべてのセッションが公平に判断され選ばれます。コネとかネゴとか無く、ガチで勝ち取った3セッションなのです。

     

     

    そんなヘキサドライブからの3セッションも含めて、たくさんの興味深い講演が聴けるCEDECでぜひお越しください。

     

    受講パスのお求めはこちらから。

    http://cedec.cesa.or.jp/2017/application/index.html#timeshiftpass

     

    今年は会場に行けない人でもCEDECに参加いただける『タイムシフトパス』という動画配信専用パスもご用意しています。通常のレギュラーパスよりかなりお安くなっておりますので「CEDECに行きたいけど予算的に・・・」って方もぜひご利用ください。

     

     

    暑い夏

    アツいCEDECに行ってゲーム業界を盛り上げていきましょー

     

     

    では会場でお会いしましょう

    CEDEC前には必ずダイエットをするたぐっちゃんでした


  •            

    こんにちは。ヘキサに入社して以降、すっかり謎解きにハマった大阪デザイナーのかわさきです
    (今回のブログでは前回までのunityでのゲーム制作はお休みです)

     

    1年前までは「謎解き何それ??」な人間だったのに、
    今では社員旅行先でまで謎好きメンバー達と謎解きをしにいくほどどっぷりハマってます

     

    さて、謎解きといえば来たる7月29日にヘキサドライブの会議室にて、
    大阪プランナーのハタウチさん主催の謎解きゲームボードゲーム交流会が開催されました!

     

    20170809_01

    他社様やフリーランスでご活躍されている方々をお招きし、計20名以上の方がご参加くださいました。

     

     

     

    14時から会を開始し、
    まずは昨年にヘキサドライブ謎部メンバーが制作された『海賊島からの脱出』の再演を行いました

    (謎部とは社内の有志たちが謎制作を行っている部活です)

    20170809_02
    『海賊島からの脱出』、謎部に関する過去の記事はコチラ

     

    制限時間は1時間。
    1チーム6人に分かれ、手元に配布された用紙や、壁に貼られた謎を解きつつ脱出を目指します。
    ちなみにかわさきはこの交流会のお手伝いのスタッフとして参加していたのですが、
    謎部が制作したゲームをプレイするのは始めてだったので、皆さまに混じって一緒に楽しんでおりました。

     

    タイトルロゴやオープニング映像まであり、なかなか本格的です。
    オープニング映像ではまさかのフルボイス…!豪華…!
    社内製ということもあり、聞き馴染んだ方々の声が画面から聞こえてクスリとしました。

     

    ゲーム中はどのチームもみんな真剣に謎を解いていきます
    制限時間が1時間と聞くと一見長いように感じますが、
    謎を解いているとあっという間に時間が過ぎていくので一瞬たりとも気を抜けません。

     

     

     

    謎解きゲームが終わったあとはお菓子を食べつつ、各々のテーブルでボードゲーム大会へ突入
    各テーブルごとに各々がやりたいゲームをプレイしています。
    20170809_04

    20170809_05

    20170809_03

     

     

     

    楽しい時間はあっという間に過ぎ、19時頃に交流会は終了となりました。

    つい時間を忘れ、スタッフ参加と言いつつも結局ずっと皆さまと一緒に遊んでいました。笑

    やっぱりゲームは楽しいですね…!

     

    ご参加いただきました皆さま、お忙しい中お越しいただきまして誠にありがとうございました!!

    今回ご参加頂けなかった方も、また次回の機会がございましたらぜひご参加くださいませ!

     

    それではまた!


ヘキサブログ ピックアップ



過去の日記はこちら

2017年8月
« 7月    
 123456
78910111213
14151617181920
21222324252627
28293031