SlideShare uma empresa Scribd logo
1 de 26
シェーダープログラムを無限に生成するガチャつくってみた
Masaru Mizuochi
@_mizumasa
Processing Community Day 2019 LT
@_mizumasa
What‘s シェーダー
ガチャ !!??
CharActor
キャラクター
文字 人?
フラグメントシェーダーの構成
fragColor = vec4(
abs( sin( cos( time + 3. * uv.y ) * 2. * uv.x + time)),
abs( cos( sin( time + 2. * uv.x ) * 3. * uv.y + time)),
1.0,
1.0);
生成モデル
7
fragColor = vec4(
abs(□),abs(□),1.0,1.0);
↓
□ = sin(□)
↓
□ = □ + time
shader code model
sin( cos( time + 3. * uv.y ) )
↓ (cos(□) → log( cos(□) ))
sin( log( cos( time + 3. * uv.y ) ) )
code extension
a section of the code in Figure 1
sin( cos( time + 3. * uv.y ) ) → sin( sin( time + 3. * uv.x ) )
a section of another code
tan( sin( uv.x + 4. * log( time ) ) ) → tan( cos( uv.y + 4. * log( time ) ) )
code exchange
一瞬でこれぐらいのコードが書ける
8
自分で書かなくてすむ (そのシステムを組むのには2000行書いてるけど)
9
もっと賢く
できるのでは?
強化学習でやってみる
10
fragColor = vec4(
abs(□),abs(□),1.0,1.0);
↓
□ = sin(□)
↓
□ = □ + time
行動:
式の生成時に関数を選ぶ
行動:
式の生成時に関数を選ぶ
評価: 生成された映像の複雑さ ≒ PNG圧縮した時のサイズ
強化学習って?
11
行動した結果の報酬を見て、学習する
chainerRLを使うと100行で強化学習が書ける
12
import chainer, chainerrl
import chainer.functions as F
import chainer.links as L
import numpy as np
class Board():
def reset(self):
self.boardW, self.boardH= (4,6)
self.actNum = 3 #0:left 1:stay 2:right
self.obs = np.array([0] * 5, dtype=np.float32)
self.barPosX = np.random.randint(0,self.boardW)
self.ballPosX = np.random.randint(0,self.boardW)
self.ballPosY = 0
self.ballSpeedX = np.random.choice([-1,1])
self.ballSpeedY = 1
self.setObs()
self.count = 0
self.reward,self.done, self.info = 0, False, 0
returnself.obs
def step(self, action):
self.barPosX = np.clip(self.barPosX + action - 1, 0, self.boardW- 1)
if (self.ballPosX == (self.boardW- 1)) and (self.ballSpeedX== 1): self.ballSpeedX *= -1
if (self.ballPosX == 0) and (self.ballSpeedX == -1): self.ballSpeedX*= -1
if (self.ballPosY == 0) and (self.ballSpeedY== -1): self.ballSpeedY*= -1
if (self.ballPosY == (self.boardH- 2)) and (self.ballSpeedY== 1) and (self.ballPosX== self.barPosX):self.ballSpeedY*= -1
self.ballPosX += self.ballSpeedX
self.ballPosY += self.ballSpeedY
self.setObs()
self.check()
returnself.obs, self.reward, self.done,self.info
def setObs(self):
self.obs[0]= self.barPosX
self.obs[1]= self.ballPosX
self.obs[2]= self.ballPosY
self.obs[3]= self.ballSpeedX
self.obs[4]= self.ballSpeedY
def check(self):
self.reward = 1
if ( self.ballPosY== (self.boardH- 1) ): #ball miss
self.reward= -1
self.done = True
def get_random(self):
self.count += 1
returnnp.random.randint(0,self.actNum)
def show(self):
board= np.zeros((self.boardH,self.boardW),dtype="uint8")
board[self.boardH- 1, self.barPosX]+= 2 #barpos
board[self.ballPosY, self.ballPosX]+= 1 #ballpos
print board
class QFunction(chainer.Chain):
def __init__(self,obs_size,n_actions, n_hidden_channels=50):
super(QFunction,self).__init__()
withself.init_scope():
self.l0 = L.Linear(obs_size, n_hidden_channels)
self.l1 = L.Linear(n_hidden_channels,n_hidden_channels)
self.l2 = L.Linear(n_hidden_channels,n_actions)
def __call__(self,x, test=False):
h = F.tanh(self.l0(x))
h = F.tanh(self.l1(h))
returnchainerrl.action_value.DiscreteActionValue(self.l2(h))
if __name__ == '__main__':
env = Board()
obs = env.reset()
q_func = QFunction(len(obs), env.actNum)
optimizer= chainer.optimizers.Adam(eps=1e-2)
optimizer.setup(q_func)
explorer= chainerrl.explorers.ConstantEpsilonGreedy(
epsilon=0.3,random_action_func=env.get_random)
replay_buffer = chainerrl.replay_buffer.ReplayBuffer(capacity=10 ** 6)
phi = lambdax: x.astype(np.float32,copy=False)
agent = chainerrl.agents.DoubleDQN(
q_func, optimizer, replay_buffer, 0.95, explorer,
replay_start_size=500, update_interval=1,
target_update_interval=100, phi=phi)
n_episodes = 2000
max_episode_len = 20
for i in range(n_episodes):
obs= env.reset()
reward = 0
done= False
R = 0 # return (sum of rewards)
t = 0 # timestep
whilenot done and t < max_episode_len:
action = agent.act_and_train(obs.copy(),reward)
obs, reward, done,_ = env.step(action)
R += reward
t += 1
print('trainepisode:', i,'R:', R,'count:',env.count,'step:',t,'statistics:', agent.get_statistics())
agent.stop_episode_and_train(obs.copy(),reward,done)
obs = env.reset()
done = False
R = 0
whilenot done and R < 400:
action = agent.act(obs)
obs, r, done, _ = env.step(action)
R += r
env.show()
print('testepisodeR:', R)
agent.stop_episode()
agent.save('dqn')
落ちないように行動を選択
 100行で始める深層強化学習 (0から壁打ちゲーム)
