ことの発端はたまたまJunior Artistが制作したモデルをscriptの実験用に開いたら 「なんかデータがおかしくない?」データを調べるとFace weighted vertex normals【Face weighted normals】(FWN)やTexelなどに不備があり 制作した方や他のJunior Artistに確認するとFWNのことをそもそも知らないということがあったためツイッターでつぶやいたという感じでした
ジュニアのアーティストで多いのがFace weighted vertex normalのつけ方を知らなくてクオリティを下げてしまう
— リンゴ酸@ryota unzai (@unpyside) December 13, 2019
soften/hardenかけて終わり!ではなくて 見せるためのモデルであればある調整してあげるとクオリティがグンとあがるので知らない人は試してみてください pic.twitter.com/Hs9hWicotH
どちらかというとCharacter出身だったためあまりこういうことをしないのかなーと思いつつ、なんとなくつぶやいたツイートがかなりのRTといいねをされてしまい少し戸惑いつつもせっかくなので記事にしたいなということで書くことにしました ちなみにこの技術は少し癖のある技術の為、使用しているゲームエンジンや目指すべきクオリティによってはあまり有効でない場合もあります 私が関わってきたプロジェクトでは使用するとプロジェクトもあれば使ってはいけないプロジェクトもありました、使用する際はエンジニアと相談しつつ進めることをお勧めします 特に自社エンジンなどを利用している場合は根深い問題になる可能性も否定できません
Face weighted vertex normals【Face weighted normals】(FWN)とは Meshのシェーディングを改善する手法のことで ベベルを追加したりVertexのNormalを変更することによって、斜面のシェーディングがブレンドされ 斜面のNormalがなめらかになります (ただし、ほとんどの場合は問題ないのですがピクセルシェーダーの複雑さによって、非常に長くて細い三角形がたくさん存在しているメッシュの場合レンダリングパフォーマンスが大幅に低下する可能性もあったりするため、使用用途を考える必要があったりすることもあります) 前置きはこの辺で実際にどうやってつけていくかを解説したいと思います


これを実際のポリゴンで行ってみます
修正したいMeshを選択し
Display/Polygons/Vertex NormalsでVertex Normalを表示させます

import maya.cmds as cmds
objects = cmds.ls(sl=True)[0]
cmds.polySetToFaceNormal(setUserNormal=True)
cmpToVtf = cmds.polyListComponentConversion(objects, fromFace=True, toVertexFace=True)
normal = cmds.polyNormalPerVertex(cmpToVtf[0], q=True, xyz=True)[0:3]
print normal
[0.0, 1.0, 0.0]という値が取得できました
それぞれ[x, y, z]に対する値になっています
この値をMesh Display/Set Vertex Normal Optionsに値を入力し
Faceに接するVertexに対してSet Normalを実行します


そんなこんなで以上がFWNの設定方法でした詳しい話などはTwitterとかで質問していただければわかる範囲でお答えしたいと思います
