This project is read-only.
1

Closed

かこみき氏のモデルにてテクスチャが表示されない

description

かこみき氏のモデルを表示すると、右黒目のテクスチャが表示されない。
テクスチャのUV座標値がマイナスとなっている為と思われる。
以下の様に修正すると表示されるようになるがこの修正が正しいかは不明。
pmxファイル読み込み時の型変換の問題か、シェーダー内でのUV計算の問題と思われる?
public class VertexData
{
    internal static VertexData getVertex(FileStream fs, Header header)
    {
        VertexData vertex = new VertexData();
        vertex.Position = ParserHelper.getFloat3(fs);
        vertex.Normal = ParserHelper.getFloat3(fs);
        vertex.UV = ParserHelper.getFloat2(fs);
        if (vertex.UV.X < 0)
            vertex.UV.X += 1;
        if (vertex.UV.Y < 0)
            vertex.UV.Y += 1;
Closed Jan 20, 2014 at 2:22 PM by LimeStreem
解決完了

comments

atrenas wrote Oct 24, 2013 at 4:50 PM

PMXEditerで見てもUV座標はマイナス値で取得され、正しく表示できており、
且つPMXEditerの値とMMFでのpmxファイル読み込み時の値が等しいことから、
読み込み時の不具合ではなく、シェーダー内または他のUV計算の問題と思われる。
よって前記修正は正しくない。

LimeStreem wrote Oct 26, 2013 at 12:20 PM

サンプラーの設定かも。
MMDが標準でテクスチャをどのサンプラーで読み取るのかわからないからなあ・・・
いろいろ弄ってみます

atrenas wrote Oct 27, 2013 at 1:00 AM

PMDおよびPMXの仕様書を見る限りUV値は0から1.0となっています。
つまりこのモデルのUV値が間違っていると考えられます。
このモデルを作った際に、左右対称モデルとして目の部分を作りテクスチャ部分を左から右ではなく右から左に読み込むような作り(-1.0から0、テクスチャの裏面を走査する形)にして黒目部分を反転表示させたと考えられます。
そして、MMDではこのようなモデルでも表示できるように対応がされている。
対応方法は多分、マイナス値のUVを UV=1-(UV*-1)とする(右から左に走査する)ことで対応可能と思われます。(要検証)

LimeStreem wrote Jan 20, 2014 at 2:21 PM

修正しました。