forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

pax 23.06.2011 21:31

Ответ: Фак по Юнити.
 
Зачем так кричать? :)
PHP код:

var mycamera:GameObject;
var 
Distance=10;
function 
Update () {
mycamera.transform.position.transform.position.Mathf.Sin(mycamera.transform.rotation.Mathf.Deg2Rad)* Distance;
mycamera.transform.position.transform.position.Mathf.Cos(mycamera.transform.rotation.Mathf.Deg2Rad)* -Distance;



is.SarCasm 23.06.2011 22:37

Ответ: Фак по Юнити.
 
а ты сам пробувал что получилось? Теперь камера вообще стоит на месте, потому что результать произвидения: mycamera.transform.rotation.x * Mathf.Deg2Rad = 0.000**
я говорю о том что камера сначала двигается как надо (смотриш вниз = идеш вверх), а потом наоборот (смотриш вниз = идеш вниз) и сменяют они лруг друга постоянно по хрен знает какой причине

Lestar 23.06.2011 22:55

Ответ: Фак по Юнити.
 
Ты к Vector3 прибавляешь Quaternion .Это верно?

P.S.Сплю,проехали.

pax 24.06.2011 04:23

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от is.SarCasm (Сообщение 192843)
а ты сам пробувал что получилось?

Нет, потому что задача не описана, какой вопрос, такой и ответ. Я посчитал что ты используешь градусы, вместо радиан, а на самом деле, ты использовал компонент кватерниона (как написали выше), который не несет полезной информации о повороте отдельно.

Комментарии:

1. Что такое нода?
2. Использование компоненты кватерниона бессмысленно.
3. Использовать даже компоненту transform.eulerAngles.x было бы не правильно, так как ее значение может прыгать (прыгает в зависимости от общего поворота модели), это не тоже самое что и в блице или 3ds max. Возможно угол стоит вручную считать для данной задачи (неизвестно какой).
4. Использовать в функциях Mathf.Sin/Mathf.Cos/и т.д. нужно радианы, а transform.eulerAngles возвращает градусы (Quaternion возвращает неизвестно что), т.е. transform.eulerAngles.x * Mathf.Deg2Rad.
5. В качестве mycamera в данном случае можно использовать переменную var mycamera:Transform, тогда отпадет надобность получать трансформ камеры каждый раз, т.к. это немного медленная операция.

Если исправить на использование "правильного" угла, то скрипт мог бы выглядеть так:
PHP код:

var mycamera:Transform;
var 
Distance=10;
function 
Update () {
var 
mycamera.eulerAngles.Mathf.Deg2Rad;
mycamera.position.transform.position.Mathf.Sin(x)* Distance;
mycamera.position.transform.position.Mathf.Cos(x)* -Distance;


Но вероятность, что камера иногда будет скакать остается.

is.SarCasm 24.06.2011 10:29

Ответ: Фак по Юнити.
 
Спасибо, понятия не имел что мне возвращают квате...ны
Ну тогда в скрипте поворота камеры считать "отдельно" градусы.
А как может зависеть один угол от другово?

Taugeshtu 24.06.2011 14:37

Ответ: Фак по Юнити.
 
Цитата:

А как может зависеть один угол от другово?
Если повернуть объект на 180 градусов по оси Y, потом ещё на 90 по оси X, то вполне возможно что юнити пересчитает углы поворота в более удобное для человека представление (может оказаться, что это то же самое, что 0, 0, -90; в коде я с таким не сталкивался, а вот в редакторе - полно такого)

pax 24.06.2011 14:42

Ответ: Фак по Юнити.
 
Это из-за процесса конвертации Quaternion => EulerAngles и обратно.

cahekp 25.06.2011 18:06

Ответ: Фак по Юнити.
 
Привет всем.

Изучал сегодня postprocess эффекты для Юнити, посмотрел на Grayscale Image Effect, и вдруг я подумал... Помните "Город грехов"? Там была такая стильная черная-белая картинка с ярко-выраженными красными объектами...

Так вот, можно ли дополнить этот эффект, чтобы он не действовал на объекты с определенными, допустим, тегами? То есть, например, задаем какому-нибудь объекту (допустим, красному галстуку) тэг "AlwaysColored", и всё, Grayscale Image Effect больше не обесцвечивает этот объект, он всегда остается красным галстуком. Вот.

Nuprahtor 25.06.2011 18:08

Ответ: Фак по Юнити.
 
Зачем я прочитал предыдущее сообщение :(

Nuprahtor 25.06.2011 19:04

Ответ: Фак по Юнити.
 
А по теме - вот ссылки для размышления. Не проверял.
http://forum.unity3d.com/threads/890...TY-SHADER-quot
http://answers.unity3d.com/questions...one-color.html

cahekp 26.06.2011 20:23

Ответ: Фак по Юнити.
 
Ага, отлично.
Решил, что подобный эффект можно сделать двумя камерами. Первая рендерит всё без, допустим, "красных объектов", а вторая - только "красные" (такие объекты лежат на отдельном слое, контролирую через "Culling Mask"). "Clear Flags" у второй камеры - "Don't Clear". Depth значения первой и второй камеры - 1 и 2 соответственно. Всё хорошо.
Но!

1) Если к первой камере применить "Grayscale Image Effect", а вторую отключить - увидим только серую часть изображения. Отлично, так и должно быть, эффект работает. Но если включить вторую, то вся серость куда-то пропадает. Пост-процесс эффект для первой камеры не выполняется. Нехорошо это. Почему так происходит?

2) Ладно, допустим, пост-процесс эффекты выполняются только для последней по Depth значению камеры, если они лежат ровно "друг на друге". Хорошо. Тогда рендер первой камеры вместе со всеми наложенными на нее эффектами можно запихнуть в "Target Texture". Вопрос: как эту текстуру можно использовать в качестве бэкграунда для второй камеры? Или можно решить это дело другим путем?

3) И последнее: как в Юнити можно оперировать с буфером глубины? Можно ли перекинуть буфер глубины с одной камеры на буфер глубины другой?

4) Ну и самое последнее: как бы Вы делали подобный эффект (с условием, конечно, что все текстуры - цветные)?

Taugeshtu 26.06.2011 21:02

Ответ: Фак по Юнити.
 
Если не ошибаюсь, где-то в Clear Flags или нердах настройки камеры есть свистелка, которая включает запись буфера глубины для RenderTexture - остаётся убедиться, что грейскейл его не похерит, и отрисовать цветное второй камерой.

cahekp 27.06.2011 20:05

Ответ: Фак по Юнити.
 
to Taugeshtu: нашел свистелку, которая переключает буфер рендера (или как там правильно) на буфер глубины.
Вот она: myRenderTexture.format = RenderTextureFormat.Depth;

Всё работает, грейскейл не мешает. Но как мне теперь применить этот буфер ко второй камере?
Неужели придется писать отдельный шейдер, который будет смешивать 2 текстуры глубины с двумя текстурами рендера? Это мне что, как минимум 4 камеры нужно иметь? Что-то слишком уж накладно. :)

Может все-таки есть более простой путь?

SBJoker 27.06.2011 20:35

Ответ: Фак по Юнити.
 
Обычно на шейдерах пишут постэффект который обесцвечивает картинку везде кроме как на отмеченных объектах.

cahekp 27.06.2011 20:58

Ответ: Фак по Юнити.
 
Воот... И как это можно сделать-то? Как мне сказать шейдеру, чтобы он тут обесцвечивал, а тут - нет? В этом-то вся и проблема!

Как создать маску, по которой будет работать шейдер?


Часовой пояс GMT +4, время: 04:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot