Jump to content

Сглаживание осей джойстика


Recommended Posts

Posted

Предусмотрено ли в симуляторах DCS сглаживание осей джойстика, не могу найти.

У меня х52про с известной болячкой дрожания осей РУД. Блин, неудобно. Анимация РУД дрожит, оборотов винта дрожит, триммеров дрожит... :pilotfly:

  • ED Team
Posted
Предусмотрено ли в симуляторах DCS сглаживание осей джойстика, не могу найти.

У меня х52про с известной болячкой дрожания осей РУД. Блин, неудобно. Анимация РУД дрожит, оборотов винта дрожит, триммеров дрожит... :pilotfly:

Настроек таких нет.

Сглаживание есть в ЛА с АФМ от естественных причин - не мгновенной работы системы управления и гидравлики.

Единственный урок, который можно извлечь из истории, состоит в том, что люди не извлекают из истории никаких уроков. (С) Джордж Бернард Шоу

Posted
Настроек таких нет.

Сглаживание есть в ЛА с АФМ от естественных причин - не мгновенной работы системы управления и гидравлики.

Спасибо.

 

P-51D, A-10C, Ka-50 - это модели с AFM?

 

На дрожание ручек в кабине можно не обращать внимание?

 

На P-51D, для прямолинейного полета все время приходится подкручивать триммеры, это в порядке вещей? Сглаживания AFM не хватает? Или у меня руки кривые?

Posted

На P-51D, для прямолинейного полета все время приходится подкручивать триммеры, это в порядке вещей? Сглаживания AFM не хватает? Или у меня руки кривые?

 

Да, это нормально.

Там, где Уазик не пройдет,

И там, где Абрамс не промчится,

На пепелаце пролетят

Уэф, Би, Скрипач и дядя Вова!

(Если конечно не гробанутся на висении и посадке)

Posted
Да, это нормально.

Спасибо за пояснение.

 

А как насчет вот этого:

На дрожание ручек в кабине можно не обращать внимание?

 

Posted