としてQiitaにまとめました
https://qiita.com/mizumasa/items/86204211581336f412ef
シェダー生成は学習できるか?
13
複雑になった
名刺デザイン100パターンできた
14
15
アートイベント
会場デザイン
 御殿山地区
東京マリオットホテル
 地域と教育
テクノロジー体験
16
なぜつくるのか
人間の創造性はどこへ向かう?
17The Power of PowerPoint - thepopp.com
Creative Codingの歴史(田所さんの資料より)
18The Power of PowerPoint - thepopp.com
Creative Codingの歴史(田所さんの資料より)
19The Power of PowerPoint - thepopp.com
Hyper
media /
Web
Game
3D
Graphics
Sound
/ Music
Sound
/ Music
Sketch
Creative Codingの歴史(田所さんの資料より)
20The Power of PowerPoint - thepopp.com
Hyper
media /
Web
Game
3D
Graphics
Sound
/ Music
Sound
/ Music
Sketch ????
21
Grow + Group
ジェネラティブ、アルゴリズミックデザイン
22The Power of PowerPoint - thepopp.com
Autodesk, Houdiniといったツール デザイン、プロダクト、建築に広
がる
人工生命 ライフゲームやBoidsモデル
23The Power of PowerPoint - thepopp.com
24
種の多様性そのものを
デザインとみる
数式が作り出す個性 = CharActor
26
遺伝子のように解釈されるコード
個と群
多様性が生む美しさ
それは生命そのものかもしれない

Mais conteúdo relacionado

Mais procurados

20131222 第8回シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライド20131222 第8回シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライドRyuichi Ueda
 
Squirrel
SquirrelSquirrel
Squirrelmelpon
 
20130622第5回シェル芸勉強会スライド
20130622第5回シェル芸勉強会スライド20130622第5回シェル芸勉強会スライド
20130622第5回シェル芸勉強会スライドRyuichi Ueda
 
20130413シェル芸勉強会スライド
20130413シェル芸勉強会スライド20130413シェル芸勉強会スライド
20130413シェル芸勉強会スライドRyuichi Ueda
 
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつりRyuichi Ueda
 
20130216 シェル芸爆破デスマッチ勉強会
20130216 シェル芸爆破デスマッチ勉強会20130216 シェル芸爆破デスマッチ勉強会
20130216 シェル芸爆破デスマッチ勉強会Ryuichi Ueda
 
画像を縮小するお話
画像を縮小するお話画像を縮小するお話
画像を縮小するお話technocat
 
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンenchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンRyota Shiroguchi
 
Osakijs #01 「enchant.jsハンズオン資料」
Osakijs #01 「enchant.jsハンズオン資料」Osakijs #01 「enchant.jsハンズオン資料」
Osakijs #01 「enchant.jsハンズオン資料」Yusuke HIDESHIMA
 
AngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいAngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいYosuke Onoue
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesNoritada Shimizu
 
How to make Inn-fighting dice
How to make Inn-fighting diceHow to make Inn-fighting dice
How to make Inn-fighting diceMasujima Ryohei
 
三角関係になったときの対処法
三角関係になったときの対処法三角関係になったときの対処法
三角関係になったときの対処法Yachiyo Suzuki
 
2012年10月27日 Hbstudy#38
2012年10月27日 Hbstudy#382012年10月27日 Hbstudy#38
2012年10月27日 Hbstudy#38Ryuichi Ueda
 
Processing workshop v3.0
Processing workshop v3.0Processing workshop v3.0
Processing workshop v3.0Wataru Kani
 

Mais procurados (15)

20131222 第8回シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライド20131222 第8回シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライド
 
Squirrel
SquirrelSquirrel
Squirrel
 
20130622第5回シェル芸勉強会スライド
20130622第5回シェル芸勉強会スライド20130622第5回シェル芸勉強会スライド
20130622第5回シェル芸勉強会スライド
 
20130413シェル芸勉強会スライド
20130413シェル芸勉強会スライド20130413シェル芸勉強会スライド
20130413シェル芸勉強会スライド
 
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
 
20130216 シェル芸爆破デスマッチ勉強会
20130216 シェル芸爆破デスマッチ勉強会20130216 シェル芸爆破デスマッチ勉強会
20130216 シェル芸爆破デスマッチ勉強会
 
画像を縮小するお話
画像を縮小するお話画像を縮小するお話
画像を縮小するお話
 
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョンenchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
 
Osakijs #01 「enchant.jsハンズオン資料」
Osakijs #01 「enchant.jsハンズオン資料」Osakijs #01 「enchant.jsハンズオン資料」
Osakijs #01 「enchant.jsハンズオン資料」
 
AngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいAngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたい
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 
How to make Inn-fighting dice
How to make Inn-fighting diceHow to make Inn-fighting dice
How to make Inn-fighting dice
 
三角関係になったときの対処法
三角関係になったときの対処法三角関係になったときの対処法
三角関係になったときの対処法
 
2012年10月27日 Hbstudy#38
2012年10月27日 Hbstudy#382012年10月27日 Hbstudy#38
2012年10月27日 Hbstudy#38
 
Processing workshop v3.0
Processing workshop v3.0Processing workshop v3.0
Processing workshop v3.0
 

Último

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Último (9)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

シェーダープログラムを無限に生成するガチャつくってみた PCD2019