パーリンノイズ
地形生成に使えそうななだらかなノイズ Perlin Noise フラクタル地形自動生成
バリューノイズ
ランダムな値の間を補完して作るノイズ 基本的に、線形補完に渡す割合の値を、こねくり回してる感じ
線形補完
aまで移動後、a-b間のx%を追加で移動
def liner(a, b, x) a + x * (b - a) end
コサイン補完
線形補完に使っているx%を、コサインを使って作る。 ラジアンが0〜PIの時、コサインは-1〜1なので、1から引いて0〜2にする。 これを半分にして距離の割合(x%)を作る
def cosine(a, b, x) ft = x * Math::PI # 0〜1を0〜PIのラジアンへ変換 f = (1 - Math.cos(ft)) * 0.5 a + f * (b - a) end
パーリン先生の補完(?)
ノイズの話 - Pentanium Blog?
補完の割合をf(t) = 6.0*t^5-15*t^4+10*t^3
に食わせると
いい感じに滑らかになる魔法
def parlin_interpolate(a, b, x) # f = x * x * x * (10.0 + x * (-15.0 + 6.0 * t)) a + f * (b - a)
Rubyで模様生成機
ランダムで模様作るよ
前提:
gem install geo_pattern --no-ri --no-rdoc
gem install color
require 'webrick' require 'geo_pattern' random = Random.new(20) server = WEBrick::HTTPServer.new({:BindAddress => '0.0.0.0', :Port => 3000}) trap(:INT){server.shutdown} server.mount_proc('/') do |req, res| range = 0.0..1.0 col = Color::RGB.from_fraction( random.rand(range), random.rand(range), random.rand(range) ) pattern = GeoPattern.generate(col.html, patterns: :plaid, base_color: col.html) content = "<div style=\"background-image: #{pattern.to_data_uri};min-height:768px; width:1024px;\">" res.body = content res.content_length = content.size res.content_type = "text/html" end server.start
3Dオブジェクトを使った2Dゲームのレイヤー実装
SpriteRendererだけを使う場合は、SortingLayerでレイヤーを実装する。
ただ、MeshRendererにはSortingLayerが無いので、描画順の制御が上手く行かなかったりしてた。
MeshRendererを織り交ぜてレイヤー表現する場合は、カメラを複数使って実装するのが、汎用的で良い
背景カメラ、メインカメラ、前景カメラ、みたいな塩梅
オブジェクトをどのカメラに写すのかは、各オブジェクトのLayerとカメラのCullingMaskで操作する
*カメラのDepthを変更して、描画順を決定するのだけど、-10とかにすると何故か描画されなくなるので、
最背面を0スタートの正数で実装するのが良さそう
アニメーション管理での親子管理例
キャラクタを動かす際のレイヤーイメージ。キャラはガンダムでいうところのAパーツBパーツで分け、アクション用nullで管理し、さらに大外に移動用nullを用意すると取り回しが便利です。#spritestudio pic.twitter.com/jcEdRl5YAh
— つくし さなり (@sanarium) February 2, 2017