admin のすべての投稿

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. その他,気になる部分があれば頂点,エッジ,ポリゴンを移動などして修正したり,ベベルなどをつけてみましょう

 

centOS7 cron設定メモ

centOS7

noanacronをゆyumでインストール

その後anacronを削除

.shファイルを作成

/etc/cron.daily/ 以下にファイルを配置

nano /etc/cron.d/dailyjobs

で編集

2 4 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily

の時間設定を変更

その後 restartする

支援デバイス 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)
    

 

Excelのマクロで云々

急ぎの案件で,いろいろ試したけど,結局マクロで強引に動かす

データが綺麗にそろっていたからできただけにすぎない

10数万行×7列で約50分の実行時間

Sub Macro3()
'
' Macro3 Macro
'
Sheets("Sheet1").Select

Dim i As Long
Dim j As Long
Dim h As Long
h = 2

i = 2


 For i = 2 To 515858 Step 66
    j = i + 65

    Sheets("Sheet1").Select
    Range("C" & i & ":C" & j).Select
    ActiveCell.Offset(0, 0).Activate
    Selection.Copy
    Sheets("Sheet2").Select
    Range("B" & h).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
        
    Sheets("Sheet1").Select
    Range("D" & i & ":D" & j).Select
    ActiveCell.Offset(0, 0).Activate
    Selection.Copy
    Sheets("Sheet2").Select
    Range("BP" & h).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
        
    
    Sheets("Sheet1").Select
    Range("E" & i & ":E" & j).Select
    ActiveCell.Offset(0, 0).Activate
    Selection.Copy
    Sheets("Sheet2").Select
    Range("ED" & h).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    
    Sheets("Sheet1").Select
    Range("F" & i & ":F" & j).Select
    ActiveCell.Offset(0, 0).Activate
    Selection.Copy
    Sheets("Sheet2").Select
    Range("GR" & h).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
        
    Sheets("Sheet1").Select
    Range("G" & i & ":G" & j).Select
    ActiveCell.Offset(0, 0).Activate
    Selection.Copy
    Sheets("Sheet2").Select
    Range("JF" & h).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
        
      h = h + 1
        
    Next
End Sub

 

アプリのビルドについて

概要

  • アプリを生成することを「ビルド」と呼ぶ
  • 一般に配布することを「リリース」と呼び、デベロッパ登録が必要になる
  • Google Play ConsoleGoogle Play)でのリリースは初回のみ25$必要
  • Apple Developperでのリリース毎年1万円前後必要(レートに合わせて改訂される)

Windows(またはMac)アプリを作成する場合

  1. File>Build Settings で使用するシーンを全て追加
  2. シーン間はボタンなどでジャンプできるとしても,最初に読み込むシーンは最上部に移動させる(ビルド順が0になるように)
  3. PlatformがPC,Mac & Linux StandAloneを選択
  4. Target PlatformでWindows(またはMacOSX)を選択
  5. Windowsの場合はArchitectureをx86_64(64bit版をターゲットにする場合)にする
  6. Buildボタンを押す

※Windowsの場合は,作成されたアプリとフォルダ両方が必用で同じ階層に入れておくこと

 

iOSの実機で動作確認

  • 自分が所有しているiPhoneやiPadにのみインストールする場合は以下のとおり
  • Windows→(Cloud Build使用)→ iPhone 有料※デベロッパ登録が必要
  • Mac→ iPhone 無料

iOSでのビルド方法へ

Android実機で動作確認

  • Windows→Android 無料
  • Mac→Android 無料

Androidのビルド方法へ

iOSで限定した人数に配布したい(リリースしない)

  • DeployGateを使うとリリースせずとも少数限定の機種にインストール可能(各デベロッパ登録が必要となり有料)
  • 新規利用希望者が出る度にビルドし直す必要がある(iOSのみ)