「授業用」カテゴリーアーカイブ

Maya2018 で Arnold

CGにおけるレンダラー(描画プログラム)は,内蔵のものだけでなく,そうでないものもいくつかある.

Mayaでは,Mayaソフトウェアのレンダラーが標準で,それ以外にもMentalRay(光学現象の再現が得意),RendarMan(Pixarのアニメーションでおなじみ),V-Ray(こちらも光学現象の再現が得意),Arnold(簡単に使用できる)等が使用できる.

以下Maya2018にて説明

  1. Maya2018はArnoldがインストールされている.使用可能にするには,ウィンドウ>設定/プレファレンス>プラグインマネージャを開く
  2. mtoa.bundleの項目2つをチェックし,Mayaを再起動する
  3. 適当なモデルを配置する
  4. タブからArnoldを選択する
  5. こちらにはArnoldレンダリング専用のライトや環境光が用意されている
  6. この中のCreate Physical Skyを選択,大気光のシミュレート球が作成される
  7. マテリアルもArnold用に作成する必要があるので,ウィンドウ>レンダリングエディタ>ハイパーシェードを選択
  8. ArnoldのカテゴリのaiStandardSurfaceを選択し,マテリアルを作成する
  9. 作成したマテリアルのプリセットをプレスすると,予め設定されたマテリアルが使用できる.ここからChrome>置き換え を選択する
  10. Arnoldを使ってレンダリングする

 

Mayaテクスチャマッピング3

魚のテクスチャを作成する

  1. 先週までに制作した魚にアニメーションをつけたファイルを開く
  2. 魚が変形していない場所で再生をとめる
  3. 魚のオブジェクトを選択する
  4. UV>自動(自動でUVを割り当ての意味)を選択
  5. UVが6方向から見た様子に分割されて作成される(操作はありません)
  6. UVエディタを開くと魚がUV展開されているのがわかる
  7. 魚を選択し,スナップショットを書き出す(選択していないと書き出せない)
  8. オリジナルの魚模様を作成してみること
  9. なお,オブジェクト側のフェースを選択するとUVエディタ側もハイライトされる.対応関係が分かるので手がかりにすること.
  10. これは悪い例

Mayaテクスチャマッピング2