А сильно дрожит? Это известная болячка Х52, некоторым помогает использование USB-hub`а, а я просто выдергивал и снова вставлял джойстик в порт

Там, где Уазик не пройдет,

И там, где Абрамс не промчится,

На пепелаце пролетят

Уэф, Би, Скрипач и дядя Вова!

(Если конечно не гробанутся на висении и посадке)

Posted
А сильно дрожит?

Нет, не сильно, но стабильно :)

 

Если в AFM не предусмотрено отваливание чего либо от этого дрожания, то пусть дрожит.

  • 3 weeks later...
Posted

Меня больше всего напрягает отсутствие сглаживания на осях обзора. В частности ось зума дергается в полете, хотя дребезг осей минимален (я на разных осях разных устройств проверял) Было бы здорово хоть для нее какую-нибудь фильтрацию дребезга предусмотреть.

i5-2500K 4.5GHz, 16Gb DDR3, GTX680 2Gb, Win7-64

  • 1 month later...
Posted

В общем апну тему, проблема отсутствия фильтрации "шумов" меня очень напрягает.

На обзоре пришлось отказаться от оси зума - с постоянными подергиваиями летать невозможно.

Неприятно смотреть как в мустанге пошумливает РУД, видимо из-за шума не работает нормально закрытие/открытие фонаря на П51. Назначал разные оси, делал мертвые зоны - результат один - при отклонении оси фонарь начинает двигаться в нужную сторону, потом сам останавливается (возможно его шум сбивает), потом начинаются непредсказуемые движения фонаря - продолжаю двигать ось вперед - но фонарь поехал назад и наоборот, иногда может все же закрыться/открыться до конца, но это редкость.

Слегка дергаются назначенные на оси "крутилки" прицела К14 на мустанге, и т.д - все что не сглаживется внутренней фильтрацией АФМ (на крен/тангаж/ рысканье в полете жалоб нет, видимо хватает АФМ-фильтрации)

Джойстики у меня не ушатаные, проверяю парой джойтестеров, во всех симах сглаживание отключаю и проблем с "дорожью" не имею.

 

Это какая-то принципиальная позиция ЕД - не давать игрокам подстроить свои девайсы под чуткость игры или есть (пусть и скрытая в конфигах) возможность эту чуткость чуть уменьшить для отдельных осей?

Может есть возможность какими-то внешними утилитами (в софте моих джоев этого нет) исправить ситуацию?

Мне очень нравятся ваши продукты ДКС серии, хочется чтоб такие мелочи не досаждали.

i5-2500K 4.5GHz, 16Gb DDR3, GTX680 2Gb, Win7-64

  • 7 years later...
Posted

О, а правда можно как в ил2 сделать? Задолбала одна ось на руде и тоже на зуме, ну нет просто ничего удобнее, даже если она дергается. В иле с шумоподавлением она практически не дергается.

Серверы КВАС. Железо: I9-9900k, 32GB DDR4, SSD, RTX 2080super

  • 2 weeks later...
Posted (edited)
On 11/24/2020 at 6:25 AM, ctajiuh58 said:

О, а правда можно как в ил2 сделать? Задолбала одна ось на руде и тоже на зуме, ну нет просто ничего удобнее, даже если она дергается. В иле с шумоподавлением она практически не дергается.

Я сделал через скрипт AutoHotkey + vJoy

Понятно, что работает он через скриптер АНК: https://www.autohotkey.com/

Сначала надо скачать виртуальный джойстик: https://sourceforge.net/projects/vjoystick/ и создать в-джойстик с осью Х. 

Потом скрипт с интерфейсом под него для АНК: https://github.com/evilC/AHK-CvJoyInterface (поскольку сам АНК не умеет писать значения в оси джойстика, даже виртуального). 

После этого можно смело использовать его через #include в своем скрипте. 

У меня, например, сейчас работает вот такой скрипт: 

Spoiler


#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
#Persistent
#include E:\Utilities\AutoHotkey\Extras\Scripts\AHK-CvJoyInterface-master\CvJoyInterface.ahk ; Library for vJ-AHK interaction
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

vJoyInterface := new CvJoyInterface() ; VJoy init 

 if (vJoyInterface.LibraryLoaded) {
	SetTimer, WatchAxis, 8 ; main loop
 } 
 else {
    msgbox % vJoyInterface.LoadLibraryLog
    ExitApp
}

; $F8:: 														; Axis assign script. 
	 ; if (vJoyInterface.LibraryLoaded) {
		; SetTimer, WatchAxis, Off 
		; JoyRot := 0.0
		; While (JoyRot < 100) {
			; vJoyInterface.Devices[1].SetAxisByIndex(JoyRot / 100 * 32768, 1)
			; Sleep, 10
			; JoyRot++
		; }
		; While (JoyRot > 0) {
			; vJoyInterface.Devices[1].SetAxisByIndex(JoyRot / 100 * 32768, 1)
			; Sleep, 10
			; JoyRot--
		; }
		; SetTimer, WatchAxis, On
	 ; }
; Return

WatchAxis:
	JoyS := GetKeyState("JoyU")  ; Get position of slider (U) axis. 
	JoyO := GetKeyState("3JoyX") ; Get initial vJoy position 
	
	JoyIncr := Abs(JoyO - JoyS) 	; Main change parameter
	if (JoyO - JoyS >= 2) {			; 1st jitter treshold 
		JoyO -= JoyIncr / 8				; Change speed 
	}
	else if (JoyO - JoyS <= -2) {	; 1st jitter treshold 
		JoyO += JoyIncr / 8 			; Change speed 
	}
	
	if (JoyIncr >= 2) 	; 2nd jitter treshold
		if (JoyS >= 99)	; Max reached -- hard max setting
				vJoyInterface.Devices[1].SetAxisByIndex(32768, 1)
		else if (JoyS <= 1)	; Min reached -- hard min setting 
					vJoyInterface.Devices[1].SetAxisByIndex(0, 1)
				else vJoyInterface.Devices[1].SetAxisByIndex(JoyO / 100 * 32768, 1) ; Normal assign 
	
	; Debug block
	; ToolTip, Set = %JoyS%`nvJ x = %JoyO% `nincr = %JoyIncr%, 0,0	; Debug block
	; if (GetKeyState("Capslock","T")) {													; Debug block
		; SetTimer, WatchAxis, Off															; Debug block
		; ToolTip, 																						; Debug block
		; Return																						; Debug block
	; }																										; Debug block
Return

 

Собрано на колене и по наитию, ибо математику я знаю плохо. Но здесь и удаление резких перепадов в показаниях, и небольшое адаптивное сглаживание оси, и жесткие "щелчки" в начале и в конце, если мы дергаем ось на минимум или на максимум. Работает вменяемо что в Ф4, что здесь.

На всякий случай, в инструкции #include надо указывать путь к интерфейсу джойстика (если он в той же папке, что и скрипт -- путь можно не указывать).

 

Номера джойстика (JoyU) и виртуального джойстика (3JoyX) в системе могут отличаться. Тогда надо будет использовать соответствующий номер джойстика (например, 2JoyU, 4JoyX, для первого номер можно не указывать). 

 

Чтобы забиндить ось в симуляторе, надо раскомментировать блок с "Axis assign script" (удалить кавычки). После этого перезагрузить скрипт (в системном лотке на панели задач правой кнопкой по значку АНК -- белая Н в зеленом квадрате -- и выбрать в выпавшем меню "Reload this script"). Затем зайти в настройки осей, выбрать нужное и, когда появится предложение подвигать осью, нажать F8 на клавиатуре (над цифрами). Ось сделает полный проход до максимума и до минимума за 2 секунды, что должно привести к тому, что игра ее увидит. После этого -- закомментировать блок привязки оси в скрипте обратно и перезагрузить скрипт (нам же может пригодиться F8?). 

 

Чтобы поменять скорость адаптивного сглаживания, надо в основном блоке поменять делитель, помеченный как "Change speed" в обоих ветках (осталось от предыдущего варианта скрипта, менять не стал). Чем больше делитель -- тем плавнее меняется зум. 

 

Внизу -- закомментированный блок отладки. Если его раскомментировать, он будет выводить в подсказку в левом-верхнем углу текущего окна положение слайдера, положение виртуальной оси и базовый инкремент, используемый в сглаживании. Если скрипт переписывать (например, можно поменять алгоритмы удаления дрожания и сглаживания на настоящие, добавить "щелчки" зума не только в начало и в конец, а, например, и для "нормального" зума куда-нибудь в середину), туда можно еще чего-нибудь вывести, чтобы понимать, как оно работает в процессе. 

 

Для редактирования я использую Notepad++, он удобен. Как его использовать вместе с АНК (определение языка, редактор по умолчанию), написано у них на форуме:

https://www.autohotkey.com/boards/viewtopic.php?t=50

Edited by Черный Дракул

They are not vulching... they are STRAFING!!! :smartass::thumbup:

Posted

есть еще программка Joystick Curves

суть та-же, ремапит физический джойстик на vJoy, попутно меняя кривые.

но помимо этого там есть фильтр.

насколько он хорошо работает, не знаю. сам ей ни разу не пользовался.

Скрытый текст

1062325194_.png.b010adf87a0b5e8a4a03467ab4b5e3f2.png

 

Posted

 

3 часа назад, Черный Дракул сказал:

Я сделал через скрипт AutoHotkey + vJoy

Понятно, что работает он через скриптер АНК: https://www.autohotkey.com/

Сначала надо скачать виртуальный джойстик: https://sourceforge.net/projects/vjoystick/ и создать в-джойстик с осью Х. 

Потом скрипт с интерфейсом под него для АНК: https://github.com/evilC/AHK-CvJoyInterface (поскольку сам АНК не умеет писать значения в оси джойстика, даже виртуального). 

После этого можно смело использовать его через #include в своем скрипте. 

У меня, например, сейчас работает вот такой скрипт: 

  Скрыть содержимое


#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
#Persistent
#include E:\Utilities\AutoHotkey\Extras\Scripts\AHK-CvJoyInterface-master\CvJoyInterface.ahk ; Library for vJ-AHK interaction
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

vJoyInterface := new CvJoyInterface() ; VJoy init 

 if (vJoyInterface.LibraryLoaded) {
	SetTimer, WatchAxis, 8 ; main loop
 } 
 else {
    msgbox % vJoyInterface.LoadLibraryLog
    ExitApp
}

; $F8:: 														; Axis assign script. 
	 ; if (vJoyInterface.LibraryLoaded) {
		; SetTimer, WatchAxis, Off 
		; JoyRot := 0.0
		; While (JoyRot < 100) {
			; vJoyInterface.Devices[1].SetAxisByIndex(JoyRot / 100 * 32768, 1)
			; Sleep, 10
			; JoyRot++
		; }
		; While (JoyRot > 0) {
			; vJoyInterface.Devices[1].SetAxisByIndex(JoyRot / 100 * 32768, 1)
			; Sleep, 10
			; JoyRot--
		; }
		; SetTimer, WatchAxis, On
	 ; }
; Return

WatchAxis:
	JoyS := GetKeyState("JoyU")  ; Get position of slider (U) axis. 
	JoyO := GetKeyState("3JoyX") ; Get initial vJoy position 
	
	JoyIncr := Abs(JoyO - JoyS) 	; Main change parameter
	if (JoyO - JoyS >= 2) {			; 1st jitter treshold 
		JoyO -= JoyIncr / 8				; Change speed 
	}
	else if (JoyO - JoyS <= -2) {	; 1st jitter treshold 
		JoyO += JoyIncr / 8 			; Change speed 
	}
	
	if (JoyIncr >= 2) 	; 2nd jitter treshold
		if (JoyS >= 99)	; Max reached -- hard max setting
				vJoyInterface.Devices[1].SetAxisByIndex(32768, 1)
		else if (JoyS <= 1)	; Min reached -- hard min setting 
					vJoyInterface.Devices[1].SetAxisByIndex(0, 1)
				else vJoyInterface.Devices[1].SetAxisByIndex(JoyO / 100 * 32768, 1) ; Normal assign 
	
	; Debug block
	; ToolTip, Set = %JoyS%`nvJ x = %JoyO% `nincr = %JoyIncr%, 0,0	; Debug block
	; if (GetKeyState("Capslock","T")) {													; Debug block
		; SetTimer, WatchAxis, Off															; Debug block
		; ToolTip, 																						; Debug block
		; Return																						; Debug block
	; }																										; Debug block
Return

 

Собрано на колене и по наитию, ибо математику я знаю плохо. Но здесь и удаление резких перепадов в показаниях, и небольшое адаптивное сглаживание оси, и жесткие "щелчки" в начале и в конце, если мы дергаем ось на минимум или на максимум. Работает вменяемо что в Ф4, что здесь.

На всякий случай, в инструкции #include надо указывать путь к интерфейсу джойстика (если он в той же папке, что и скрипт -- путь можно не указывать).

 

Номера джойстика (JoyU) и виртуального джойстика (3JoyX) в системе могут отличаться. Тогда надо будет использовать соответствующий номер джойстика (например, 2JoyU, 4JoyX, для первого номер можно не указывать). 

 

Чтобы забиндить ось в симуляторе, надо раскомментировать блок с "Axis assign script" (удалить кавычки). После этого перезагрузить скрипт (в системном лотке на панели задач правой кнопкой по значку АНК -- белая Н в зеленом квадрате -- и выбрать в выпавшем меню "Reload this script"). Затем зайти в настройки осей, выбрать нужное и, когда появится предложение подвигать осью, нажать F8 на клавиатуре (над цифрами). Ось сделает полный проход до максимума и до минимума за 2 секунды, что должно привести к тому, что игра ее увидит. После этого -- закомментировать блок привязки оси в скрипте обратно и перезагрузить скрипт (нам же может пригодиться F8?). 

 

Чтобы поменять скорость адаптивного сглаживания, надо в основном блоке поменять делитель, помеченный как "Change speed" в обоих ветках (осталось от предыдущего варианта скрипта, менять не стал). Чем больше делитель -- тем плавнее меняется зум. 

 

Внизу -- закомментированный блок отладки. Если его раскомментировать, он будет выводить в подсказку в левом-верхнем углу текущего окна положение слайдера, положение виртуальной оси и базовый инкремент, используемый в сглаживании. Если скрипт переписывать (например, можно поменять алгоритмы удаления дрожания и сглаживания на настоящие, добавить "щелчки" зума не только в начало и в конец, а, например, и для "нормального" зума куда-нибудь в середину), туда можно еще чего-нибудь вывести, чтобы понимать, как оно работает в процессе. 

 

Для редактирования я использую Notepad++, он удобен. Как его использовать вместе с АНК (определение языка, редактор по умолчанию), написано у них на форуме:

https://www.autohotkey.com/boards/viewtopic.php?t=50

Уфф какая жесткая жесть... я правильно понял, что эта конструкция будет отрабатывать только слайдер? Весь остальной инпут с джойстика будет идти напрямую?

Серверы КВАС. Железо: I9-9900k, 32GB DDR4, SSD, RTX 2080super

Posted
51 minutes ago, ctajiuh58 said:

Уфф какая жесткая жесть...

Ничего жесткого. АНК и вДжой ставятся один раз (вДжой, правда, еще настраивается -- но тоже только один раз). Скрипты можно использовать готовые. Перед запуском игры потребуется запустить скрипт (второй), т.е. сделать один двойной клик. Лишний, да -- но пока в настройках осей не появилось нужного функционала, делать нечего. 

 

51 minutes ago, ctajiuh58 said:

я правильно понял, что эта конструкция будет отрабатывать только слайдер?

Этот скрипт -- да, только одну ось, для Х52 -- слайдер. Впрочем, если нужно еще что-то -- это можно просто дописать. 

 

51 minutes ago, ctajiuh58 said:

Весь остальной инпут с джойстика будет идти напрямую?

Я скажу больше, весь инпут будет с джойстика идти напрямую. АНК перехватывает и клаву, и мышь -- а вот джойстик умеет только читать. 

They are not vulching... they are STRAFING!!! :smartass::thumbup:

Posted
2 часа назад, Черный Дракул сказал:

Ничего жесткого. АНК и вДжой ставятся один раз (вДжой, правда, еще настраивается -- но тоже только один раз). Скрипты можно использовать готовые. Перед запуском игры потребуется запустить скрипт (второй), т.е. сделать один двойной клик. Лишний, да -- но пока в настройках осей не появилось нужного функционала, делать нечего. 

 

Этот скрипт -- да, только одну ось, для Х52 -- слайдер. Впрочем, если нужно еще что-то -- это можно просто дописать. 

 

Я скажу больше, весь инпут будет с джойстика идти напрямую. АНК перехватывает и клаву, и мышь -- а вот джойстик умеет только читать. 

Попробуем. Ровный слайдер может сберечь кучу нервов. Отпишусь после выходных если сделаю.

Серверы КВАС. Железо: I9-9900k, 32GB DDR4, SSD, RTX 2080super

  • 4 weeks later...
Posted (edited)

Опробовал АНК (у меня как раз X52 Pro) - слайдер сглаживает отлично! Кстати, в примере скрипта половина текста лишняя (закомментировано). Из нюансов - есть небольшая "ступенька" в крайних положениях слайдера (некритично, до упора не двигаю). Считаю, что АНКой можно сгладить слайдер и крутилки. Ну максимум - РУД. Ресурсы, кстати, не жрёт.

Upd: "ступеньку" в крайних положениях убрал, слайдер для зума отлично подходит! Ещё добавил сглаживание РУДа. Всем советую. Замечал, что даже на вартоге у людей слайдер шумит.

Edited by JohnnyST
  • 4 years later...
Posted
В 30.12.2020 в 00:02, JohnnyST сказал:

Опробовал АНК (у меня как раз X52 Pro) - слайдер сглаживает отлично! Кстати, в примере скрипта половина текста лишняя (закомментировано). Из нюансов - есть небольшая "ступенька" в крайних положениях слайдера (некритично, до упора не двигаю). Считаю, что АНКой можно сгладить слайдер и крутилки. Ну максимум - РУД. Ресурсы, кстати, не жрёт.

Upd: "ступеньку" в крайних положениях убрал, слайдер для зума отлично подходит! Ещё добавил сглаживание РУДа. Всем советую. Замечал, что даже на вартоге у людей слайдер шумит.

Ничего не выходит... Уже несколько дней пытаюсь в этом коде разобраться. Можно попросить кого инструкцию подробную что надо сделать???

Posted
В 26.01.2025 в 01:10, Ezhik сказал:

Ничего не выходит... Уже несколько дней пытаюсь в этом коде разобраться. Можно попросить кого инструкцию подробную что надо сделать???

Проблема решена, нашел ошибки в коде, но все это было зря, как оказалось... Так как при использовании vJoy в игре перестают работать триммеры. Неужели нет способа устранения дребезга осей?

Posted
5 часов назад, Ezhik сказал:

Неужели нет способа устранения дребезга осей?

ну можно кардинально к вопросу подойти - сменить джойстик.
ну или если хватает экспириенса, поменять в текущем электронику на тот-же mmJoy.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...