2016-09-13 6 views
0

Я пытаюсь создать 2D-эффект «поддельной планеты» с использованием шейдеров, но результат, который у меня есть, пока он работает, невелик.Unity 2D Planet/Curved World Shader

void vert(inout appdata_full v) 
{ 
    //Get vertex world coordinates 
    float4 worldV = mul(unity_ObjectToWorld, v.vertex); 

    //Get target coordinates relative to vertex world 
    worldV.xyz -= _TargetPos.xyz; 

    //Transform vertex based on x distance from target 
    worldV = float4(0.0f, (worldV.x * worldV.x) * -_Curvature, 0.0f, 0.0f); 

    //Add this offset to vertex 
    v.vertex += mul(unity_WorldToObject, worldV); 
} 

Код выше вершинная функция, которую я использую, чтобы произвести этот эффект, но так как она компенсирует только вершины на Y на основе X игрока, он производит искажение вблизи края экрана. Это просто выглядит, так как все вертикальные линии остаются полностью вертикальными.

Что я хотел бы, чтобы это сделать, это сделать его более, как планета:

Difference Image

Но я не знаю, как я бы об этом.

EDIT: Я пытался в течение нескольких часов, чтобы понять это, и я думал, что я понял это:

Calculations/Diagrams (Scribbles).

Но нет, это не сработало. Уровень просто казался кривой и окунуться в случайные места.

ответ

0

Попробуйте это:

float dist = sqrt((vv.x * vv.x) + (vv.z * vv.z)); 
vv = float4(0.0f, dist * dist * -_Curvature , 0.0f, 0.0f); 

также вы можете добавить смещение:

float dist = sqrt((vv.x * vv.x) + (vv.z * vv.z)); 
dist = max(0, dist - offset); 
vv = float4(0.0f, dist * dist * -_Curvature , 0.0f, 0.0f); 

EDIT: Я должен упомянуть, - вы не можете сделать шар из плоскости. Чтобы сделать правдоподобную «планету» с помощью этого метода, вам нужно сделать куски и загрузить их, пока игрок будет близок. Даже тогда это будет просто иллюзия. Большой угол тоже будет выглядеть плохо.

+0

Спасибо за ваш ответ, но я не уверен, полностью ли вы прочитали мой вопрос. Код, который вы мне показали, это то, что я отправил, как уже пробовал, только с дополнительной осью z и некоторым смещением. Не думаю, что это важно, так как это работает достаточно хорошо, когда то, что я пытаюсь сделать, кажется почти невозможным. – Jack

+0

Извините, моя вина. Попытайтесь выяснить зависимость между изменением нормалей от плоского мира до изогнутого, а затем поверните по отношению к центру «планеты» – Krajca

 Смежные вопросы

  • Нет связанных вопросов^_^