マテリアルを作成しオブジェクトに割り当てる

  1. 椅子の木目を作成したことを思い出しながら,新しいマテリアルを作成する(参考
  2. 作成したマテリアルのカラーの右にあるチェッカーマークをクリック
  3. ファイルを選択する
  4. ファイルアトリビュートが開かれるので,フォルダボタンをクリックし,ファイルの場所を指定する
  5. 作成されたマテリアルを立方体にアサインする
  6. ビューのマテリアル表示モードをONにし,パースビューでテクスチャが反映される
  7. レンダリングするとこのようになる

 

(次へ

 

Mayaテクスチャマッピング1

Mayaで作成したオブジェクトにテクスチャ画像を貼り付ける,テクスチャマッピングを実習する.

  1. まず,簡単なサイコロを作成する.作成>ポリゴンプリミティブ>立方体>□ で1×1×1サイズで分割もそれぞれ1にする.
  2. この立方体を選択したまま,メニューバーのUV>UVエディタを選択
  3. UVエディタの画面が開く
  4. UVエディタのポリゴン>UVのスナップショットを選択
  5. UVのスナップショットの設定を,サイズをそれぞれ512に,イメージフォーマットはPNGかJPEGにし,OKをクリック
  6. 保存した場所を覚えておくこと.次にAdobePhotoShopを開きます
  7. UVの枠が画像として保存されている.この枠線を頼りにサイコロの模様を描く
  8. 概ねサイコロはこのような模様です
  9. 完成した画像を保存するときは,UVの枠線を無い状態で保存すること

 

次へ

Unity入門-0ログイン編(2020)

※このステップ(Unity入門-0ログイン編)は一部環境下のみの設定です

※2020年にアップデート(ベースは2018年)

 

Unit Hubを起動する

インストールしている、Unityのバージョンを確認する。2019.3.10がインストールされていればよい。2019.3.15までは問題無く動作すると思います。

新規作成>▽>2019.3.10f1を選択し、指定のバージョンで作成する(※バージョンが違えば互換性が無い場合もあるので注意)※他の授業で違うバージョンを使用している場合はお知らせください。上位バージョンならそのまま使用、下位バージョンなら検討します。

テンプレートの画面が開きますので、3Dを選択、プロジェクト名に半角英数字で好きな名前を入れ、上位階層まで半角英数字の保存場所を選択し、作成ボタンを押します。

 

 

 

Unityをスタートする

  1. Sign in with googleを選択し,大学のアドレスを入力,いつもの入力画面になりますので,もう一度メールアドレス,パスワードを入力
  2. Project Nameは半角英数字で適宜設定すること
  3. Locationの…をクリックし保存先にUSBメモリ(またはSSD)の場所を選ぶ.あまりにもUSBメモリが遅くイライラする場合は,Dドライブに保存し終了時に自分のUSBメモリにバックアップを取るなどする.

次へ

 

 

 

Maya復習ーその2

ここではMayaのマテリアル設定の復習をします.1年次では実習していないプロシージャルテクスチャ(計算で生成したテクスチャ)を,木目で使用します.

マテリアル設定やレンダリングの設定について忘れてしまった方は,少し古いレジュメになりますがこちらを参考に.

 

  1. ウィンドウ>レンダリングエディタ>ハイパーシェード を表示させる
  2. ハイパーシェードの 作成>マテリアル>Phongシェーダを選択 これでPhongのマテリアルが作成される
  3. 作成されたPhongマテリアル(Phong1など)を選択し,アトリビュートエディタのカラーの右にあるチェック模様のボタンを押す
  4. レンダーノードの作成 ウィンドウが現れるので,木目を選択
  5. アトリビュートエディタが木目のプロパティ画面になるので以下のように設定
  6. もしも,木目のプロパティ画面に移行できなかった場合,作成したPhongを選び,チェック模様だったところが右向き三角になっているのでそこをクリックすると木目編集画面へ移行する
  7. 次に作成したPhongを選択し,アトリビュートエディタのスペキュラーシェーデイングの項目を調整する
  8. このPhongマテリアルを座面にアサインする(マウス中ボタン+ドロップ)
  9. もしも木目がビューに表示されていない場合は,各ビューのテクスチャ表示をONにする
  10. 次にパイプのマテリアルを設定をする.ハイパーシェードの 作成>マテリアル>Phong を選択
  11. 新しくPhongマテリアルが作成されました.スペキュラを調整し,グレーのペンキが塗られた脚にする
  12. 本来は脚の先端が黒いのですが,そこは割愛
  13. レンダリングして完成(アンビエントライト,エリアライトを使用)
  14. レンダリングした画像を保存し,提出のこと.画像の保存方法は,レンダービューファイル>イメージの保存の,,
  15. ファイルの種類JPEGか,PNGを選択し,ファイル名を入力して保存を押す.
  16. なお保存した場所を覚えておくこと.通常はプロジェクトファイルのImagseなどに保存される.

Maya復習ーその1

Mayaの復習

Mayaの復習をしましょう.以前のレジュメも参考にしましょう.

【2019年度変更箇所】

デフォルトのレンダラーはArnoldになっていますが,Mayaソフトウェアでかまいません.

—-

ここではアトリエにありそうな丸椅子を作ります.

プロジェクトを作成しましょう.次に,ポリゴンの円柱を作成します.正確なサイズで入力したい場合には,を選びプロパティを表示させる習慣をつけましょう.

Mayaはデフォルトで1ユニット1mと換算します.Unity等で読み込む場合は,このスケールが反映されます.

椅子の作成

  1. 作成>ポリゴンプリミティブ>円柱□
  2. 作成したい椅子の座面の直径を300mm(r=150),厚みを30mmに設定します(下図参照)
  3. 作成を押します
  4. 次に,脚の円柱を作成します.直径は25mm長さは450mm
  5. 床面に設置する部分を丸めてみましょう.円柱最下部のエッジを選択(エッジ選択はこのページの17番参考)し,メッシュの編集>ベベル>□ を選択します
  6. ベベルの設定を下図のようにしてベベルをクリック
  7. アトリビュートエディタをひらき.脚を10度だけ傾けます(作例ではZ軸を-10度傾けています)
  8. 座面を上(Y軸方向)に移動します(作例ではY軸0.45の位置に).脚もY軸方向に移動(作例では0.228)
  9. 脚を外側に移動させます(作例ではX軸-0.12
  10. ピボットの▲をクリックして展開し,回転ピボットを表示チェックを入れ,ワールド回転ピボットのXの値を0にします(上図).これで原点のY軸を中心に回転させることができます
  11. もう3本の脚は特殊な複製を用いて作成しましょう.この脚を原点のY軸を中心にコピーさせながら回転させます編集>特殊な複製□ を選択し
  12. 90度回転させながら3回コピーするよう設定(下図)し,特殊な複製を押します
  13. 脚が4本になりました
  14. 次に脚乗せをトーラスを使って作成しましょう.作成>ポリゴンプリミティブ>トーラス を選択します
  15. 半径0.12,断面の半径0.005,軸の分割数40,高さの分割数20にし,作成を押します
  16. 作成されたドーナツをY軸で0.15の位置に移動させます
  17. 座面を選択し,マウスをプレスしエッジモードにします
  18. 角のエッジをダブルクリックで選択し,エッジループを選択します
  19. スケールをかけて,面取りをおこないます
  20. 中心の頂点を選択して高さ調整などもしてみましょう
  21. 座面を親にして,他の要素を親子付けをしましょう
  22. その他,気になる部分があれば頂点,エッジ,ポリゴンを移動などして修正したり,ベベルなどをつけてみましょう

 

支援デバイス Ver6コード

支援デバイスVer6コード

# ODEKAKE Beacon 2018ver4
from microbit import *
#import microbit
import music
import radio
import os

display.scroll('RadV6')
radio.config(channel=10, power=5, length =64)#BLE init  length
radio.on()#BLE ON

btnChk = False
myID = 1
grCount  = 1
grChk = False
oneTime = False
missing = False
timerA = 0
timerB = 0
config = '0,0'#myID,grCount,
tune1 = ["D4:1"]
tune2 = ["E4:1"]
tune3 = ["F4:1"]
timB = 30000
interval = 3000#change to 1sec Feb.16
#IDlist = []
#IDlist2 = []
idDic = {}#ID + time dictionary

#File read
if 'config.txt' in os.listdir():
    with open('config.txt') as my_config:
        conftxt = my_config.read()
        conf = conftxt.split(',')#split by commma to list
        myID = int(conf[0])#myID read and set
        grCount  = int(conf[1])#my grCount read and set

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        ##setingMode
        if btnChk is False:
            btnChk = True
            display.scroll('SET')
            display.scroll('ID=' + str(myID))
        elif btnChk is True:
            btnChk = False #end set mode
            shakeChk = False #end shake mode
            display.show(Image.YES)
    elif button_a.is_pressed():
        if btnChk is True and grChk is False:#ID count mode
            if myID < 20:
                myID += 1
            else:
                myID = 0
            display.scroll('ID=' + str(myID) ,delay = 80)
            #sleep(200)
            #display.clear()
        elif btnChk is False and grChk is True:#group count mode
            if grCount < 20:
               grCount += 1
            else:
                grCount = 0
            display.scroll('GR=' + str(grCount) ,delay = 80)
        else:#normal mode
            if(idDic):
                mList2 = []#initialize and clear
                for k, v in idDic.items():
                    sabun2 = timA - v
                    if sabun2 < 10000:#if 20sec no access
                        mList2.append(k)
                nagasa = int(len(mList2)) + 1#own ID add
                display.scroll(str(nagasa), delay = 80)
                if nagasa == int(grCount):
                    display.scroll('OK!', delay = 80)
                    missing = False
                elif nagasa < int(grCount):
                    display.show(Image.SAD)
                else:
                    display.scroll('??', delay = 100)
                    ##music.play(tune2)
                radio.send(str(myID) + ',' +  str(grCount) + ',nohelp,noset')
            else:
                display.show(Image.DUCK)
            sleep(500)
            display.clear()
            
    elif button_b.is_pressed():
        if btnChk is False and grChk is False:#HELP SEND
            radio.config(power=7)#HelpMode
            radio.send(str(myID) + ',' +  str(grCount) + ',HELP' + ',noset')
            radio.config(power=5)#HelpMode
            display.scroll('HELP')
            sleep(800)
            display.clear()
        elif btnChk is False and grChk is True:#end gr set mode
            btnChk = False #end set mode
            grChk = False #end shake mode
            radio.send(str(myID) + ',' +  str(grCount) + ',nohelp' + ',set')
            display.show(Image.YES)
            sleep(500)
            display.clear()
            #File Save
            saveConfig = str(myID) + ',' + str(grCount)
            with open('config.txt', 'w') as my_conf:#save list my_conf
                my_conf.write(saveConfig)
            #with open('gr.txt', 'w') as gr_id:
            #    gr_id.write(str(grCount))
        elif btnChk is True and grChk is False:#end id set mode
            btnChk = False
            grChk = True#to Group set mode
            display.show(Image.YES)
            sleep(500)
            display.clear()
            display.scroll('GR=' + str(grCount))
    #else:
        #display.scroll('')
        
    #radio message 'myID,grCount,HELP'
    try:
        s = radio.receive()
        if(s):
            sList = s.split(',')#split by , to list
            if sList[2] == 'HELP':
                display.scroll('!')
                music.play(music.BADDY)
                display.show(Image.SAD)
                sleep(3000)
                display.clear()
            elif btnChk is False and grChk is False:
                if sList[3] == 'set':
                    grCount = sList[1]
                    saveConfig = str(myID) + ',' + str(grCount)
                    display.scroll('GR=' + str(grCount))
                    with open('config.txt', 'w') as gr_id:
                        gr_id.write(saveConfig)
                #elif sList[2] == 'nohelp' and sList[3] == 'noset':
                else:#recieve ID check
                    if(not myID == sList[0]):#without own device
                        #time check
                        nowTime = running_time()
                        if(not idDic.get(sList[0])):#not in dictionary add ID and time
                            updValue = {sList[0] : nowTime} 
                            idDic.update(updValue)
                            #music.play(tune3)
                        else:
                            updValue = {sList[0]:nowTime} 
                            idDic.update(updValue)
    except ValueError:#PacketError
        display.show(Image.DUCK)
        radio.reset()
        sleep(200)
        radio.config(channel=10, power=5, length =64)
        display.clear()
        
    #send Beacon interval time            
    timA = running_time()
    if timA > timB:
        #del IDlist[:]#initialaize list
        if btnChk is False and grChk is False:
            radio.send(str(myID) + ',' +  str(grCount) + ',nohelp,noset')
        #display.scroll(str(timA))
            timB = timA + interval
            #display.show(Image.PITCHFORK)
            #sleep(100)
            #display.clear()
            #music.play(tune1)
        
    if(idDic):
        mList = []#initialize and clear
        #mList.clear()#need()?
        for k, v in idDic.items():
            sabun2 = timA - v
            if sabun2 > 200000:#200sec
                mList.append(k)
        
        if(mList):
            
            ids  = ''
            for t in mList:
                ids += t + '_'
            #display.scroll('ID=' + ids + 'missing', delay = 200)
            if missing is False:
                music.play(music.POWER_DOWN)
                missing = True
            display.scroll('ID' + ids + 'missing')
            sleep(5000)

    #sleep(100)

 

micro:bitでDictionary

micro:bitでDictionaryつかえるやん,,,数時間無駄にした

from microbit import *
myDict = {
    'id':1000,
    'id2':2000
}

while True:
    if button_a.is_pressed():
        cat = myDict.get('id')
        display.scroll(str(cat))
        #display.show(Image.HEART)
        sleep(2000)
    if button_b.is_pressed():
        cat = myDict.get('id2')
        display.scroll(str(cat))
        #display.show(Image.HEART)
        sleep(2000)

値を更新と追加は

inu = {'key2':400}
myDict.update(inu)

Dictionaryの中身をチェックするには(Key,Valueの両方)

for k, v in myDict.items():

これでk にkeyがvにValueが入る


スクロール速度速く

display.scroll('cat', delay = 100)

 

micro:bit お出かけサポート

お出かけサポートシステム(ver2くらい あまり動作しない)

# Add your Python code here. E.g.
from microbit import *
#import microbit
import music
import radio
import os

display.scroll('RadioV1')
radio.config(channel=10, power=4)#BLE init
radio.on()#BLE ON

btnChk = False
myID = 1
grCount  = 1
grChk = False
oneTime = False
timerA = 0
timerB = 0
#tune = ["C4:4", "D4:4", "E4:4", "C4:4", "C4:4", "D4:4", "E4:4", "C4:4","E4:4", "F4:4", "G4:8", "E4:4", "F4:4", "G4:8"]
tune2 = ["E4:1"]

#File read
if 'id.txt' in os.listdir():
    with open('id.txt') as my_id:
        myidtxt = my_id.read()
        myID = int(myidtxt) 
if 'gr.txt' in os.listdir():
    with open('gr.txt') as gr_id:
        mygridtxt = gr_id.read()
        grCount  = int(mygridtxt)

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        ##setingMode
        if btnChk is False:
            btnChk = True
            display.scroll('SET')
            display.scroll('ID=' + str(myID))
        elif btnChk is True:
            btnChk = False #end set mode
            shakeChk = False #end shake mode
            display.show(Image.YES)
    elif button_a.is_pressed():
        if btnChk is True and grChk is False:#ID count mode
            if myID < 20:
                myID += 1
            else:
                myID = 0
            display.scroll('ID' + str(myID))
            #sleep(200)
            #display.clear()
        elif btnChk is False and grChk is True:#group count mode
            if grCount < 20:
                grCount += 1
            else:
                grCount = 0
            display.scroll('GR' + str(grCount))
        else:
            music.play(tune2)
    elif button_b.is_pressed():
        if btnChk is False and grChk is False:
            radio.config(power=7)#HelpMode
            radio.send('HELP')
            radio.config(power=4)#HelpMode
            display.scroll('HELP')
            sleep(800)
            display.clear()
        elif btnChk is False and grChk is True:#end gr set mode
            btnChk = False #end set mode
            grChk = False #end shake mode
            radio.send(str(grCount))
            display.show(Image.YES)
            sleep(500)
            display.clear()
            #File Save
            with open('id.txt', 'w') as my_id:
                my_id.write(str(myID))
            with open('gr.txt', 'w') as gr_id:
                gr_id.write(str(grCount))
        if btnChk is True and grChk is False:#end id set mode
            btnChk = False
            grChk = True#to Group set mode
            display.show(Image.YES)
            sleep(500)
            display.clear()
            display.scroll('GR=' + str(grCount))
    #else:
        #display.scroll('')
        
    s = radio.receive()
    if s == 'flash':
        display.scroll('Recieve')
    elif s == 'HELP':
        display.scroll('!')
        music.play(music.RINGTONE)
        display.show(Image.SAD)
        sleep(3000)
        display.clear()
    elif(s):
        if btnChk is False and grChk is False:
            grCount = int(s)
            display.scroll('GR=' + str(grCount))
            with open('gr.txt', 'w') as gr_id:
                gr_id.write(str(grCount))
   # display.show(Image.HEART)
   
   if running_time() > timerA:
       #sendID
    sleep(100)