Есть ли способ растянуть RenderTexture, играя на плоскости с VideoPlayer в Unity? - PullRequest
0 голосов
/ 16 октября 2018

У меня проблемы с VideoPlayer нацеливанием на RenderTexture и отображением на плоскости, и я запутался.В случае, если это имеет значение, я использую Unity 2018.2.11f1 и Vuforia, чтобы разместить видеоэкран в AR (хотя, насколько мне известно, это не должно иметь значения, поскольку я просто пытаюсь воспроизвести видео в трехмерном мире, независимо от того,AR / VR).Я начал с учебника YouTube Unity по этой теме , но перешел к выполнению этого в сценарии для своих целей.

В документации Unity для VideoPlayer класса это говорит о свойстве Aspect Ratio:

Соотношение сторон изображений, которые заполняют Camera Near Plane , Camera Far Plane или Render Texture , когда используется соответствующий Режим Render .

И для Stretch значения этого свойства:

Масштабируйте как горизонтально, так и вертикально, чтобы соответствовать целевому прямоугольнику.Соотношение сторон источника не сохраняется.

Насколько я понимаю, эти настройки в VideoPlayer:

Screen capture of VideoPlayer settings

приведет к растяжению RenderTexture, чтобы заполнить размер плоскости, на которой он рендерится ... но вместо этого я получаю это (игнорируйте размытые цвета, это освещение, которое я не исправил):

Screen capture of plane displaying video

, который, очевидно, является результатом того, что свойство Wrap Mode является "Зажим" для RenderTexture.Я настраиваю вещи с помощью кода, например:

var Screen = this.gameObject.AddComponent<Renderer>();
var VideoRenderer = Screen.gameObject.AddComponent<Renderer>();
var VideoTexture = new RenderTexture((int)Clip.width, (int)Clip.height, 0);

VideoTexture.useDynamicScale = true;
VideoTexture.wrapMode = TextureWrapMode.Clamp;

Screen.renderMode = VideoRenderMode.RenderTexture;
Screen.aspectRatio = VideoAspectRatio.Stretch;
Screen.targetTexture = VideoTexture;

VideoRenderer.material.SetTexture("_MainTex", VideoTexture);
VideoRenderer.material.SetTexture("_EmissionMap", VideoTexture);

, где Clip - это предоставленный VideoClip.Мне известно, что я устанавливаю для него значение «Зажим», но другие параметры делают именно то, что говорят, и игнорируют значение «Растянуть» VideoPlayer.Следует отметить, что плоскость, на которой я пытаюсь отобразить видео, имеет ~ 2x ширину / высоту видео (как показано на скриншоте). **

Я полагаю, что у меня естьсвязь между VideoPlayer.aspectRatio и RenderTexture.wrapMode в обратном направлении, и что если размер RenderTexture больше размеров VideoClip, он растянет видео до размера RenderTexture ... но как я могу установить ширину/ высота от RenderTexture до размера пикселя плоскости?(Screen.transform.localScale.[x/z] не пиксели ... так как я могу получить это значение?)

РЕДАКТИРОВАТЬ: Используя это VideoClip, что я знаю размеры и жесткое кодирование RenderTexture в моем фрагменте кода выше до 2 * Вт / ч, я все еще получаю то же поведение "Зажим" ... так что я не знаю, что мне не хватает.

** У меня естьпопытался установить VideoPlayer на «Переопределение материала», и он работает должным образом, но для этого требуется освещение (следовательно, упомянуто выше), и я хочу сделать это «правильно» с Albedo / Emission, чтобы освещение не было реализованоза каждое видео, которое я делаю.

Любая помощь будет принята с благодарностью, я немного постучался!(Я пытался найти ответы, но нашел только неотвеченные вопросы, такие как this ).

1 Ответ

0 голосов
/ 16 октября 2018

Щадя так много ругательств, которые я использовал, когда обнаружил это ... это был лист на Material, назначенный для плоскости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...