「技術メモ」カテゴリーアーカイブ

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の枠線を無い状態で保存すること

 

次へ

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)
    

 

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

 

Clarifaiサンプル2

アパレルに特化させています

<!doctype html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>Clarifaiサンプル</title>
  </head>
  <body>
    <h1>Clarifaiサンプル</h1>
<script type="text/javascript" src="https://sdk.clarifai.com/js/clarifai-latest.js"></script>
<script type="text/javascript" src="const.js"></script>

<form>
	<input type="file" id="files">
 
</form>

<div id="result"></div>
<p id="textul"></p>

<script type="text/javascript">
var ul = document.getElementById('textul');
var li;
//test2
//function poop() {
	document.getElementById('files').addEventListener('change', function(){
//document.querySelector('input').addEventListener('change', function(){
	
    var reader = new FileReader();
	//reader.readAsDataURL(file);
    reader.onload = function() {
      var imageData = this.result;
	  var imageData2 = this.result;
      document.getElementById('result').innerHTML = '<img src="'+ imageData +'" />';
      imageData = imageData.replace(/^data:image\/(.*);base64,/, '');
      doTheyEvenLift(imageData);
    };
    reader.readAsDataURL(this.files[0]);
  }, false);
//}

function doTheyEvenLift(image) {
app.models.predict('e0be3b9d6a454f0493ac3a30784001ff', {base64: image}).then(function(r) {
    console.log(r.outputs[0].data.concepts);
	var mycount = r.outputs[0].data.concepts.length;
	for(var i=0; i < mycount; i++){
		li = document.createElement("li");
		var p = r.outputs[0].data.concepts[i].value;
		p = p * 100;
		li.textContent = r.outputs[0].data.concepts[i].name +"_"+ p + "%";
		//li.textContent = r.outputs[0].data.concepts[i].value;
		ul.appendChild(li);
	}
  }, function(err) {
    console.log(err);
  });
}
	


///////test2

</script>

  </body>
</html>

実働サンプル(毎回リロード)

http://filmm.info/clari/claritest.html

NCMBに座標を送る

急ぎなのでメモ ボタンで追加できる

	public void addBtn(){

		NCMBObject posObj = new NCMBObject ("posObj");

		//DicAdd test
		posObj .Add("x", "3.2");
		posObj .Add("y", "1.0");
		posObj .Add("z", "0.2");
		posObj.SaveAsync ((NCMBException e) => {      
			if (e != null) {
				//エラー処理
			} else {
				//成功時の処理
			}
		});
			}